System Verilog
LRM Changes to Draft 5
On
Status Legend: Open, Remove Note, Change, No Change
ID Committee Section Description Status Changes
LRM-258 SV-EC 3.11.4 Fix cross-reference to dynamic cast (LRM-115/117 was done incorrectly) Change Section 3.11.4
LRM-259 SV-EC 11.3 Correct indentation and placement of comments on example (LRM-203 was missed) Change Section 11.3
LRM-260 SV-EC Index Add srandom, urandom, and urandom_range to index (LRM-128 was delayed until other index work done) Change Index
LRM-261 SV-EC 3.3.1 Editor’s Note: Is “integral” synonymous with “singular“? Both terms are used liberally throughout the LRM. Section 12
refers to “integral singular” in multiple places. The BNF only defines “singular” (A.2.2.1). It appears to me that they are the
same. If so, then only one term should be used throughout the LRM and BNF. If these terms are different, then another section
needs to be added here describing singular, and the BNF needs to be defined for “integral”. RESPONSE:
No. integral is not synonymous with singular. However, an integral is also a singular, but not the other way around (a singular is not necessarily an integral).  For example, an event is a singular but not an integral.

The term integral singular is obviously redundant and can be replaced by integral since it alone denotes both.
No Change Section 3.3.1
LRM-262 SV-EC 3.7 Editor’s Note: This syntax ought to be in the syntax excerpt in section 3.2, but I could not find it in the Annex A BNF RESPONSE:
Editor’s note is Correct. Modify the BNF as shown below.
Add to this section snippets from variable_declaration and data_type productions.
Add chandle to data_type production.  Merge singular_type into data_type (remove singular_type), and change associative dimension.  As shown below:
Change Section 3.7 
Section A.2.2.1 Section A.2.5
LRM-263 SV-EC 3.8 Editor’s Note: This syntax ought to be in the syntax excerpt in section 3.2, but I could not find it in the Annex A BNF RESPONSE:
Editor’s note is Correct.
That syntax must be allowed by the variable_decl_assignment BNF production.
Modify that production as shown below (optional variable_dimension).

variable_decl_assignment ::=
  variable_identifier [ variable_dimension ] [ = constant_expression ]
| variable_identifier [ ] = new [ constant_expression ] [ ( variable_identifier ) ]
| class_identifier [ parameter_value_assignment ] = new [ ( list_of_arguments ) ]

