\ IEEE 1850 PSL -- Issues List

 

PSL Issues List - Index

Addressed in IEEE 1850-2005 PSL:
1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 24, 25, 27, 28, 29, 31, 32, 34, 35, 36, 37, 38, 41, 44, 47, 50, 51, 52, 53, 55, 56[partial], 57, 59[partial], 60, 61,

Remaining To Be Addressed:
5, 6, 19, 23, 26, 30, 33, 39, 40, 42, 43, 45, 46, 48, 49, 54, 56, 58, 59, 63, 64, 65, 66, 67, 68, 69, 70, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,138, 139,140,141, 142,143,144, 145,146,147.

 

Issues To Be Addressed in IEEE 1850-200x PSL

Issue Disposition

LRM Issues: 6,45, 46, 48, 62, 74, 71, 72, 73,74, 77, 80, 87, 97, 104, 108, 119, 121,129,130, 135.
Extensions Issues: 5, 19, 23, 26, 33, 39, 40, 42, 43, 49, 54, 56, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 75, 76, 78, 79, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 105, 106, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 120, 122, 123, 124, 125, 126, 127, 131, 132, 133, 134, 136, 137.
Rejected Issues: 30,81.
Out of Scope Issues:
Not Yet Dispositioned Issues: 119.

Issues Not Yet Grouped: issues 74, 91, 118,123, 128, 129, 130.

Issue Groups

Group C.1: [3.2] vunit binding, reusable verification IP, scope and visibility of names, overriding definitions: issues 5, 19, 64, 65, 75, 77, 92, 100, 101, 103 23, 30, 33, 54, 76, 93, 26, 56, 112,113, 114, 116, 119, 120.
Group D.1: [4.2] named parameters: issues 98, 110 .
Group E.1: simple subset: issues 99, 109.
Group F.1: vhdl: issues 63, 79, 81, 84, 85, 86,102,127.
Group K.1: cover: issues 42, 43, 59, 89.
Group L.1: [4.6] LRM (editorial) items: issues 62, 70, 71, 72, 73, 80, 87, 97, 104, 120, 135.
Group M.1: [3.8] clocking and sampling: issues 39, 45, 46, 48, 88, 96, 115,124,125.
Group N.1: [5.0] numeric vs. integer expression: issues 6.
Group O.1: [3.0] SystemC flavor: issues 78.
Group P.1: Assertion control capabilities: issues 49, 66, 67,122.
Group Q.1: verification directives: issues 83, 90, 94, 105, 106, 107, 108, 111, 126, 133, 134.
Group R.1: generate: issues 68, 82.
Group S.1: concept and terminology: issues 58, 95.
Group T.1: built-in functions: issues 40, 117.
Group U.1: New temporal operators: issues 69, 69, 137.
Group V.1: Formal semantics: issues 131, 132.

 

Issues Addressed in IEEE 1850-2005 PSL

Issue Disposition

LRM Issues: 1, 2, 3, 4, 27, 37, 51, 52, 53, 55, 57, 60.
Extensions Issues: 5, 6(L), 7, 8, 9, 10, 11, 12, 13(L), 15, 17, 19, 20, 21, 23, 25, 26, 30, 31, 33, 36(L), 38, 39, 40, 41, 42, 43, 44, 50.
Rejected Issues: 14, 16, 18, 22, 24, 28, 29, 32, 35, 61.
Out of Scope Issues: 34.
Not Yet Dispositioned Issues: 45, 46, 47, 48, 49, 54, 56, 58, 59.

LRM Changes Adopted in IEEE 1850-2005 PSL

Group A: clocks - modeling layer: issues 7, 40.
Group B: prev/rose/fell - corner cases: issues 9, 10, 11, 12
Group D: [4.2] named constructs: issues 8, 38.
Group E: simple subset: issue 13
Group F: vhdl: issues 15, 17, 27.
Group G: [3.0] abort: issue 20
Group H: [4.0] portability: issue 21
Group I: [2.8] forall: issues 16(R), 25, 36, 41, 47, 50.
Group J: [4.0] non-determinism: issue 31
Group L: [4.6] LRM items: issues 1, 2, 3, 4, 27, 37, 51, 52, 53, 55, 57, 60.
Group O: [3.0] SystemC flavor: issues 44.

 

Issues Master List

Each of the following issues is prefixed with an indication of its 
disposition:

  L   = LRM
  E   = Extension
  R   = Rejected
  OOS = Out of Scope
  ?   = not yet determined

For each LRM or Extension issue, the priority is also indicated:

  5   = highest
 ...
  1   = lowest
  ?   = not yet determined.  

1. (L:5) Error in old form of suffix implication syntax:

{ Sequence } ( FL_Property ) should be { SERE } ( FL_Property )
[SY 29Jun04]
2. (L:5) Redundant production for SERE:

remove the production SERE ::= Sequence_Instance, because it is
redundant [SY 29Jun04]
3. (L:5) Equivalence between W and until needs parens:

LTL operators - [a W b] should be equivalent to (a until b), not just
a until b - ditto for [a U b] vs. a until! b [EM 30 Jun 04]
4. (L:5) Appendix B, Table 1 needs to be updated for SV:

Table 1 of Appendix B (typed-text symbols in the different flavors)
needs to be updated to incorporate SystemVerilog flavor [DF 8 Jul 04]
5. (E:4) Clarify implications of multiple vunits bound to same module:

PSL LRM should say that multiple vunits bound to the same module are
implicitly conjoined - i.e., that assumptions in one may be used to
check assertions in the other, etc. [AS 9 Jul 04]
6. (L:5) Correct 6.2.4.2 to refer to numeric expression:

The PSL v1.1 LRM says the following (in section 6.2.4.2, Property
instantiation): "For a const formal parameter, the actual parameter
shall be a statically evaluable integer expression."  In this context,
an "integer expression" is intended to refer to the type class
"numeric expression" defined in section 5.1.4. So there is at least
one problem here - for the LRM to be consistent, section 6.2.4.2
should refer to "numeric expression" rather than to "integer
expression". [EM 9 Aug 04]
7. (E:5) Clarify effect of default clock declarations:

Default clocks apply to directives that don't have a clock. Should
they also apply to declarations that don't have a clock? In
particular, to endpoint declarations, which may be used in contexts
that don't have a clock? And for that matter, does it ever make sense
to define a sequence without specifying the clock (or applying the
local default clock)? By extension, wouldn't it also make sense to
specify (or apply) a clock when declaring a multi-cycle property? [EM
11 Aug 04]
8. (E:5) Allow variable parameters of arbitrary type:

Need the ability to pass variable parameters of arbitrary type, as
well as to pass constant parameters of arbitrary type. Perhaps we
should (a) relax the type class of 'const' params to be AnyType, and
add a 'var' param also of AnyType. [EM 11 Aug 04]
9. (E:5) Clarify definition of prev() at time 0:

Define the value of prev() in the first cycle, or define that it is
not defined. [CE 2 Sep 04]
10. (E:5) Clarify definitions of rose(), fell() at time 0:

If prev() is not defined in the first cycle, define the values of
rose() and fell() in the first cycle. [CE 2 Sep 04]
11. (E:5) Clarify definition of prev(v(i)):

Disallow prev(v(i)), where v is a vector and i is not a constant, or
define which value of i should be used (the current value or the
previous value). [CE 2 Sep 04]
12. (E:5) Clarify definition of prev(f(i)):

Disallow prev(f(i)), where f is a function and i is not a constant, or
define which value of i should be used (the current value or the
previous value). [CE 2 Sep 04]
13. (L:4) Further restrict the Simple Subset:

Next_e and Next_event_e may need to have Boolean operands within the
simple subset, because

 - next_e[1:2](f)           =  next (f | next f)
 - next_event_e(b)[1:2](f)  =  next_event(b)(f | next_event(b)(f))

and in each case the LHS of the "or" operator needs to be
Boolean. [SW,CE 2 Sep 04]
14. (R:1) If-then-else assertions:

PSL should support 'if-then-else' assertions provided that the if
condition is Boolean - e.g., always a -> {b; c; d} else {e; f; g}; 
[JM/DA 3 Sep 04]
15. (E:5) Clarify how PSL Boolean interpretation is applied to VHDL:

If a,b are of different VHDL types that are both interpreted as
Boolean, does this mean that (a AND b) is legal, using the AND
operation on type Boolean?  If so, what are the implications for
overload resolution?  If not, need to clarify the LRM.  [EM 20 Sep 04]
16. (R) Clarify how names work for replicated properties:

Is there one name for all 'instances', or are there are multiple
names, one for each 'instance' (and if so, what they are).  [CE 21 Sep
04] [Note that the name of interest is actually the directive name,
not the property name.  This may interact with a possible extension to
allow 'forall' to apply to directives.]
17. (E:5) Clarify the return type for built-in functions in the VHDL
    flavor:

If rose/fell are considered Booleans, does this mean that in the VHDL
flavor they return STD.standard.Boolean, or that they are overloaded
to return each of the types that are interpretable as Boolean in PSL?
(The latter includes Boolean, Bit, and std_ulogic.)  The more strict
interpretation would mean that, for std_logic signals clk, ena, the
expression (rose(clk) and ena) would be illegal.  The more relaxed
interpretation would require overloaded versions of rose, fell,
etc. for VHDL, but it might also lead to the PSL tools doing overload
resolution in flavors that do not inherently support overloading
(e.g., SystemVerilog).  [EM 24 Sep 04]
18. (R) Define new operator =>.

