[sv-bc] Long list of LRM errata

From: Michael Smith <michael.smith_at_.....>
Date: Wed Aug 24 2005 - 04:01:22 PDT
I have a list of errata that I have been gathering.

How are the vendors resloving the ambiguities and omissions that they are
finding? Will we end up with a separate SV language for each vendor?

What is the status of the IEEE ballot? Can corrections still be made?
When is SystemVerilog now expected to become a standard?

Thanks,
Mike Smith

SystemVerilog P1800 Draft 5 Prelim 1 Manual
===========================================

Pages are printed (PDF)

P211 (223) half way down "ended" and "matched" should be courier.
P212 (224) remove space between arrayA and [16]
P214 (226) "More complex sequential behaviors are described by SystemVerilog sequences"
           The previous paragraph has already talked about this. Maybe the para breaks
           are in the wrong places.
P216 (228) "The clocking_event ..." this is not mentioned in the preceding syntax table.
           This sentence is out of place and makes the text confusing to read. It should
           perhaps go soon after syntax 18-2 or with the first example on P217 (229).
P222 (234) 3rd para from end: $sampled should use courier font (twice)
P224 (236) As noted on reflector, what if the type of expression1 is two-valued?
           As noted on reflector, what if there wan't such an clocking event? S/b same as
           too many ticks back.
P235 (247) Declarations of properties are out of place here - this is "sequences";
           "properties" come later.
           Section 18.11.5 It is not clear what "the property will hold on any extension
           of the path" means. E.g. what is a "path"? What is the "extension" of a path?
           (These terms are defined in the PSL LRM)
P240 (252) list_of_formals still appears in syntax, even though properties now
           use tf_port_list (and in ANnex A). Is direction allowed?
P356 (368) Why do $rose, $fell etc. not appear in Syntax 24-8?

-          How does one bind into a top-level instance (e.g. $root.top)?
           If you put a bind outside any modules, it goes into a compilation unit package.
           What would cause it to be elaborated?
           You could create a second top-level module, bindings, to include the "top level"
           bind commands.

[Emailed to Johny Srouji, 26/5/05]

SystemVerilog P1800 Draft 5 Prelim 5 Manual
===========================================

P118 (130) The third ampersand in the syntax for cond_predicate should be coloured red.
P133 (147) Final blocks execute when $finish is called, whether implicitly or
           explicitly. Does this mean that if a design includes no program
           instances, then final blocks are not executed if the simulation ends
           simply due to there being no more events? ($finish is not called in this
           case.) Is this the intent?
P141 (155) 2nd para. Why does this talk about "formal arguments passed by reference"?
           In the following example, is "automatic int m = j" illustrating this?
           If yes, how? If not, the text is unclear.
P143 (157) Syntax the enum in of class process is incorrect: Should be
           typedef enum {...} state;
P144 (158) k is declared but not used. Should the line of the example that calls
           process::self be "begin job[k] = process::self(); ... ; end?
P199 (213) peek. The final sentence "Calling the peek() method .." doesn't seem to
           make sense. How can calling peek cause a process to be unblocked?
           Here is my analysis: peek or get only blocks if the mailbox is empty.
           Unblocking requires a put or try_put. This will only unblock one process
           that is blocked by get, but MAY unblock other processes IF they have
           been blocked by peek. Is there a race? or do the put and get always
           see the same message?
P202 (216) The BNF for wait_order is either wrong, or implies that e1.triggered is a
           hierarchical identifier. The latter is not clear from Appendix A.
P210 (224) clocking_decl_assignment ::= signal_identifier [=expression]. In the BNF,
           "signal_identifer" is a simple_identifier, not an hierarchical_identifier.
           But the interface examples have signals in the form interface_identifier.member
P210 (224) clocking cd2 references b.cmd, which is not allowed, because cmd is
           not in the modport test of bus_B.
P214 (228) Syntax 15-4 has the intra-assignment form of clocking_drive first and
           the blocking form second. The words on P215 (229) assume the opposite order.
P215 (229) The first of the Examples has the comment "drive data in the NBA region
           of the current cycle" What is the current cycle at the start of simulation?
           For example, given
           clocking cb @(posedge clk); output In;
           Is "initial In <= 1;" the same as "initial In <= ##1 1;?"
           What about "initial ##0 In <= 1;" and "initial In <= ##0 1;"?