Then the syntax for this section is then included by variable_declaration.
Change Section 3.8
Section A.2.4
LRM-264 SV-EC 3.11.4.1 Editor’s Note: Would “prototype” be a better term that “syntax”, since these methods are not part of the BNF?
RESPONSE:
Yes, absolutely.  Replace “syntax” with “prototype” in these sections.
Change Section 3.11.4.1 Section 3.11.4.2 Section 3.11.4.3 Section 3.11.4.4 Section 3.11.4.5 Section 3.11.4.6
LRM-265 SV-BC 3.12 Editor’s Note: I deleted the clause “i.e. an X will be read as 0...”. It no longer makes sense after change LRM-108, which
reversed the sentence from converting 4-state to 2-state into converting 2-state to 4-state. Reply: I agree with the editor's note. It can be removed
No Change Section 3.12
LRM-266 SV-BC/SV-EC 3.14 Editor’s Note: Should “singular_type” be included in the casting type? In fact, “simple_type” is only used by the casting_type production. Can “simple_type” be replaced with “singular_type”? RESPONSE:
No. (see LRM-49) Singular should not become a BNF term.
No Change Section 3.14
LRM-267 SV-EC 3.15 Editor’s Note: The paragraph above is only definition of “singular” that I could find, outside of the BNF. The term should be
defined in its own subsection, probably in 3.3.x, and the BNF included in that definition. A reference to that defining subsection
should then be added to the preceding paragraph. RESPONSE:
The term singular could be defined in its own section, but it is not a BNF term (see LRM-266).
However, a  definition for singular does not belong in Section 3.3.x since a singular is not an integral type.
The singular definition should be moved to a new Section 3.14 (before the Casting section). That will make singular an index item, thus, easier to find.
Change Section 3.14 Section 3.15
LRM-268 SV-EC 4.6 Editor’s Note: Is new[] an operator, method or function (it is called a both function and an operator in the next subsection). RESPONSE:
The keyword new is a built-in mechanism.  In the context of a class, it is considered a method, which is function, and in the context of dynamic-arrays it is considered an operator.  There is no contradiction.  Since it is a keyword and its semantics are built-in, it can be described as either.
No Change Section 4.6
LRM-269 SV-EC 5.7 Editor’s Note: I feel the preceding paragraph is awkwardly and ambiguously worded.
Why is “wire” in quotes? Is this an indication that it is not referring to the wire keyword? Even it that is the intent, it is easy to assume that the specific keyword is intended, and therefore that only the wire data type can be aliased. I suggest striking the “or “wire” “, or replacing it with “or net”.
The same sentence says the alias connection must be “compatible” and must be the “same type”. To me, those are two different things. In Verilog, wire and tri are compatible, but are they the same type?. In Verilog, wire and tri1 have compatibility rules when connected together so there is no error or warning (see section 12.3.10). Can they be aliased to each other?
What if I alias two nets, both wire types of exactly the same size, but one is declared as signed (or is coerced to being signed by being connected to a signed port in the containing module) and the other wire is unsigned? RESPONSE:
The term “or wire” should removed.
That sentence should read: The nets connected with an alias statement must be type compatible, that is, they have to be of the same net-type.  For example, it is illegal to connect a wand net to a wor net with an alias statement.
Change Section 5.7
LRM-270 SV-EC 5.7 Editor’s Note: The statement that implicit nets are assumed to be scalar is not accurate. For a module instance, if an undeclared identifier is also declared as a port of the containing module, then a net of the port size is assumed. I changed the wording as shown above. RESPONSE:
The new wording is correct.
No Change Section 5.7
LRM-271 SV-EC 6.1 Editor’s Note: What other new SV objects can have attributes? (program blocks, assertions, ...)? I will update the BNF syntax excerpt once that has been determined. Will additional text for these other objects need to be added in this section?
I suggest this entire section is not needed. The BNF for each new SV object shows where attributes are legal, and does not need to be covered in a special section. The only change to the attribute construct itself in SystemVerilog 3.0 is the default data type of bit. Verilog-2001 says the default value is 1 (true). Is it necessary for SystemVerilog to specify the data type of that value in order for attributes to work with SystemVerilog constructs? If not, then let the IEEE determine the appropriate default data type, the IEEE sees a need for one. Response: The Syntax 6-1 is superflous and is removed. The section is renamed to Default attribute type and the text changed to support this. The default type was part of 3.0 and it is not possible to change this at this date.
Change Section 6.1 Section 6.2
LRM-272 SV-BC 7.3 Editor’s Note: Does the BNF reflect the preceding restrictions? For example (if I am not mistaken) the current BNF can have @(expression), which will allow @(a = b | c) (the example deleted with draft 5 from section 8.11). Response: This is a simple sematic restriction. I am not in favor of splitting the expression BNF to represent this restriction.
The editor's not can be removed
No Change Section 7.3
LRM-273 SV-BC 7.10 Editor’s Note: Is the note above needed? It came from the old Superlog LRM, and was intended to show that Superlog used Verilog’s precedence instead of C’s. The SV LRM’s purpose is to show where SV operators fall with respect to Verilog operaotrs. Response: I agree with the editor's note. It along with the note can be removed Change  Section 7.10
LRM-274 SV-BC 7.11 Editor’s Note: “bits” is not a keyword so I removed the bold-courier font. A concatenation can be used with reg, wire and many other data types. Since that is standard Verilog, I deleted the reference to just the logic data type. Response: I agree with the editor's note. It can be removed No Change Section 7.11
LRM-275 SV-EC 7.11 Editor’s Note: Does the BNF reflect this special case that for a string a non-constant replication multiplier is allowed? RESPONSE: It is in A.8.1 No Change Section 7.11
LRM-276 SV-EC 8.7 Editor’s Note: This seems out of place in this section on procedural statements. It should be moved to section 9.9. RESPONSE:
The editor’s note is an interesting comment.
The final block is a statement, but it does not create a process (as intial and always blocks do). Therefore, it would seem appropriate to leave “final block” in the Section on “Procedural Statements and Control Flow”. Unfortunately there is a statement in 9.1 that discusses final blocks that must be moved to Section 8.1 or elase it does not make sense. Add clarification after discussion with Stu.
Change Section 8.1 Section 8.7 
Section 9.1
LRM-277 SV-EC 8.10 Editor’s Note: What is meant by “This can be made clearer by the use of parenthesis”? An example is needed. The BNF does not show optional parentheses for iff. SystemSim does not allow the following: “always @( (posedge clk iff !reset) or negedge reset)”. I wish it did--the extra parenthesis does make it clearer what is being qualified by the iff. RESPONSE:
That sentence means parenthesis can be used around the iff expression, which is allowed by the BNF.  Using the same example as in the LRM:
 always @(a iff (enable == 1) )
