AR - Issues 19-34, 19-65.
“Expand variable_assignment to include inc_or_dec assignment and operator_assignment. Then we can simplify the BNF for these assignments. Dan to send a proposal.”
Motivation:
Currently the BNF does not permit the parsing of for loops using the following in the loop’s step assignments:
for (int i = 0; i <= 255; i++) … // this example is taken from section 8.4 in
// the System Verilog LRM
for (int i
= 0; i <= 255; i += 1) …
Although the SV-EC committee addressed the for loop statement I do not think they addressed this issue. The current BNF causes inconsistency between the BNF and the example in the System-Verilog 3.0 LRM.
The Suggested Change:
The general idea is to add the operator assignment and the auto increment/decrement assignment to the variable_assignment syntactic category. (This is similar to the genvar_assignment syntactic category.)
Under A.6.2
Replace: variable_assignment ::= variable_lvalue = expression <bold
=>
With : variable_assignment ::= operator_assignment
| inc_or_dec_expression
This change will enable the
parsing of such statements
for ( var++; var > 50; --var) …
for (var +=4; var < 50; var *= 5) …
assign var++; //
procedural continuous assignment
force var += 5;
release --var;
This proposal, if accepted should
replace the issues listed as SV-BC-19-34 and SV-C-19-65.
AR - Issues 19-48, 19-61, 19-62:
“Is white space allowed between #1 and ms for time_literals? Delayed to get Dave's feedback. Jay found that no space is allowed.
Dan moves that we add two footnotes to the time_literal production to indicate that no white space is allowed between the numbers and the time_unit. He will draft a proposal.”
Motivation :
According the BNF the following statement is ambiguous.
and #1 ps
(out,in1,in2);
The word ‘ps’ can be considered to be a time unit. (Specifying the delay of the and gate to be one Pico-second.). The ‘ps’ word can also stand for the name of the gate instance.
Note that section 2.5 in the LRM resolves this ambiguity by specifying:
“Time is written in integer or fixed point format, followed without a space by a time unit (fs ps ns us ms s)”.
The Suggested Change:
Add a footnote in the BNF indicating that the number of time units may not be followed by a white space, before the time unit.
Under A.8.4
Replace : time_literal ::=
unsigned_number time_unit
| fixed_point_number time_unit
With : time_literal9 ::= <superscript 9>
unsigned_number time_unit
| fixed_point_number time_unit
Under the “NOTES” section (following A.9.5)
Add : 9) The unsigned_number or fixed_point_number in time_literal shall not
be followed by a white space.
This proposal, if accepted should replace the issues listed as SV-BC-19-48, SV-C-19-61, and SV-BC-19-62.
“Dan will determine the proposal to vote on next time.”
Issues 19-49, 19-52, and 19-55 were filed to the ETF as ETF # 181. The ETF # 181 issue is still in the proposal state.
However Issues 19-52 and 19-55 were also filled as part as ETF # 53. The ETF # 53 issue’s status is ‘vsgpassed’.
ETF # 53 also disables the use of a non-constant index operation is a net_lvalue or a variable_lvalue using a concatenation operator. This illegal indexing is demonstrated :
mynet[index] = 1; // this is illegal
{ mynet[index] } = 1; // this is legal according to the BNF.
ETF # 53 suggested fix (http://www.boyd.com/1364_btf/report/full_pr/53.html)
net_lvalue ::=
hierarchical_net_identifier {'['constant_expression']'} ['['constant_range_expression']']
| '{' net_lvalue { ',' net_lvalue } '}'
variable_lvalue ::=
hierarchical_variable_identifier {'['expression']'} ['['range_expression']']
| '{' variable_lvalue { ',' variable_lvalue } '}'
* Eliminate productions:
net_concatenation
net_concatenation_value
variable_concatenation
variable_concatenation_value
My suggestion is to :
The Suggested Change:
Under A.8.5
Replace :
net_lvalue ::=
hierarchical_net_identifier
| hierarchical_net_identifier [ constant_expression ] { [ constant_expression ] }
| hierarchical_net_identifier [ constant_expression ] { [ constant_expression ] }
[ constant_range_expression ]
| hierarchical_net_identifier [ constant_range_expression
]
| hierarchical_net_identifier ( [
constant_expression { , constant_expression } ] )
| net_concatenation
With :
net_lvalue ::=
hierarchical_net_identifier {[constant_expression]} <bold []>
[ [constant_range_expression]
] <internal
[] in bold>
| { net_lvalue { , net_lvalue } } <external
{} in bold> <bold ,>
This change includes issue SV-BC-19-52 and is part of ETF #53.
Replace :
variable_lvalue_item ::=
hierarchical_variable_identifier
| hierarchical_variable_identifier [ expression ] { [ expression ] }
| hierarchical_variable_identifier [ expression ]
{ [ expression ] } [ range_expression ]
| hierarchical_variable_identifier [ range_expression
]
| variable_concatenation
With :
variable_lvalue_item ::=
hierarchical_variable_identifier
{[expression]} <bold
[]>
[ [range_expression]
] <internal
[] in bold>
| { variable_lvalue { , variable_lvalue } } <external
{} in bold> <bold ,>
This change includes issue SV-BC-19-55 and is part of ETF #53 after some adjustments.
Dan Jacobi
Intel