P215 (229) Conflicting bits - does Z cause a conflict or not? Or are the rules the
           same as for multiple drivers for a wire or tri net, or for ambiguous
           conditions when using the conditional operator (?:)?
P219 (223) Are a program's ports program variables or not? (ModelSim 6.1 thinks so,
           VCS X-2005.06-Beta2-5 thinks not). The example on p345 (359) seems to
           suggest that program ports are not program variables.
P285 (299) A bind directive may be included in a compilation unit scope.
           Does it have any effect? Under what circumstances?
P358 (372) Is the reference to "i.True" in module sub valid? The text of 20.9 is
           unclear - are objects other than those legal to be listed in modports
           accessible by port reference?
P396 (410) "DPI" is deprecated, yet examples in the text use "DPI", not "DPI-C".
P542 (556) Should event.triggered appear somewhere as an expression? Or it covered
           by "hierarchical_identifier select"? Putting it another way, where e
           is an event, is "e.triggered" an expression?
P551 (565) Syntax the enum in of class process is incorrect: Should be
           typedef enum {...} state;
P594 (608) "DPI" gives compile time error, yet standard seems to permit its use. 
           Compile time errors usually mean the code fails to compile and in
           particular cannot be simulated.
         
What does "positive" mean in the LRM? There are conflicting examples and the
term is not defined. Examples: p198 (212) return value of try_put - "positive"
is used to mean "not 0 or negative". p206 (220) The delay_control must evaluate
to a positive integer value; later it is clear that #0 is allowed.


SystemVerilog P1800 Draft 6 Prelim 1 Manual
===========================================
P33  (35)  Class Packet has incomplete declarations of new and send. Either
           declare them extern, or complete the declaration.
P51  (63)  Should a queue initializer have a preceding '? If so, the LRM is wrong,
           if not, the term "array literal" should not be used.
P51  (63)  The sentence "like arrays, queues can be manipulated using
           the indexing, concatenation, slicing operator syntax, and equality operators"
           implies that concatenation may be used with unpacked arrays. The semantics
           are not defined anywhere. I would expect them on p.39 (51)
P58  (70)  Section 6.3, Constants. "Verilog provides three constructs for defining
           elaboration-time constants: parameter, localparam and specparam." There
           follows examples of localparam, specparam and const. What's "const"?
P76  (88)  Which operators are/are not allowed for object variables? == != >> <<.
           Are there any others? What about ===.
P106 (118) int j = { "A", "B", "C", "D", "E" }; - should this have a preceding '?
           GENERAL POINT - when must array literals (assignment patterns) be used?
P200 (212) This implies that "signals" are program (or module) ports or hierarchical
           references. However, Section 15.4 permits arbitrary hierarchical expressions.
P208 (220) 15.14.1 says "Synchronous signal drives are processed as nonblocking
           assignments". Does that then mean that in a program, clocking signals
           cannot be program varaibles, which require blocking assignments)?
P347 (359) Syntax for virtual interface requires "interface_identifier", which is
           a straightforward identifier. Example (p350 (362) shows identifer.modport_name.
           The semantics of this are not described.
P350 (362) Last line - should this be "assert property (b1.sb.p1);" ?

--
Michael Smith
Senior Consultant

DOULOS - Developing Design Know-how
VHDL * SystemC * Verilog * SystemVerilog * e * PSL * Perl * Tcl/Tk * Project Services

Doulos Ltd. Church Hatch, 22 Market Place, Ringwood, Hampshire, BH24 1AW, UK
Tel: +44 (0)1425 471223                       mail: michael.smith@doulos.com
Fax: +44 (0)1425 471573                           Web: http://www.doulos.com

This e-mail and any  attachments are  confidential and Doulos Ltd. reserves 
all rights of privilege in  respect thereof. It is intended for the use of 
the addressee only. If you are not the intended recipient please delete it 
from  your  system, any  use, disclosure, or copying  of this  document is 
unauthorised. The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.
Received on Wed Aug 24 04:02:05 2005

This archive was generated by hypermail 2.1.8 : Wed Aug 24 2005 - 04:04:48 PDT