No Change Section 8.10
LRM-278 SV-BC 9.5 Editor’s Note: The preceding paragraph did not match the revised rules in 5.6. I made the changes shown above to make the tow sections match. Response: I agree with the editor's note. It can be removed No Change Section 9.5
LRM-279 SV-EC 11.21 Editor’s Note: Replace preceding syntax with final BNF excerpt, once available. RESPONSE:
Editor’s note is correct.  This BNF entry should be added to the primary production:
primary ::=
 
 class_identifier :: {class_identifier  ::} identifier
Change Section 11.21 
Section A.8.4
LRM-280 SV-EC 12.3 Editor’s Note: I could not find this syntax in the BNF. RESPONSE:
Propose breaking up class_item into class_property , class_methods, and class_constraint, as shown below.
Change Section 12.3 
Section A.1.8 Section A.notes
LRM-281 SV-EC 12.11.3 Editor’s Note: Is “void = “ legal? See Section 10.3.2 Response: Editor is correct.  That is not legal syntax.  Example should be changed from: Change Section 12.11.3
LRM-282 SV-EC 13.2.1 Editor’s Note: Would “prototype” be a better term that “syntax”, since methods are not part of the BNF? RESPONSE:
Yes, absolutely.  Replace “syntax” with “prototype” in these sections and for 13.3.1 sections.
Change Section 13.2.1 Section 13.2.2 Section 13.2.3 Section 13.2.4 Section 13.3.1 Section 13.3.2 Section 13.3.3 Section 13.3.4 Section 13.3.5 Section 13.3.6 Section 13.3.7 Section 13.3.8
LRM-283 SV-EC 15.11 Editor’s Note: I was not able to match the first version of the original syntax with what is in the BNF. Nor does the BNF seem to support example 2, below. RESPONSE:
Editor is correct.
The following should be added at the end of the module_or_generate_item_declaration BNF production (in A.1.5):
module_or_generate_item_declaration ::=
 
 default clocking clocking_identifier ;
Change Section 15.11
Section A.1.5
LRM-284 SV-EC 15.14 Editor’s Note: I could not find this syntax in the BNF.
RESPONSE:
Add to statement_item (section A.6.4 page 295) the following:
Change Section 15.14 
Section A.6.4 Section A.6.11
LRM-285 SV-AC 17.4.1 Editor’s Note: If I understand correctly from reading the BNF and sections 3.3.2 and 3.15, “singular” does not include unpacked values. Also, why isn’t time considered an integer (or singular) type? Response: The text should be corrected as below