New precedence rules now require parentheses in nested "->
next" operations.  This could be alleviated by defining an
operator => meaning "-> next", analogous to |=>, with the same
precedence as ->.  [EM 28 Sep 04]
19. (E:3) Hierarchical scoping in vunits based on the HDL language

Some people have suggested that PSL vunits should have the same kind
of hierarchical scoping as the HDLs they apply to. In particular,
vunits can be viewed as being similar to packages in VHDL, with
'inherit' providing the same function as 'use' in VHDL. This needs to
be discussed in the context of the VHDL standard, and the resolution
should then be folded back into the PSL standard.
20. (E:3) The semantics of ({{a} && {a;b}{ abort b). 

This is a minor issue (extreme corner case) in the formal semantic
definition of both PSL and SVA and needs to be resolved in parallel in
both languages.
21. (E:4) Portability of PSL. 

While PSL is defined to work with multiple HDLs, PSL code written for
one HDL may not work for an equivalent description written in another
HDL, if the PSL depends upon language-specific constructs. This may
involve essentially interpreting Verilog-flavor operators in a VHDL
(or SystemC) context.
22. (R) The meaning of unclocked, multi-cycle assertions.

This amounts to the question of how time is measured in a given
language, and in a given tool. PSL does not define this, because
different tools have different models of time. The solution needs to
support modeling self-timed circuits.  (see Anthony McIsaac's writeup
about baseline sampling semantics)
23. (E:4) Support for reusable verification IP. 

This amounts to somehow enabling declaration and instantiation of
groups of properties (and auxiliary modeling code), e.g., by adding
parameters (of specific data types) to verification units.

See (here) for more details.
24. (R) Consider extending simple subset restrictions.

The Simple Subset allows {r} until b, for sequence {r}, boolean b, but
this seems to be not very useful.
25. (E:3) Allow forall to apply to directives.
26. (E:2) Add module name to path for instance-based vunit binding.

Need module name in instance-based vunit binding (for implementations
that are done are parse time, before design hierarchy is known)
27. (L:4) Clarify interpretation of std_logic 'H', 'L'.

Need to clarify how other values of std_ulogic are interpreted as
Boolean: 'H' => True, 'L' => False, others => False.
28. (R) Encryption for PSL.

PSL should adopt the same encryption mechanism being adopted by VHDL
and Verilog.
29. (R) Strong operators on LHS of implication.

Check to make sure that strong operators are disallowed on the LHS of
an implication, or at least that they are not treated as strong if
they appear on the LHS of an implication.
30. (E:4) Better support for reusable verification IP.
31. (E:4) Non-determinism.

Need better support for non-determinism in PSL, especially if we
intend to use the Verilog flavor as the basis for portable PSL.
32. (R) Clocking of 'next' in modeling layer.

Need to specify what the clocking condition is for built-in function
`next' in the modeling layer - perhaps specify that the default clock
applies to this usage as well.
33. Parameterized vunits:

Regarding your issue about what is important for a future PSL
standard.  I just wanted to say that I feel that the most important
feature that any standardization committee should address is the
question of reusable verification IP. What is needed is a better
mechanism of reusing property via a library approach. Perhaps
parametrized vunits is the way to go.  Clearly, for VHDL it would be
quite simple to extend the current PSL standard to address these
issues (simply (oh well...) make it possible for a "function" to take
properties as parameters and make it possible to return properties as
results. Or rather the other way around, let property declarations
take the complete range of VHDL types as parameters. For Verilog, this
approach is not viable, and it will be cumbersome to have a different
approach here as then verification IP cannot be shared among VHDL and
Verilog designs in a coherent way.
[JA 04]
34. (OOS) Need a machine-readable form for the PSL formal semantics, to
    drive semantic validation without the need for intermediate (and
    error-prone) transcription, as well as to drive other sorts of
    semantics-driven tools.  Note that Mike Gordon is starting a
    research project in this area.  [MG 23 Sep 04]
35. (R) Need to be able to support modeling of serial protocols in
    PSL.  This generally involves data-dependent decisions - e.g.,
    using 'count' transmitted by the protocol to determine how many
    bytes of 'data' are expected to follow.
36. (L:2) Need to clarify whether 'replication' associated with forall
    actually involves creation of multiple copies of the
    assertion. [BC 5Oct04]
37. (L:?) Section 5.1, Expression Type Classes, does not follow
    capitalization conventions used in the rest of the document (first
    work capitalized; others not). Some other sections have the same
    problem (e.g., A.3). [EM 6Oct04]
38. (E:?) Allow parameters of any of the type classes that we define:
    Bit, BitVector, Boolean, Numeric, String. The built-in functions
    essentially have parameters of these type classes, so if you want
    to pass a parameter to a property, and that property applies a
    built-in function to that parameter, you will have to know whether
    the parameter is legal for the built-in function, hence it must be
    possible to specify the type class of the parameter. For example,
    this would allow passing buses as BitVector class parameters to
    properties that check relationships among the bits of the
    bus. [LB/EM 07Oct04]

>> Related to item 8. [EM 11Oct04]
39. (E:?) Clarify the (default) input sampling mechanism in order to
    avoid "races" between property sampling and design update. This is
    particularly an issue with simulation-based evaluation of PSL in
    (System)Verilog. (Related to item 22.) [BT 08Oct04]
40. (E:?) Clocking of endpoints, prev etc.

Currently, the formal semantics does not deal with clocking "inside"
booleans, which is very strange. This means that the clocking operator
does not touch anything inside (compound) booleans, thus

     endpoint e = { a;b;c }

     assert always e@(posedge clk);

disregards the @(posedge clk) altogether, and e is clocked with some
"system clock", which is tool dependent. The same is true for
eg. prev(). [JA 11Oct04]
41. (E:?) Generalization of forall.

forall should not be restricted to top-level usage. This is something
which is tied to a specific implementation issue, which should not
shine through to the user. Instead, forall should be just like any
other operator, eg.

     assert always a -> next forall i in [0:3] : a[i] > 2 ||
     !enable[i];

should be legal PSL. 
[JA 11Oct04]
42. (E:?) Data-oriented coverage:

Need to be able to use a cover directive more effectively to do
data-oriented coverage (as opposed to control-oriented coverage). 
[EM 11Oct04]
43. (E:?) Transaction-oriented coverage:

Need to be able to use a cover directive to recognize a
transaction and extract data values being transferred by the
transaction for later processing (e.g., for more detailed coverage
analysis, or for debugging). 
[EM 11Oct04]
44. (E:?) SystemC Flavor of PSL

Need to define a SystemC flavor of PSL, to allow PSL to be used in
system-level models. 
[EM 11Oct04]
45. (?:?) Clarify that time is discrete:

Nowhere in the LRM does it say explicitly that time is discrete.  
Proposal: Add the following sentence to the defition of evaluation 
cycle in 3.1.18: "Note that this implies that time is discrete."  
[CE 26Oct04]
46. (?:?) Clarify that time is context-independent:

Nowhere in the LRM does it say that time is context-independent.  
In other words, that time ticks the same for formula f and for 
formula g, even if they contain different signals.  (We are talking 
about the finest granularity of time here).  
Proposal:  Add the following sentence to the end of section 4.4.1:  
"Note:  while PSL does not dictate how time ticks for an unclocked 
property, it does assume that the ticking of time is independent of 
the property being checked.  That is, while two tools may see 
different sequences of signal values, two properties being checked 
with the same tool will see the same sequence of signal values."  
[CE 26Oct04]
47. Typed 'forall':

The forall construct introduces a variable whose type is not specified. 
This creates problems when the variable is used in expressions, 
particularly in the VHDL flavour.

Also, the following extensions would improve the "forall" construct:
- allow both directions (to and downto) in IndexRanges. 
- allow enumeration elements as elements of ValueSet
- allow an enumeration type as Value set

some examples:
	forall c: color in { red, green, blue } : ...
	forall v: signed(3 downto 0) in std_ulogic : ...
	forall v: unsigned(0 to 2) in { '0', '1', 'X' } : ...

[KW 19Oct04]
48. (?:?) Clarify explanation of clock expressions:

On page 39, for both Verilog and SystemVerilog, the LRM says 
"... such a clock expression is considered to hold in those cycles 
in which it generates an event ...".  It is not completely clear 
that 'such' here is referring only to non-Boolean clock expressions,
i.e., clock expressions that are HDL-specific (e.g., posedge clk).
Proposal: Add the qualifier "non-Boolean" to the above sentence,
in both occurrences, so that it reads in both cases "... such a 
non-Boolean clock expression is considered to hold in those cycles 
in which it generates an event...".  [CE 17Nov04]
49. Assertion Control Capability:

Need an abstract API definition plus language bindings for control 
of assertion language execution in simulation.  [BC 15 Nov04]
50. Parameterized AND/OR operators:

Define AND and OR operators with replication parameters to enable 
forall-like conjunction (or disjunction) of instances of a parameterized
property or sequence. An example might be something like 

    && [i in {1:10}] (a[i] -> b[i]) 

or 

    || [i in {1:10}] (a[i] -> b[i]) 

or

    || [i in {1:10}] {a; b==i; d; d==i}

[DF/EM 23 Nov 2004]
51. Incorrect note, or unnecessary restriction:

In section 6.1.2.5, Clocked SERE, the PSL v1.1 LRM says:

    NOTE—When clocks are nested, the inner clock takes precedence 
    over the outer clock. That is, the SERE {a;b@clk2;c}@clk is 
    equivalent to the SERE {a@clk; b@clk2; c@clk}, with the outer 
    clock applied to only the unclocked sub-SEREs. In particular, 
    there is no conjunction of nested clocks involved.

However, 'a@clk', 'b@clk2', and 'c@clk' are all properties, and the 
syntax for SEREs does not allow properties as SEREs or elements thereof.  
So technically this note should read 

    NOTE—When clocks are nested, the inner clock takes precedence 
    over the outer clock. That is, the SERE {a;{b}@clk2;c}@clk is 
    equivalent to the SERE {{a}@clk; {b}@clk2; {c}@clk}, with the 
    outer clock applied to only the unclocked sub-SEREs. In 
    particular, there is no conjunction of nested clocks involved.

But this seems more verbose than necessary, similar to the problem we 
used to have with &&, &, | which required extra braces for the operands, 
until we removed that requirement in PSL v1.1.  So instead of requiring 
braces around a Boolean that has an explicit clock expression and appears 
within a SERE, could we not allow clocked Booleans as SERE elements, and 
implicitly treat them as clocked SEREs containing the single Boolean?  
[EM 2 Dec 2004]
52. Appendix B fuzzy makes it difficult to distinguish symbols:

Appendix B defines three very similar symbols, which are approximately 
||= for Boolean satisfaction, |= for Property satisfaction, and |== for 
SERE satisfaction (where the '==' part is really three horizontal lines 
in a column).  Unfortunately the process of generating PDF from LaTeX, 
and then cutting and pasting the PDF into the Frame document, has resulted 
in all of Appendix B being slightly blurred, and as a result these three 
symbols are very difficult to distinguish in some places.  Either a better 
process (one that will produce a less blurred result) or different symbols 
are needed.  [EM 2 Dec 2004]
53. Clarification of formal semantics terms

Appendix B defines these terms:
 
    An empty word v = €epsilon has length 0, 
    a finite word v = (€ell_0€ell_1€ell_2...€ell_n) has length n+1,
    and an infinite word has length €infty.
 
This seems to imply that 'finite word' is defined to mean one that has 
length greater than 0, both by contrast to the other two cases, and 
because the definition of the length of a finite word (n+1) would seem 
to require n to be negative for it to include the empty word.  This 
should be revised to make it clear that an empty word is also a finite
word.  [EM/DF 8 Dec 2004]

54. Need for explicit identification of overriding definitions

In 7.2.3, pp. 93-94 (Verification unit scoping rules), it is stated

"If a verification unit that is bound to a given HDL instance contains a
  modeling layer declaration, then that verification unit's declaration
  takes precedence over any other declaration of the same name, either in
  a verification unit bound to the same HDL instance in its inherited
  context, or in the HDL instance itself. This allows a verification unit
  to redeclare and/or give new behavior to a signal in the design under
  verification."

I propose that for this replacement semantics to be used, the declaration 
have to include a keyword like "replace" or "override". The problem with 
the current semantics is that the user has to know the names of the 
internal signals in the design to make sure that he does not declare a 
signal with the same name which then overrides the design behavior. In 
case a declaration is not using the keyword, it is simply added as a new 
declaration independent of the declarations of the design, that can only 
be used in the verification unit.  [JA 9 Dec 2004]
55. Errors in heading numbers in appendix B.

Following are the headings in appendix B:
B.1 Typed-text representation of symbols
B.2 Syntax
B.3 Semantics
B.3.1 Semantics of FL formulas
B.3.1.1 Unclocked Semantics
B.3.1.1.1 Semantics of unclocked SEREs
B.3.1.1.2 Semantics of unclocked FL
B.3.1.2 Clocked Semantics
B.3.1.2.1 Semantics of clocked SEREs
B.3.2.2 Semantics of clocked FL          <-- should be 3.1.2.2
B.2.2 Semantics of OBE formulas          <-- should be 3.2
B.4 Syntactic Sugaring
B.3.1 Additional SERE operators          <-- should be 4.1
B.3.2 Additional FL operators            <-- should be 4.2
B.3.4 Forall                             <-- should be 4.3
B.5 Rewriting rules for clocks

[EM 15 Dec 2004]
56. Definition of vunit binding

There is a contradiction between two parts of the LRM.  Page 91, lines 
42-43 reads "If the verification unit is explicitly bound to a module, 
then this is equivalent to duplicating the contents of the verification 
unit and binding each duplication to one instance.  Contrast this with 
page 92, where the "second example" is said to be equivalent to a _pair_ 
of vunits. 

See (here)  for more details.
[JA 21-Dec-04]
57. Typo in 6.2.1.2.1 

In PSL v1.1, section 6.2.1.6.1, on page 69, under informal semantics, 
second bullet, item 2, "immeditately" should be "immediately".
[EM 4-Jan-05]
58. Is 'failure' associated with a property or a directive?

In Section 4.4.5, Finite-length versus infinite-length behavior, some of 
the terminology used to talk about whether (and to what extent) a property 
holds seems to imply that a property is obligated to hold, independent of 
whether it is asserted. In particular, we use the terms "bad states", 
"future obligations", and "fails" in that section. This has apparently led 
some users to conclude that it is inappropriate to talk about an assertion 
"failing"; that only a property can "fail".  I believe we agreed long ago 
that a property by itself has no obligation to hold. Only when a property 
is asserted is there any obligation created for the property to hold. So 
one could argue that Section 4.4.5 should use neutral terms rather than 
the apparently biased terms "bad", "fail", etc.  

See (here)  for more details.
[EM 6-Jan-05]
59. Need for a 'cover all paths' extension

A request was made on the Verification Guild forum for PSL to extend the 
'cover' directive to have semantics something like "cover all the specific 
sequences that satisfy this sequence".  

See (here) for more details.
[EM 6-Jan-05]

60. Grammar Error in Appendix A
There is an error in the grammar: in Appendix A, 

Flavor Macro HDL_EXPR = 
    SystemVerilog: /SystemVerilog/_Expression 
  / Verilog: /Verilog/_Expression 
  / VHDL: Extended_VHDL_Expression 
  / GDL: /GDL/_Expression 

contains a reference to Extended_VHDL_Expression, yet we no longer 
define this nonterminal. 

Correction: change Extended_VHDL_Expression to /VHDL/_Expression 
(where /VHDL/ means 'VHDL' in italics). 

Note that the flavor macro is correct in the body of the LRM; no 
change is needed there.
[EM 9-Jan-05]
61. Syntax of prev()
A user suggested the following new syntax for the prev:

built-in function 
      prev[Number](Any_Type) 

that will replace the current syntax 
      prev(Any_Type [ , Number]). 

I think that it makes sense because numbers and ranges are usually enclosed 
in square brackets and the number parameter of prev is the only exception. 
Moreover, the prev function and the next operator are quite the same in the 
eyes of the user. The new syntax suggests similar syntax for both.
[SR 20-Dec-04]

62. Appendix B Typo in IEEE-1850 Release LRM
I was just using my handy complimentary copy of ieee 1850 and noticed a
typo in appendix b: 

on page 130, top of the page, there is a note that should begin "We
define".  however, it reads "efine" - the first word and the first letter
of the second word are missing.
[CE 06-Nov-05]
63. Hierarchical Signal Access
A major limitation of the VHDL flavor of PSL today is the inability to
access HDL signals that are not defined in the scope to which a
verification unit binds. In many cases you will want a property to
refer to signals at multiple different levels of hierarchy within a
design and in order to do this today you have to rely on tool specific
features that allow such accesses. Usage of such tool specific
features makes the PSL unportable, and therefore greatly reduces the
value of PSL being a standardized language in the cases where such
cross hierarchical references are needed. I provide two suggestions of
how this could be implemented support for such accesses in PSL.
[JM 25-Nov-05]
64. Signal references qualified by inherited vunit name
If v1 is a verification unit that binds to an entity e1 and v2 is a
verification unit that binds to an entity e2, and v1 inherits v2, then
any signal that is accessible by v2 is accessible by v1 through a
construct <v2>::<sig> if there is only one 
instance of v2 in the design tree.

Pros: Infrastructure for inheritance already exists in PSL and could be
      leveraged by this functionality.
Cons: Verification units would have to be created specifically to access
      signals in blocks that would not normally have any verification units
      bound to them.

[JM 25-Nov-05]
65. Hierarchical signal access - aliasing of names
Add to the modeling layer a declaration that would be used to declare a
new signal that connects to a signal in the hierarchy like this:


connect <new sig> to <instance>::<sig>;

Pros: Allows accesses to any level of design hierarchy.
Cons: Requires a new declaration for each signal being accessed. If there are
      a lot of these signals then this can become cumbersome.

[JM 25-Nov-05]
66. The action block
Add an action block a la SVA. For simplicity, the action block can modify
the value of any variable in the design.
The user can then expand on the action to be taken based on this assignment.
From a language viewpoint, VHDL offers the biggest challenge because of the
driver implications. However VHDL users can use the 'active of 'transaction
attributes to know when a new assignment (different or same ) was made onto
a signal.

The action block may also include the display of variables local to the
assertion, or variables of the design.
[BC 14-Nov-05]
67. Local variables
Add local variable to sequences and assertions.
Local variables adds great flexibility in coding style of assertions.
[BC 14-Nov-05]
68. HDL Generate
Allow the HDL "generate" statement to embrace an assertion.  
Ben 
[BC 15-Nov-05]
69. Add a first_match function
The following link demonstrates a user requirement for an assertion.  
The solution involved the use of a local variable and a first_match function.  
http://verificationguild.com/modules.php?name=Forums&file=viewtopic&p=4060#4060

Below is the SVA solution, but with PSL supporting local variables 
and first_match, a very similar solution can be implemented. 

logic scl_enb, SCL; 
`define true 1 
property p_SclSda; 
  int v_count; 
  @ (posedge clk2 && scl_enb && SCL) 
    (check && SDA==1'b1, v_count=1) |=> 
      first_match((`true, v_count+=1)[*0:$] ##1 (v_count==9)) |-> SDA==1'b1; 
endproperty : p_SclSda 
  assert property (p_SclSda) else 
   $display("%t SDA error on 9th SCL, sampled SDA %b", $time,  $sampled(SDA)); 

endmodule : test 
 	
The first_match is needed in the consequent of the the first implication 
because that consequent IS the antecedent of the second property. 
Thus, in "antecedent |=> consequent1 |-> consequent2" 
the consequent1 is the antecedent of consequent2. 
If antecedent succeeds and consequent1 fails, the property succeeds 
vacuously, and keeps on trying (with the [*0:$]). Thus the property 
as a whole cannot fail. The first_match fixes all of that. 

See (here) for more details.

[BC 15-Nov-05]
70. LRM Font Problem

IEEE 1850 PSL LRM, clause 5.2.2, Informal Semantics, par. 2, first line:
    expression "a  -> b" is in normal font; should be in "code" font.

[EM 06-Mar-06]
71. LRM Index
All the built-in functions are missing from the index.

[SR 22-Feb-06]
72. LRM Missing Keywords in Table 1

In the IEEE 1850 PSL LRM, the grammar contains the production

    PSL_Type_Class ::= 'boolean' | 'bit' | 'bitvector' | 'numeric' | 'string'
(see Syntax 6-77, p94)

However, in Table 1, Keywords, in clause 4.2.2, Keywords, only 'boolean' is listed.  
The other four type class names should be listed in the table also.

[EM 20-Feb-06]
73. Editorial issue with the within operator

In the IEEE 1850 PSL LRM, the 'within' operator is referred to 
as the "sequence within" operator in clause 4.2.3.2, in Table 2 on 
page 18, and also in clause 4.2.3.2.4 on page 19.  However, this 
operator is referred to as "SERE within" in clause 6.1.1.2.4 on 
page 54.

[EM 17-Feb-06]
74. Syntax of "within"

In clause 6.1.1.2, the syntax box requires the left operand of 
the 'within' operator to be a Compound_SERE.  This is consistent 
with the requirement for a Compound_SERE left operand for the 
operators &&, &, and |.  However, unlike those operators, which 
would be ambiguous if the left operand were a simple Boolean 
(because those operators are also Verilog logical operators), 
'within' would not be ambiguous if its left operand were a Boolean.  
Furthermore it would make some semantic sense to be able to talk 
about a Boolean event occuring 'within' a Sequence, e.g.,

    Reset within [*5]

without having to turn the left operand into a Braced_SERE in order 
to make it a Compound_SERE:

    {Reset} within [*5]

So perhaps we should consider relaxing the syntax to allow the left 
operand of 'within' to be any SERE, and not restricted to a 
Compound_SERE.

[EM 17-Feb-06]
75. vunit scoping rules

i know that we have an open issue about vunit scoping rules.  can this url
be added to the issue text:

See details here

?  just so that we make sure we have addressed the point.

[CE 16-FEB-06]
76. Issues related to overriding assignments in vunits

There are several related questions that seem to need clarification in the PSL LRM, 
all having to do with the notion of an assignment in a vunit 'overriding' assignments 
in the design.  I would like to see these all resolved in the next version of IEEE 1850 PSL.

Clause 7.2.3 says the following:

"If a design signal name is redeclared in a verification unit bound to a given module 
or instance, and that name is assigned a value in that verification unit, then the 
declaration in the verification unit overrides the declaration in the design module or 
instance and in any inherited verification units bound to the same design module or 
instance, and the assignment to that name in the verification unit overrides all 
assignments to the signal with that name in the design and in any inherited verification 
units bound to the same design module or instance."

Other than an occurrence of an overriding assignment in an example later in the same 
clause, there appears to be no other reference to overriding assignments in the LRM.

Questions:

1. If an assignment in a vunit assigns to a design signal that is NOT redeclared in the 
vunit, what is the effect?  Is this illegal?  If legal, does the assignment override 
assignments in the design?  Or does it simply add another assignment to the same 
signal (in which case HDL assignment resolution rules apply)?

2. Are there any restrictions on what values or expressions an overriding assignment 
can assign to a design signal?  The working group has primarily talked about assigning 
nondeterministic values to design signals, when we have talked about this at all.  Is the 
intent to allow only such assignments?  Or is it legal to assign to a design signal the 
value of an arbitrary expression, including expressions that are functions of other 
design signals, thus changing the functionality of the design rather than merely 
abstracting it?

3. One can also use an assume directive to constrain the values of a design signal.  Is 
there any difference between using an assume directive (e.g., "assume S==nondet(...)") 
and using an overriding assignment?  If so, what is the difference?  If not, why do we 
need both?

4. If two vunits (for example, A and B, where A inherits B) both contain overriding 
assignments to the same design signal, what is the result?  Does one assignment 
override the other?  Or do they both apply (and then HDL multiple-driver resolution 
semantics come into play)?

5. Same question as (4), except that A and B are both bound to the same design module 
or instance, but neither inherits the other?  Or is it intended (though the LRM does not 
say this) that at most one vunit can be bound to a given design module or instance?  

6. Same question as (5), except that vunit A and vunit B are bound to different modules, 
but contain assignments to the same signal (e.g., using OOMRs) or to the same net (e.g., 
if A assigns to design signal Sa, and B assigns to design port Sb, and in the design Sa is 
associated with Sb)?  Or is there an implicit assumption that at most one vunit is bound 
to any part of the design?  [I doubt it.]

7. What is the meaning of an overriding assignment (if any) in a simulation context?  

A related question is this:

8. The Simple Subset is that subset of PSL temporal layer constructs that can be applied 
easily in both formal verification and simulation.  It does this by excluding temporal 
constructs that (in the general case) are difficult to implement efficiently in simulation.  
Should the Simple Subset be extended to exclude constructs in other layers that are not 
applicable to both formal verification and simulation?  If so, and if overriding 
assignments only have meaning in formal verification, should they be excluded from 
the Simple Subset? 

Finally, there is a concern that the user might accidentally override a design signal when 
he actually intended to declare and use an auxiliary signal in the vunit, and the auxiliary 
signal just happens to end up with the same name as a signal in the design.  Is there 
something we can do to avoid this problem?

Also see:  
http://www.eda-stds.org/ieee-1850/ieee-1850-issues/hm/0102.html 

[EM 10-Feb-06]
77. Issues with PSL flavors

Following is an issue raised by a PSL user regarding the definition of flavors within PSL:

Clause 4.3.2 HDL dependencies, says

  "PSL is defined in several flavors, each of which corresponds to a particular 
hardware description language with which PSL can be used. Flavor macros reflect the 
flavors of PSL in the syntax definition. A flavor macro is similar to a grammar 
production, in that it defines alternative replacements for a nonterminal in the 
grammar. A flavor macro is different from a grammar production, in that the 
alternatives are labeled with an HDL name and, in the context of a given HDL, 
only the alternative labeled with that HDL name can be selected."

The phrase "in the context of a given HDL" is not defined here or anywhere else 
in the PSL LRM.  Originally, this phrase referred to the HDL used in the design 
module (or instance) to which a given vunit is bound.  Given the new text in 
clause 7.2.3, which allows the flavor of a vunit to be different from the HDL 
of the corresponding design module, it seems no longer possible to assume that 
"the context of a given HDL" is implicit in the association of a vunit with a 
given design module.  Instead, it would appear to be necessary to determine the 
HDL context from the vunit itself.  If so, the LRM needs to specify more clearly 
how this should be done.  We might even need to add syntax to make it clear what 
HDL context is to be assumed.  

The LRM should also specify more clearly the scope of a flavor - i.e., does it 
apply to an entire file, or to a verification unit within a file, or to a region 
within a verification unit, etc.  If the flavor determination remains implicit, 
this will need to be clarified.  If we add syntax to explicitly specify a flavor, 
we will need to consider this scope issue in deciding what syntax to add.

There is also a question whether all PSL vunits must be of one flavor or another, 
or whether it is possible to have a 'neutral' flavor vunit that only contains 
declarations to be inherited into other PSL vunits.  Since flavors primarily 
affect the Boolean and Modeling layers, a vunit that consists only of Temporal 
layer items (e.g., property and sequence declarations) in which all Booleans are 
parameters of PSL declarations would not need to be of any particular flavor.

See (here) for more details.

[EM 06-Feb-06]
78. Ambiguity w.r.t. a->b in SystemC flavor

An ambiguity exists in the current IEEE 1850 LRM, regarding interpretation of 
the -> operator in the SystemC flavor.  In particular, the expression a->b 
could be interpreted as involving either the PSL implication operator or the 
C/C++/SystemC pointer dereference operator.  

This problem was noted when the working group discussed adding a SystemC flavor, 
and a resolution was proposed (but apparently did not make it into the LRM).  
In the last draft for Group O: SystemC Flavor 
(see http://www.eda-stds.org/ieee-1850/ieee-1850-extensions/hm/0165.html), 
the following appeared:

6.2.1.7.1 [which became 6.2.1.7.2] Logical implication 
  - under Restrictions, add a new paragraph that reads: 
    "In the SystemC flavor, if the operator '->' appears in an expression 
and its left operand is the name of a pointer to an object that has a 
member whose name is the right operand, then the '->' operator is
interpreted as the SystemC member operator, not as the logical implication 
operator." 
 
However, this restriction did not make it into the LRM, so it needs to 
be added in the next revision.

Note that the ambiguity also exists with the PSL operator -> in 
clause 5.2.2, but this was not mentioned in the proposal for a SystemC 
flavor.  A similar statement to the above needs to be made in clause 5.2.2.

Note that, as always with HDL operators overloaded for use in PSL, there 
is an issue of operator precedence, since all HDL operators have higher 
precedence than all PSL operators.

See (here) for more details.

[EM 02-Feb-06]
79. VHDL Hierarchical Reference

many people seem to think that because vhdl does not allow hierarchical
references, they are not allowed in the vhdl flavor of psl.  this was never
the intention, and i would like to clarify in the lrm that this is not the
case.  doing so may involve editing the grammar, since a boolean expression
is based on an hdl expression, and perhaps the grammar of vhdl is such that
hierarchical references are prohibited synactically rather than
semantically.

See (here) for more details.

[CE 01-Feb-06]

When we consider this, we should be careful about the way we treat the path
separators used for hierarchical references. In the current syntax, either
"." or "/" is allowed in any flavor. That's OK as long as hierarchical
references only appear in the names of modules or instances used for vunit
binding. However, if we allow this in boolean expressions, then we have to
prevent ambiguity between "/" as a path separator and "/" as a division
operator.

[AO 18-May-06]
80. Keyword Table Ommision

In the IEEE 1850-2005 PSL LRM, table 1, Keywords, the keyword 'for' 
(used in "paramterized SEREs" and "parameterized properties") is not 
listed.  This needs to be corrected in the next version.

Also, in table 2, Operator Precedence, neither 'for' nor 'forall' is 
listed.  It could be argued that neither is really an operator, so the 
question of precedence is not an issue, but if that is the position we 
want to take, the LRM should contain a note to that effect.

[EM 14-Dec-06]
81. Should keywords be case sensitive in VHDL?

VHDL users are used to having the flexibility of case-sensitive
identifiers (same name different meaning depending on case).

According to IEEE Std 1850-2005, section 4.2.2, keywords are 
reserved "identifiers" in PSL. And according section 4.2.1, 
"identifiers" are case-insensitive in VHDL flavor.

[AS 06-Feb-06]
82. Generate statement for directrives

Allow verification directives in generate statements (Verilog and 
VHDL). Allow the use of verification directives inside HDL generate blocks 
inside vunits. Revise the HDL_STMT of the vunit_item to include verification 
directives in the appropriate locations in the HDL grammar (generate items).  This 
proposed update to the native HDL grammar is similar to the how built-in 
functions are included in the HDL expressions of the modeling layer code. Use of 
generated directives is very important for creation of library components. This 
request duplicates Ben Cohen's request. 
 
[AS 29-Nov-05]
83. Semantic clarification for restrict

Clarification: Semantics of restrict. Restrict is a form of constraint. What is the 
exact semantics? Should add semantics and clarify the explanation. In the 
example in the LRM, restrict {!rst;rst[*3];!rst[*]}, is rst required to hold low after 
the fourth cycle? There sequence specifies that there can be zero or more cycles 
of !rst. The text specifies that rst is ?low forever afterwords?.  
 
[AS 29-Nov-05]
84. VHDL binding clarification

Clarification: VHDL binding clarification. In the HDL_Module_NAME of a 
binding, in VHDL, can the design unit that the vunit is bound to include a lib 
name? e.g. LIB.e(A). If so, is some prior library clause required? May need more 
clarification on the composition of HDL_Module_NAME for VHDL.  
 
[AS 29-Nov-05]
85. VHDL use clause and vunit

Enhancement: VHDL: Allow use clause outside and just before a vunit. A use 
clause is allowed before a design unit in HDL_UNIT, but strictly it should only 
apply to the next VHDL design unit, and not extend to any next design unit or 
vunit. Can a library clause and/or use clause be placed just before a vunit? It 
should, but the formal syntax does not allow it. 
 
[AS 29-Nov-05]
86. VHDL define and entity_aspect

Clarification: In section A.3 on page 117, the VHDL non-terminal is entity_aspect 
is listed but no longer is elsewhere in the LRM. Also entity_aspect is not in the 
VHDL grammar. 
 
[AS 29-Nov-05]
87. LRM editing error (remove "/")

Clarification: In section 4.2.4.1 %for, the use of slashes as in /var/ in the syntax is 
confusing to users because it is not clear if the slashes are part of the syntax or not. 
In the same section, the examples are of GDL, which is not described in detail and 
has been confusing to users.
 
[AS 29-Nov-05]
88. Clock context inheritence:

There is a small problem with the definition of clock context inheritance:

In IEEE 1850 PSL, we replaced endpoint declarations with the ended() built-in function.  
We also clarified the rules for clock context inheritance.  
However, we failed to address the new ended() function in the new clock context inheritance rules.

The LRM says the following regarding the clock context of a sequence:

  For a property or sequence, the clock context is
  - specified by the @ operator, if present; otherwise
  - inherited from the immediately enclosing property or sequence, if any; otherwise
  - inherited from the property or sequence in which it is instantiated, if any; otherwise
  - (for a top-level property or sequence) specified by the applicable default clock declaration, if any;
            otherwise
  - True.

This needs to be extended to include the case in which a sequence appears within an immediately
 enclosing built-in function call (specifically, within a call to ended()).  
The extended rules should be as follows:

  For a property or sequence, the clock context is
  - specified by the @ operator, if present; otherwise
  - inherited from the immediately enclosing property, sequence, or built-in function call, if any; otherwise
  - inherited from the property, sequence, or built-in function call in which it is instantiated, if any; otherwise
  - (for a top-level property or sequence) specified by the applicable default clock declaration, if any;
            otherwise
  - True.

See (here) for more details.

[EM 25-Oct-05]
89. Covergroup construct:
    Add a SystemVerilog style covergroup. The covergroup construct offers 
    an alternative way to specify functional coverage to the SVA cover 
    directive.

See (here) for more details.

[JM 25-Nov-05]
90. Clarify informal semantics for assume guarantee directive:

The assume_guarantee directive is described somewhat
vaguely in the PSL (1850) LRM:

# The Assume Guarantee Directive, [..] instructs the verification tool
# to perform two different but related tasks: one is to perform a
# verification constrained with the property in question (as described
# in 7.1.2) the other one isto verify independently that the property
# holds.

This should be interpreted to mean that the property should be used as
an assume in one verification task and as an assert in another.

It is not specified however with respect to what modules the two
different task should be performed. This was deliberately left open
partly because there was no time to specify this exactly, so the exact
interpretation of this is left to the respective tools. You could well
argue that this is unfortunate because it prevents portability across
different tools. I think this should be specified further and maybe we
would also need some enhanced syntax to somehow specify the two
environments that are presupposed.

See (here) for more details.

[JM 25-Nov-05]

91. Global reset:

Add a global reset concept in order to simplify properties.
What is intended here is to add something like a
 
   default abort = rst; 

declaration to mirror the 'default clock = clk' declaration. The
semantics would presumably be to add an 'abort rst' on the top level of
any formula in a directive where this makes sense. (A cover directive
might be a place where it doesn't make sense for instance.)

See (here) for more details.

[JM 25-Nov-05]
92. Multiple levels of inheritance:

In section 5.2.1, the rules for determining the meaning of a name can
be interpreted as allowing only 4 levels of inheritance.
This should be clarified, to unambiguously describe a model with multiple
levels of inheritance.

[AO 29-Nov-05]
93. "original" built-in function:

Since the modeling layer may override the behavior of a signal, there
is a need for the built-in function "original()": original(S) gives the
original behavior of signal S.

[AO 29-Nov-05]
94. formal semantics for directives:

Need to define formal semantics for all verification directives.

[AO 29-Nov-05]
95. Levels of satisfiability:

Need to informally clarify the 4 levels of satisfiability

[AO 29-Nov-05]
96. Clock context definition for built-in functions:

Consider the following property:
      assert always ( a -> rose(b, rose(c)));
According to the current definition, the inner rose is the explicit clock
context for the outer rose.
But the inner rose has no explicit clock, so by the LRM definition, it's
clock context is defined by the enclosing built-in function -- which is the
outer rose. It should be specified that this rule does not apply 
for a built-in function clock context.

[AO 29-Nov-05]
97. "const numeric" parameters -- improving the examples

In Section 6.3.2.1. Sequence declaration, the following example appears:

"sequence BusArb (boolean br, bg; const n) =
{ br; (br && !bg)[*0:n]; br && bg };"

This example uses "const n", which is actually shorthand for "const numeric
n".
Although this is legal, I think it would be better style to write "const
numeric n" in the example.
It seems to me that the "const n" shorthand is old-fashioned LRM 1.1 style,
which we have maintained for backward compatibility,
but we should encourage the use of the newer style (which currently is not
demonstrated in the LRM -- there are no examples with the keyword
"numeric").

The same suggestion holds for the two examples in Section 6.3.2.2 Property
declaration.

[AO 16-Apr-06]
98. Problems with restrictions on parameterized SEREs/properties and replicated properties

1. IEEE 1850-2005, clause 6.1.1.2.5, Parameterized SERE, under /Restrictions/, 2nd par., 4th bullet says

    "The parameter name shall be used in one or more expressions in the Property, or as an actual
parameter in the instantiation of a parameterized SERE, so that each of the instances of the SERE
corresponds to a unique value of the parameter name."

This section is only about Parameterized SEREs, so the reference to Property here should be to SERE instead.  Also, the reference to "the instantiation of a parameterized SERE" is clearly not intended to refer to the subject of this clause, but rather to a Sequence_Instance, since the latter has actual parameters, while the subject of this clause does not.  So the clause should probably read as follows:

    "The parameter name shall be used in one or more expressions in the SERE, or as an actual
parameter in a Sequence Instance, so that each instance of the parameterized SERE corresponds to 
a unique value of the parameter name."

Now one could argue that if the SERE in the parameterized SERE is a Sequence Instance, and the parameter name appears as an actual in that Sequence Instance, then it also appears in the SERE, so this paragraph need not mention a Sequence Instance explicitly.  So the bullet could be shortened to 

    "The parameter name shall be used in one or more expressions in the SERE, so that each instance 
of the parameterized SERE corresponds to a unique value of the parameter name."

At the same time, it is not clear what this restriction is really trying to accomplish.  If the point is to ensure that each instance of the parameterized SERE is different from every other instance of the parameterized SERE, we first need a definition for (in)equivalence of SEREs.  I assume that two SEREs would be considered equivalent if they both hold tightly on the same traces, but I doubt if implementation of such a definition would be feasible.  If the intent is simpler--namely, that each SERE instance is syntactically different from every other SERE instance--then something more needs to be said about Sequence Instances than simply that the parameter name appears as an actual parameter, since there is no requirement that the definition of a sequence make use of every formal parameter, nor is it guaranteed that formals (representing actuals) would be used in such a way to generate unique sequence instances.  We might also consider deleting this bullet entirely because it is unenforceable.


2. Similarly, in clause 6.2.1.7.1, Parameterized property, under /Restrictions/, the same bullet text as above appears.  In this case, the references to SEREs are inappropriate and should be deleted or changed.  With the same reasoning as above, the bullet could be reduced to 

    "The parameter name shall be used in one or more expressions in the Property, so that each instance 
of the Property corresponds to a unique value of the parameter name."

or else deleted entirely because it is unenforceable.


3. In both cases, the original text comes from clause 6.2.3, Replicated properties, under /Restrictions/, par. 5, which says

    "The parameter name shall be used in one or more expressions in the Property, or as an actual parameter in
the instantiation of a parameterized Property, so that each of the replicated instances of the Property corresponds
to a unique value of the parameter name."

Here again, the reference to "parameterized Property" was not intended to refer to the topic of this clause, but rather to a "property instantiation" (clause 6.3.3.2) which can have actual parameters.  In this case, we don't have a nonterminal to refer to, so the (corrected) paragraph should probably refer to clause 6.3.3.2 explicitly, if the working group feels it is necessary to keep the reference at all.  But as above, one could argue that the reference is unnecessary, and that the paragraph could be reduced to

    "The parameter name shall be used in one or more expressions in the Property, so that each 
replicated instance of the Property corresponds to a unique value of the parameter name."

or else deleted entirely because it is unenforceable.

[EM 17-Apr-06]
99. Simple subset rule for until*

In IEEE 1850 PSL, the Simple Subset requires that the left operand of an overlapping until* 
operator be Boolean (in addition to the requirement that the right operand of any until* 
operator be Boolean).  This restriction on the LHS operand of overlapping until* is both 
theoretically and practically unnecessary.  We should consider replacing the two rules

- The right-hand side operand of a non-overlapping until* operator is a Boolean.
- Both operands of an overlapping until* operator are Boolean.

with the single, simpler rule 

- The right-hand side operand of an until* operator is a Boolean.

[EM 19-Apr-06]
100. Uniqueness of names in HDL expressions (lookup algorithm inconsistency)
  
   In the IEEE 1850 PSL, clause 5.2.1 HDL expressions, p37,  it says

    For each name and operator symbol in the HDL expression, the meaning 
   of the name or operator symbol is determined as follows:

        [steps a through f]

    It is an error if more than one declaration of a given name appears in the 
    current verification unit [in step a)], or in the transitive closure of all 
    inherited verification units [in step b)], or in the default verification mode
    [in step c)], or if the name is ambiguous at the end of the associated design 
    module or instance [in step d)].

It would appear that the paragraph following the list is out-of-date w.r.t. 
the list, since it only mentions 4 items instead of 6.  It would appear that the 
paragraph should be amended to read as follows:

    It is an error if more than one declaration of a given name appears in the 
    current verification unit [in steps a or b)], or in the transitive closure of all 
    inherited verification units [in step c)], or in the default verification mode
    [in step d)], or if the name is ambiguous at the end of the associated design 
    module or instance [in step e)].

[EM 1-May-06]
101. Name space of labels

    In the IEEE 1850 PSL, clause 7.1 Verification directives, p101,  it says

    A verification directive may be preceded by a label. If a label is present, it 
    must not be the same as any other label in the same verification unit.

    Labels enable construction of a unique name for any instance of that 
    directive. Such unique names can be used by a tool for selective control 
    and reporting of results.

The intent seems to be that labels are uniquely defined.  However, the LRM
does not say anywhere whether a label can be the same as the name of a
PSL declaration.  Note that in clause 6.3 Property and sequence declarations,
p94, the LRM says

    The name of the declaration shall not be same as any other declaration in 
    the same verification unit.

So property and sequence names are similarly defined to be unique w.r.t. 
each other - but labels are not mentioned here.

In the absence of any further restrictions, this appears to create two distinct
name spaces: that of labels, and that of all other declarations.  This can be 
confusing to users, especially given that labels in HDLs do not occupy a 
separate namespace.  The above statements ought to be generalized to
ensure that every name defined in a PSL verification unit should be unique,
whether the name is a label or a declaration name.

[EM 1-May-06]
102. Type Classes in a VHDL context create ambiguity for overload resolution.

VHDL allows a given operator symbol or function name to be declared multiple 
times--with different meanings--provided that in each case the declaration has a 
unique "parameter and result type profile", i.e., that the paramater and result 
types of each declaration are distinguishable.  This means that in an expression, 
the meaning of an operator such as '=' must be determined by examining the 
types of the operands and the type of result required by the context.  

But in a VHDL-flavor PSL assertion, a Boolean expression can be of any of several 
types, such as Bit, Boolean, or std_ulogic, each of which is compatible with PSL 
type class "Boolean".  As a result, if the user has overloaded an operator such as '=' 
so that one version returns a bit, while another version (the implicitly declared 
one) returns a Boolean, then in a PSL context (which allows either a Bit or a Boolean 
type expression to appear), an expression such as (a=b) becomes ambiguous.  

This could be avoided by specifying a rule for disambiguating such a situation.  
The rule could be based on type (e.g., look for a Boolean expression first, 
otherwise a Bit expression, otherwise a std_logic expression), or it could be based 
on characteristics of operator declarations (e.g., if there is a conflict between a 
user-defined operator and an implicitly declared operator, ignore the implicitly 
declared operator).

[EM 3-May-06]
103. PSL does not define precisely the scope of a declaration.

In the following example:

    property a (boolean a,b) = {a} |-> {b};

the name 'a' is used both as the name of the property and as the name of a formal 
parameter of the property.  Where does 'a' mean the property, and where does it 
mean the parameter?  The current rules for name resolution in PSL do not answer 
this question, nor do they even say whether this is legal or illegal.  

In VHDL, this is legal and is clearly defined: in general, the scope of a name starts 
at [the end of] its declaration, and extends to the end of the innermost enclosing scope, 
except where it is hidden.  If we were to apply this to the PSL above, the scope of 'a' 
meaning the formal parameter would begin at [the end of] the declaration of the 
formal parameter, and extend to the end of the property declaration, so that clearly 
the 'a'  in '{a}' would refer to the formal parameter, not to the property.  Similarly, 
the scope of 'a' meaning the property would begin at [the end of] the property 
declaration and extend to the end of the innermost enclosing context, e.g., the 
enclosing vunit - and it would be hidden within the body of the property by the 
declaration of the formal parameter 'a'.

The PSL LRM explains in detail how names in an HDL expression are interpreted 
(clause 5.2.1).  However, it does not appear to explain how a reference to a name 
declared in PSL is interpreted.  In particular, there is no path from nonterminal
HDL_or_PSL_Expression to /Formal_Parameter/_Name.  The discussion of the 
lookup process (in the transitive closure of the inherited verification units, etc.) 
does not clearly distinguish between HDL-declared names and PSL-declared names, 
but it clearly does not consider nested declarations such as declarations of formal 
parameters, which have a given meaning only within the scope of an enclosing 
property or sequence declaration.

[EM 3-May-06]
104. syntax glitch in nondet, nondet_vector

In the IEEE 1850-2005 PSL LRM, a reference to a nonterminal "Value_List" appears in
 - the syntax production for built-in function 'nondet' (5.2.3, syntax 5-20, p38)
 - the syntax production for built-in function 'nondet_vector' (5.2.3, syntax 5-20, p38)
 - the syntax production for built-in function 'nondet' (A.4.8, p127)
 - the syntax production for built-in function 'nondet_vector' (A.4.8, p127)

However, the description of these functions refers to "Value Set", and the syntax used 
in the examples is consistent with the syntax for production "Value_Set" (defined in 
6.2.3, syntax 6-76, p91).

It appears that the syntax for nondet() and nondet_vector() should be updated to refer 
to Value_Set instead of Value_List.  There are also several occurrences of "value set" in 
the description that should be capitalized, to make it clear that this refers to the text 
object represented by the nonterminal Value_Set.  Finally, we should consider moving 
the definition of Value_Set backward, from page 91, to where it is first referenced, on 
page 38.

[EM 5-May-06]
105. Deprecate assume_guarantee, restrict_guarantee.  

These directives are provided 
as explicit representations of the assume_guarantee paradigm.  However, in practice, 
nearly all assumptions (or restrictions) will eventually need to be checked in a larger
 context.  This suggests that almost all assumptions (or restrictions) should be expressed 
with assume_guarantee (or restrict_guarantee).  This is inconvenient, in part because 
these keywords are so long, compared to the much shorter, more readable, and more 
obvious 'assume' and 'restrict'.  Also, although the LRM says that the *_guarantee 
directives involve "verify[ing] independently" that an assumed property or restricted 
sequence holds, it does not address how a given tool should know, in a given run, 
whether to treat such a directive as an assumption/restriction or to verify that the 
assumption/restriction holds.  And in any case, not using the *_guarantee directives 
does not indicate that there is never going to be a need to verify that an assumed 
property or restricted sequence holds.  It would be better to simplify the language by 
removing these keywords.  The assume/guarantee paradigm could still be represented 
explicitly via verification units (e.g., a vunit A defining sequences/properties, vmodes 
B1..Bn inheriting A and assuming/restricting various properties/sequences, and vprops 
C1..Cm inheriting A and asserting various properties/sequences [but see issue 107]).  

[EM 17-May-06]
106. Allow a report clause on assume, restrict.  

It is likely that any assumption or restriction 
will eventually need to be verified.  It would be convenient to allow such assumptions or 
restrictions to include a 'report' clause, both to serve as a user-defined comment explaining 
the assumption/restriction, and to provide a text string to be reported when the assumption 
or restriction is later verified. 

[EM 17-May-06]
107. Verifying that a restrict directive holds.  

It is not clear how one verifies that a restrict 
directive holds.  For a directive "restrict S;", the assertion "assert S;" is insufficient, as is 
"assert S!;", since the first is weak and therefore might not hold tightly at all over the whole 
trace, whereas the second is strong but might hold tightly only on a prefix of the whole trace.  
Can we define this as "assert {S : EOT}", where EOT = end of trace?  If so, can we enable the 
user to write this explicitly?  Is there a better way (without EOT) to express this?

[EM 17-May-06]
108. Verification of (Strong) Fairness directives.  

These directives are special forms of assumption.  Unlike the general forms, 
these don't have corresponding "*_guarantee" directives--which is another argument for 
deprecating the "*_guarantee" directives.  At 
the same time, it should be clear how (strong) fairness assumptions are to be verified.  
Since a fairness directive "fairness P;" is equivalent to "assume always eventually P", it 
would appear that verifying a fairness directive amounts to verifying the assertion 
"assert always eventually P".  Similarly, it would appear that verifying a strong fairness 
directive "strong fairness P, Q;" would amount to verifying the assertion 
"assert (always eventually P) -> (always eventually Q)".  The LRM should mention this, 
perhaps in a note.

[EM 17-May-06]
109. Strong Fairness directives should be outside the Simple Subset.  

The Simple Subset 
requires that the LHS of an implication be a Boolean.  This implies that strong fairness 
directives (which are equivalent to assumptions of properties in which the LHS of an 
implication is a non-Boolean property) are outside the Simple Subset.  This should be 
noted in the LRM.

[EM 17-May-06]
110. Named association of actual/formal parameters.  

It has been suggested that 
PSL should support named association of actuals and formals, as an alternative to 
positional association, in sequence and property instances.  This could be supported 
with the syntax appropriate for a given flavor, or it could be supported using a 
language-neutral syntax.  For PSL within VHDL 200x, it would probably be better to 
allow VHDL-style named association.

[EM 17-May-06]
111. Restricting to linear time in assume/assert reasoning.

An email received from Moshe Vardi:
>For linear time, "assume f, assert g" is equivalent to
>"assert f->g". The LRM does require assumptions to be linear, but it
>does not require assertions to be linear.
>
>Mixing linear and branching formulas requires carefully defining the
>semantics. See "Modular Model Checking" by Kupferman&V. If f is linear
>and g is branching, than M is not the same as M||A_f |= g.
>
>I'd suggest requiring that only linear time be used in both assumtions
>and assertions in the context of assume/assert reasoning.

[CE 23-May-06]
112. Flavors and Portability: 
portability is relevant only for external (i.e.: not embedded) properties; 
in there, how much it makes sense to use a flavor to check properties on 
designs written in another language? A little, if not for legacy code, 
so my proposal would be to prevent usage of flavor out of embedded code 
or bound vunits. The only allowed flavor for external properties should be GDL.

[AF 8-June-06]
113. Inheritance and Vunit reuse: 
I would just recommend to add two new 
keywords to the language, to allow inheritance of properties either as 
assertions or assumptions, enabling exploitation of vunits as "natural" 
property containers. A point I'm currently reviewing is about whether 
allowing partial inheritance of properties, in case some of them had 
already been declared as assertions or assumptions in the inherited vunit, 
or not, allowing only qualified (assume  | assert ) 
inheritance of fully undeclared property sets.

[AF 8-June-06]
114. Overriding, Namespaces: 
Current overriding rules are dangerous 
for false positive risks, due to the default binding mechanism. 
I would propose reviewing the scoping rules, by making everything 
not explicitly declared global to be locally defined, and to require 
to explicitate overriding.

[AF 8-June-06]
115. Definition of a PSL abstract machine: 
whether we remove flavor, 
or allow flavors cross-application (e.g.: vhdl flavor to deal with 
verilog descriptions), and actually even if we just restrict our 
attention to one single flavor, it would be necessary to build an 
HDL-independent representation of the DUV, in PSL terms; this is 
currently delegated to the verification tool, but should instead be 
coded, in my view, by the LRM, so that any possible added flavor has 
a clear representation to match with, and any possible implementation 
of a PSL translator has a flavor independent reference for the DUV. 
One of first steps along the path to this result is the definition 
of a sampling semantics.

[AF 8-June-06]
116. Use Models.  
There are many ways of using PSL.  Since PSL is defined 
separate from the HDL text to which it relates, PSL vunits can potentially 
be processed before, after, or along with the corresponding HDL text.  
Each of these use models has different implications for operations such as 
name resolution, component/instance binding, scope and visibility, etc.  
The LRM should make some statement about what use model(s) are expected to 
be supported, and it should make explicit what the use models imply in 
these other areas.

[EM 2-June-06]
117. Formal semantics for built-in functions  
Define formal sematics for built-in functions, especially for ended(), rose(),
fell().

[SR 13-June-06]
118. Holds tightly on an infinite path.
What is the meaning of "holds tightly" on an infinite path. 
It should be part of the formal semantics. 
Explain how these semantics are related to the formal semantics of restrict.

[EM 13-June-06]
119. portability of vunits between flavors.
The current LRM says that "any flavor vunit could be used with any HDL, 
provided that the signals referenced in the HDL are declared in the vunit."
Clarify that only non-Bit signals should be declared in the vunit.

[EM 13-June-06]
120. Type mismatch in overriding declarations.
From Eduard Cerny:

The LRM does not explain about type mismatches in overriding declarations.
For example, is it an error if the signal names match and the types are
different. The alternative could be to treat it as a different variable
in a local scope.
The LRM does not explain overriding of declarations other than signal 
declarations.
When the sequence or property names are the same in the inheriting and
inherited context, is it an error?
The rules on pp37 seem to contradict what the
rules about inheritance say. For example, rule c on pp 37 mentions
"single" declaration in the transitive closure. Why is it in
parentheses? Meaning?

See (here) for more details.

[CE 10-July-06]
121. Index range syntax.
The IEEE 1850 PSL LRM defines 'Index_Range' as follows:

    Index_Range ::=
        LEFT_SYM /finite/_Range RIGHT_SYM
      | '(' HDL_RANGE ')'

This is a bit odd, since the first alternative uses LEFT_SYM and RIGHT_SYM, whereas the second alternative uses '(' and ')' directly.  The reason seems to be that HDL_RANGE is only defined for VHDL, and in VHDL, the LEFT_SYM and RIGHT_SYM are '(' and ')' respectively.  However, this kind of coupling is inappropriate; it would be better for Index_Range to be defined as

    Index_Range ::=
        LEFT_SYM Range_Spec RIGHT_SYM

    Range_Spec ::=
        /finite/_Range
      | HDL_RANGE

[EM 11-July-06]
122. Subroutine calls on a match of a sequence.
Add subroutine calls that are triggered when a match of a prefix
of a sequence occures.

[SR 11-July-06] 

123. Add the througout operator
Add the throughout operator as in SVA.
It is an always version of the within operator.

[EM 11-July-06]

124. Clock/Data race conditions.  
The PSL LRM needs to clearly state how clock/data race conditions are handled.  
see (here) for details.

[EM 13-July-06]

125. Input-sensitive assertions vs. unclocked assertions.  
PSL unclocked assertions 
are expected to evaluate at every cycle of the underlying tool.  For combinational 
assertions, this is acceptable, although it is not necessarily efficient.  But for 
unclocked sequential assertions, for example for modeling untimed logic, it 
doesn't work very well at all.  Instead of evaluating at every tool cycle, it is 
often more useful (or efficient) to evaluate whenever an input changes, much 
like the semantics of VHDL processes and Verilog always blocks.  It might be 
possible to do this now, using a Verilog event expression as the clock, e.g.,

    always ({a} |=> {b; c})@(a,b,c);

However, this approach clearly creates a race condition between clock and data 
inputs, and may result in the assertion sampling the old values of the inputs 
rather than the new values.  (This would definitely occur if we apply SVA sampling 
semantics.)  We need a mechanism that allows the assertion to evaluate after a 
change on any input, using the new value of that input - even in a cycle-based 
environment.

see (here) for more details.

[EM 13-July-06]

126. Weak and strong assume

From the verification guild:
For model checker, to provide an option for ignoring possible future
assumption violations, is not the same as to provide an option to pass the
kind of the semantics to be used:
- weak semantics (implies ignoring future assumption violations).
- strong semantics (filter all behaviors violating assumptions)

for the full discussion, see:
(here)

[CE 15-Aug-06]

127. Forall index range in VHDL
The forall operator should support both ascending and descending ranges.
In VHDL, ranges are often extracted using the 'range attribute, which can
be either ascending or descending (and are more often descending). VHDL
designers who will use PSL will want to specify replicated assertions as:

    forall idx in {my_bus'range}:
      ...

where my_bus'range may be either ascending (e.g., 0 to 31) or descending 
(e.g., 31 downto 0).  

In general, it is not possible for the user to know whether a given bus is 
declared with an ascending or a descending range, because VHDL allows
ports to be declared as unconstrained, with the formal constraints being
inherited from the actual signal associated with the formal.  It is possible
to always say

    forall idx in {my_bus'low to my_bus'high}:
      ...

but since PSL syntax allows use of attribute 'range, it should not result in
an error if the range is a descending range.

This issue applies to the parameterized 'for' operators as well as to 'forall'.

Received on Mon Jul 24 15:56:17 2006 

[EM 24-JUL-06]

128. Recursion in PSL

Does the IEEE 1850 PSL LRM explicitly state whether a property or sequence declaration 
can contain (directly or indirectly) an instantiation of itself?  If not, it should.
[EM 13-Sep-06]

129. The keyword "for" is missing from the keyword table
The parameterized SERE/Property forms in IEEE 1850 PSL added 'for' as a keyword.  
However, we neglected to add 'for' to the keyword table in clause 4.2.2.  
The table needs to be updated to include 'for', and we should also review it carefully 
to see if any other keywords need to be added.

[EM 5-Oct-06]

130.  LRM typos 5.2.3.x
From  Mike Avery (Cadence)
Page 43, clause 5.2.3.9
LRM reads -    nondet( {1:2,4,15:18} -- returns a value chosen
nondeterministically
Should read -  nondet( {1:2,4,15:18} ) -- returns a value chosen
nondeterministically
Page 43, clause 5.2.3.10
LRM reads -   nondet(8, {1:2,4,15:18}) -- returns an array of length8, 
with each element chosen
Should read - nondet_vector(8, {1:2,4,15:18}) -- returns an array of
length 8, with each element chosen  

[MA 6-Oct-06]

131.  Structural contradiction vs. logical contradiction
Length matching:  the logical contradiction false is treated
differently than the structural contradiction.  It has been known since
Accellera Version 1.01 (where it is mentioned in Appendix B) that there is
an inconsistency in the way that structural contradictions are treated vs.
the way that logical contradictions are treated.  During the past year some
ideas for the direction of a solution have been explored, and are described
in [EFH05].  We recommend that a future version of the formal semantics
base a solution to this problem on [EFH05].Benefit:  Language consistency.
[CE 19-Nov-06]

132. The semantics of r[*0]
The semantics of r[*0] are different depending on whether or not r[*0]
is standalone or is concatenated with another SERE.  There is no good
reason for this.  We recommend that it be changed, and note that the formal
semantics of [EFH05] fix this problem as well.Benefit:  Language
consistency.
[CE 19-Nov-06]

133.  Suppose we would like to say that signal "a" is independent of signal
"b".  This could be checked by a cone-of-influence reduction.  Currently,
there is no way to say such meta-properties in PSL.  We recommend that
inclusion of such language constructs be considered.Benefit:  Add
expressive power.
[CE 19-Nov-06]

134. Adding a new "witness" directive.  
This will instruct a verification tool to produce a trace on which the property holds
(as opposed to "assert", which instructs the tool to verify that it holds
on all traces). Benefit:  Prevent the coding of ostensible "assertions"
which are actually intended to fail.
[CE 19-Nov-06]

135.  The BNF is missing the definition of PSL_Identifier.
Note:  what is actually missing is not the definition, but the italics (PSL
_Identifier) that would indicate that PSL_Identifier is equivalent to
Identifier.Benefit:  Clarification.
[CE 19-Nov-06]

136. Adding past operators
The PSL language only supports temporal operators allowing to speak
about the future. We would like to suggest extending PSL to deal also with
past temporal operators. 
See (here) for more details.
[CE 19-Nov-06]

137. Clock alignment operator
In the clocks paper [EFHMV03] where we suggested the current semantics for
 the @ operator, we pointed to one problem with it: The characterization of
 until as a least fixed point is not preserved when multiple clocks are
 involved. In [F06] we showed that this can be fixed by adding weak/strong
 alignment operators that takes you to the next clock tick, if the current
 cycle is not a clock tick.

 Formally, denoting X![0] and X[0] for the strong and weak alignmentoperators, respectively, we have:

  w |-c- X![0] f    <==>  \exists j<|w| s.t. w^{0..j} is a clock tick of c
 and w^{j..} |-c f

  w |-c- X[0] f    <==>   if \exists j<|w| s.t. w^{0..j} is a clock tick of
 c then w^{j..} |-c- f

 I suspect these operators are not only of theoretical interest, but are
 also useful when writing properties involving several clocks.
[DF 22-Nov-06]

138. PROSYD EU project recommendations for PSL changes
See (here) for  details.
[CE 12-Dec-06]


139. Add to the formal parameters of PSL a struct parameter. This
can ease the specification, for example, in cases where there is a vunit
collecting several properties regarding the same set of  parameters and each
property refers to some subset of this set.
[DF 13-Feb-07]

140. Add examples explaining the precedence of the various clocks.
In particular, add an example of a vunit that contains both a default clock and an
explicit clock for an assertion. Explain which clock has higher priority. 
Currently the reader has to read sections 5.3 and 5.4 in order to figure
this out.
[SR 13-Feb-07]

140. Implicit parentheses around property instances and parameters.
The LRM may not make it clear that property instantiation and parameter 
substitution is done in such a way that the integrity (and meaning) of the 
instantiated property or the referenced poperty parameter is maintained.  
In particular the example at the end of 6.3.3.2, property instantiation, 
shows a property instance and an equivalent property, but the example 
does not consider what happens when a property is instantiated within another 
property, not does it show the equivalent result in parentheses.  
The LRM should give more examples.
For more details see here.
[EM 15-Feb-07]

141. Passing a module as parameter 
Phrasing of the point-to-point property
for one of PROSYD's case studies was done using as parameters the relevant
signals of one master and one slave. Each such property usually involved
5-8 parameters. These parameters were later instantiated in the top-level
properties. It would have been much less cumbersome if it was possible to
pass as a parameter to the property a slave and a master, rather than the
relevant signals of each. This is not possible in PSL, since the allowed
parameters are one of the following: Boolean, bit, bitvector, numeric,
string, sequence, property. An entire module may not be passed as a
parameter. We suggest enhancing the set of allowed parameters to include
a predefined module.
Benefit: Ease of use.
[CE, PROSYD 7-Mar-07]

142. Analog extensions: 
PROSYD deliverable D1.3/2  describes an extension of PSL to allow it to be used in real-time and analog properties. 
We recommend that the committee consider this extension.
Benefit: Applicability to analog designs.
[CE, PROSYD 7-Mar-07]

143. Counting untils. 
Extend PSL to allow statements such as "p holds until
the 3rd occurrence of q". This property occurs for instance in buffer
protocols in which the bus must be granted to a given client until the 3rd
transfer has completed. This property is hard to express in PSL. 
For more details see PROSYD recommendations, p.10, item 4.
[CE, PROSYD 7-Mar-07]

144. Local Binding and scope: 
Variables should be visible only in the current
vunit and in those inheriting from the current one; transitive closure of
inheritance should require to always specify the referenced vunit in case of
variable name conflict.
For more details see PROSYD recommendations, p.11, item 7.
[CE, PROSYD 7-Mar-07]

145. Clarifications for nondet()
1. p.43 about nondet():
"nondet( {1:2,4,15:18}"   - missing closing parenthesis
2. Clarify what mixtures of ranges and distinct values are allowed in
nondet().
[SR 11-Mar-07]

146. PSL never and weak/strong operands
There is inconsistency in the various references to the 
operand of "never".
see here for details.
[EM 23-Mar-07]

147. Interpretation of 'and', 'or' in the VHDL flavor
The LRM needs to make it clear that "predefined" in item a) in
clause 5.2.1 refers only 
to HDL identifiers that have meaning without (implicit or explicit) 
declaration.  The LRM must also clarify when an expression of the form 
Bool1 op Bool2 (where op = and/or) should be interpreted as an HDL 
expression, and therefore op is the HDL operator, and when it should be 
interpreted as a PSL property, and therefore op is the PSL operator.
[EM 17-May-07]


---------------------
!-- ----------------------------------------------------------------- -->





Last updated on 28 Nov 2005.