Vl-cycledelayrange
Representation of cycle delay ranges in SystemVerilog sequences.
This is a product type introduced by defprod.
Fields
- left — vl-expr
- The left-hand side expression. Examples: left is 5 in ##5,
10 in ##[10:20], 0 in ##[*], and 1 in ##[+].
Supposed to be a constant expression that produces a non-negative
integer value.
- right — vl-maybe-expr
- The right-hand side expression, if applicable. Note that our
expression representation allows us to directly represent $ as
a vl-keyguts atom, so in case of ranges like ##[1:$],
right is just the expression for $. Other examples:
right is nil in ##5, 20 in ##[10:20], $
in ##[*], and $ in ##[+]. Supposed to be a constant
expression that produces a non-negative integer value that is at
least as large as left.
See SystemVerilog-2012 Section 16.7. This is essentially our
representation of the following grammar rules:
cycle_delay_range ::= '##' constant_primary
| '##' '[' cycle_delay_const_range_expression ']'
| '##[*]'
| '##[+]'
cycle_delay_const_range_expression ::= constant_expression ':' constant_expression
| constant_expression ':' '$'
Note (page 346) that the expressions here (constant_primary or
constant_expressions) are supposed to be determined at compile time and result
in nonnegative integer expressions. The $ token means the end of
simulation, or for formal verification tools indicates a finite but unbounded
range. The right-hand side expression is supposed to be greater than or equal
to the left-hand side expression.
Some of this syntax is unnecessary:
- The syntax ##[*] just means ##[0:$]
- The syntax ##[+] just means ##[1:$]
Accordingly in our internal representation we don't bother with these, but
instead just translate them into 0,$ or 1,$ ranges.
Subtopics
- Vl-cycledelayrange-fix
- Fixing function for vl-cycledelayrange structures.
- Vl-cycledelayrange-equiv
- Basic equivalence relation for vl-cycledelayrange structures.
- Make-vl-cycledelayrange
- Basic constructor macro for vl-cycledelayrange structures.
- Vl-cycledelayrange->right
- Get the right field from a vl-cycledelayrange.
- Vl-cycledelayrange->left
- Get the left field from a vl-cycledelayrange.
- Change-vl-cycledelayrange
- Modifying constructor for vl-cycledelayrange structures.
- Vl-cycledelayrange-p
- Recognizer for vl-cycledelayrange structures.