Any singular type is allowed, signed or unsigned, packed or unpacked, with the exception of event and the
non-integer types time, shortreal, real, and realtime. The following types are non allowed:
• non-integer_types ( time, shortreal, real and realtime)
• string
• event
• chandle
• class
• associative arrays
• dynamic arrays
Change Section 17.4.1
LRM-286 SV-AC 17.7.2 Editor’s Note: The preceding example description says “the following two examples...”, but it seems to be 1 example that expands to more than two possible matching sequences. Saying “two examples” does not seem to match the example. Response: The paragraph correctly says “ the following two expressions…”. Adding an empty line between the two expressions will distinguish the two expressions, as shown below: Same down for following example Change Section 17.7.2
LRM-287 SV-AC 17.7.2 Editor’s Note: I assumed that “should” was an indication of a mandatory requirement, though it could have meant an optional requirement. Response: That is correct. No Change Section 17.7.2
LRM-288 SV-AC 17.12 Editor’s Note: The 5 preceding syntax lines do not follow the BNF format from Annex A. Should they be rewritten using the actual BNF? Are these 5 syntax lines even needed, since the BNF is already included in this subsection. Response: Should be corrected as below:

cover property ( [ clocking_event ] sequence_instance sequence_spec) statement_or_null
or
cover property ( [ clocking_event ] sequence_expr ) statement_or_null, or

For property coverage, the statement appears as: All other forms of the cover statement are evaluated for property coverage.
cover property ( property_instance ) statement_or_null
or
cover property ( [ clocking_event ] property_modifier property_expr)
statement_or_null
or
cover property ( [ clocking_event ] property_implication) statement_or_null
Change Section 17.12
LRM-289 SV-AC 17.12 Editor’s Note: What is “attemptID”? It does not appear in the BNF or the 5 syntax lines above. Response: attemptID should be defined before use as below:
The identifier of a particular attempt is called attemptId, and the clock tick of the occurrence of the
match is called clock step.
 The results of coverage statement for a property shall contain:
— Number of times attempted
— Number of times succeeded
— Number of times failed
— Number of times succeeded because of vacuity
— Each attempt with an identifier (attemptID) and time
— Each success/failure with an identifier (attemptID) and time
In addition, statement_or_null is executed every time a property succeeds.
Vacuity rules are applied only when implication operator is used. A property succeeds non-vacuously only if
the consequent of the implication contributes to the success.
Results of coverage for a sequence shall include:
— Number of times attempted
— Number of times matched (each attempt can generate multiple matches)
— Each attempt with attemptId and time
— Each match with clock step, attemptID, and time
In addition, statement_or_null gets executed for every match. If there are multiple matches at the same time,
the statement gets executed multiple times, one for each match.
attemptID is the identification of a particular attempt. Clock step is the clock tick of the occurrence of the
match.
Change Section 17.12
LRM-290 SV-AC 17.12.1 Editor’s Note: The 4 preceding syntax lines do not follow the BNF format from Annex A. Should they be rewritten using the actual BNF? Reply: No. The syntax lines are not BNF items and are correct, but they can be made clearer as shown below:


A concurrent assertion statement can be used directly outside of a procedural context.  It can be used within a module as a module_common_item, an interface as a module_common_item, or a program as a non_port_item. In a module,
it is used as a module_item and in an interface as an interface_item. A concurrent assertion statement is either
an assert or a cover statement. Such a concurrent assertion statement uses the always semantics.
The following two forms are equivalent:
assert property ( property_spec property_spec) action_block action_block
Accellera
always assert property (property_spec property_spec) action_block action_block;
Similarly, the following two forms are equivalent:
cover property (property_spec property_spec) statement_or_null statement_or_null
always cover property (property_spec property_spec) statement_or_null statement_or_null
Change Section 17.12.1
LRM-291 SV-BC 19.2 Editor’s Note: This declaration is greatly generalized from the full BNF, but looks like it is the BNF. Is that a problem? Response: REPLACE the BNF style example
interface <identifier>; <interface_items> endinterface [: <name>
<identifier>]
WITH something that looks more like an example
*interface *<identifier>;
  <interface_items>
*endinterface *[:  <identifier>]
Change Section 19.2
LRM-292 SV-BC 19.2.1 Editor’s Note: Does “data” also need to change from logic to wire in the top module? Response: In module top; REPLACE
logic [7:0] addr, data;
WITH
logic [7:0] addr;
wire [7:0] data;
Change Section 19.2.1
LRM-293 SV-EC A.1.8 Editor’s Note: Unmatched sets of curly-braces on preceding line (need to fix here and in section 12.4) RESPONSE:
Replace the entire section A.1.8 with the contents of LRM-280, and the following new section (A.1.9).  This production assumes that LRM-296 and LRM-280 have been applied.
Change Section A.1.8 Section A.1.9
LRM-294 SV-EC A.1.8 Editor’s Note: I am confused by the “constraint_item” and “constraint_item_or_block” productions. The seem to only refer to each other in a circular fashion. RESPONSE: Replace the entire section A.1.8 with the contents of LRM-280, and the following new section (A.1.9).  This production assumes that LRM-296 and LRM-280 have been applied. Change Section A.1.8 Section A.1.9
LRM-295 SV-BC A.6.2 Editor’s Note: These production names are not consistent;, e.g. “always_construct” vs. “combinational_statement”. I suggest that all these procedures be referred to as “_construct”. Change Section A.1.5 Section A.1.6 Section A.6.2
LRM-296 SV-BC/SV-EC A.8.6 Editor’s Note: This section does not list all the operators found in section 7.9, table 7-2. Should it?. RESPONSE:
No additional operators need to be listed in this section.
The missing operators (inside, dist, =>, := , :/ ) are handled by syntax alone (either constraints grammar or the inside rule).

Nonetheless, the inside operator syntax is missing.
Modify Section A.8.3, as shown (gray text is added)
Change Section A.8.3 Section A.8.6
LRM-297 SV-EC C.5.15 Editor’s Note: “assign” is a Verilog keyword. Is it a legal function name in this context? Response: No.  It’s not allowed. The name of this method will change to set. Change Section C.3.2 Section C.5.15
LRM-298 SV-AC SV-BC SV-CC SV-EC G Editor’s Note: What additional terms should be added to this glossary? Change Section G
LRM-299 SV-BC 24.2 Correct the string macro construction in 'define from earlier BC correction  Change Section 24.2
LRM-300 SV-EC 11.1 11.4 11.5 11.7 11.8 11.9 11.10 11.15 11.16 11.22 11.25 12.1 Change to Chaper 11 per Arturo in response to Francoise comments. Includes changing type system to data abstraction, adding cross references, clarify types of class properties, reword new description, section name change, clarification of this and super, etc. Change Section 11.1 Section 11.4 Section 11.5 Section 11.7 Section 11.8 Section 11.9 Section 11.10 Section 11.15 Section 11.16 Section 11.22 Section 11.25
Section 12.1
LRM-301 SV-BC B Editor's Note: I forgot to add an editor note to draft 5, Annex B.  The keyword "edge" was
added to the table (in draft 4, I believe) as being new in
SystemVerilog.  Actually, "edge" is already a reserved (and used) keyword
in the IEEE 1364 standard.  It was an errata that "edge" was not listed in
the SV Annex B.  Now the errata is that "edge" is flagged as an SV
keyword.  The correction is to remove the bolding and footnote flag from
the keyword "edge".
Change LRM_Changes_B.html
LRM-302 SV-AC A.2.10 17.7.2 Change *> to *-> operator per Surrendra Change Section A.2.10
LRM-303 SV-AC 1 Add statement about adding assertions to 3.1 per Surrendra Change Section 1
LRM-304 SV-BC 8.5.2 There is an error in the description of the for loop variable. It has to be automatic, otherwise it will not get initialized properly at the start of each loop. This also means it cannot be referenced hierarchically. From Dave Rich Change Section 8.5.2
LRM-305 SV-BC 5.5 Dynamic processes have been removed from SV. (replaced with a fork/join_none). Remove reference per Dave Rich. Change Section 5.5
LRM-306 SV-CC 27.1.2 Delete entire section: it is unnecessary, as terminology used in this section is the same as used in section 17. From Joao Change Section 27.1.2
LRM-307 SV-CC 27.2.1 Handle plurality per Joao Change  Section 27.2.1
LRM-308 SV-CC 27.2.2 Replace entire contents of section with following text per Joao Change Section 27.2.2
LRM-309 SV-CC 27.2.3 Handle plurality per Joao Change Section 27.2.3
LRM-310 SV-CC 27.2.4 Handle plurality per Joao Change Section 27.2.4
LRM-311 SV-CC 27.3.1 In figure 27-1, replace word "property" with "assertion" and add note below figure per Joao Change Section 27.3.1
LRM-312 SV-CC 27.3.1 Clean up example per Joao Change Section 27.3.1
LRM-313 SV-CC 27.3.1 Remove note per Joao Change Section 27.3.1
LRM-314 SV-CC 27.3.2 Rename list per Joao Change Section 27.3.2
LRM-315 SV-CC 27.3.2.1 Clean up example per Joao Change Section 27.3.2.1
LRM-316 SV-CC 27.3.2.1 Reword paragraph per Joao Change Section 27.3.2.1
LRM-317 SV-CC 27.3.2.2 Reword paragraph per Joao Change Section 27.3.2.2
LRM-318 SV-CC 27.4.2 Change event to reason per Joao Change Section 27.4.2
LRM-319 SV-CC 27.4.2 Reword and add cross-references per Joao Change Section 27.4.2
LRM-320 SV-CC 27.5.1 Reword usage examples per Joao Change Section 27.5.1
LRM-321 SV-BC 4.2 Fix definition of packed and unpacked arrays per Dave Change Section 4.2
LRM-322 SV-EC 14.1 Clarification from Cliff processed by Arturo Change Section 14.1
LRM-323 SV-EC 14.3 Clarification of #1step from Cliff processed by Arturo Change Section 14.3
LRM-324 SV-EC 15.3 Clarification on skews from Cliff processed by Arturo Change Section 15.3
LRM-325 SV-EC 15.4 Clarification on concatenations from Cliff processed by Arturo Change Section 15.4
LRM-326 SV-EC 15.10 Reword example comment from Cliff processed by Arturo Change Section 15.10
LRM-327 SV Ack This is a reminder for Stu to add back in the 3.0 contributors to the acknowledgments Change Section Ack
LRM-328 SV-CC 26.1.2 Replace sentence per Joao Change Section 26.1.2
LRM-329 SV-CC 26.2 Add new text per Joao Change Section 26.2
LRM-330 SV-CC 26.3 Replace text and examples per Joao Change Section 26.3
LRM-331 SV-CC 26.4.6 Reword per Joao Change Section 26.4.6
LRM-332 SV-CC D.7.7 Reword per Joao Change Section D.7.7
LRM-333 SV-CC D.7.8 Reword per Joao Change Section D.7.8
LRM-334 SV-CC D.8.2 Reword per Joao Change Section D.8.2
LRM-335 SV-CC D.8.3 Reword per Joao Change Section D.8.3
LRM-336 SV-CC D.8.3 Reword comment per Joao Change Section D.8.3
LRM-337 SV-CC D.9.1.3 Reword per Joao Change Section D.9.1.3
LRM-338 SV-CC D.10.3.2 Reword per Joao Change Section D.10.3.2
LRM-339 SV-CC D.10.3.2 Add unsigned to prototype per Joao Change Section D.10.3.2
LRM-340 SV-CC E.1 Rework per Joao Change Section E.1
LRM-341 SV-CC E.1 Rework per Joao Change Section E.1
LRM-342 SV-AC Numerous Changes from Surrendra in PDF/Frame Change PDF
Frame
LRM-343 SV-EC 4.13 Added 4.13 on Associative Array Literals per Arturo Change Section 4.13
LRM-344 SV-CC F.2 Correct cross reference per Francoise Change Section F.2
LRM-345 SV-BC 19.5.2 19.5.4 Bold on keywords from Jonathan Bradford comments per Dave Change Section 19.5.2 Section 19.5.4
LRM-346 SV-BC 4.2 Clarification of shortcut from Jonathan Bradford's comments per Dave Change Section 4.2