Vl-expr
Representation of a single SystemVerilog expression.
This is a tagged union type, introduced by deftagsum.
Member Tags → Types
- :vl-literal → vl-literal
- A literal value of any kind, such as integer constants, string
literals, time literals, real numbers, etc.
- :vl-index → vl-index
- A reference to some part of something that is somewhere in the
design. Could be a simple wire name like foo, or something
much fancier with scoping, hierarchy, indexing, and part-selects
like ape::bat::cat.dog[3][2][1].elf[6][5][10:0].
- :vl-unary → vl-unary
- A simple unary operator applied to some argument, like &a or -b.
- :vl-binary → vl-binary
- A simple binary operator applied to some arguments, like a +
b or a & b.
- :vl-qmark → vl-qmark
- A ternary/conditional operator, e.g., a ? b : c.
- :vl-concat → vl-concat
- A basic concatenation expression, e.g., {a, b, c}.
- :vl-multiconcat → vl-multiconcat
- A multiple concatenation (a.k.a. replication) expression, e.g., {4{a,b,c}}.
- :vl-bitselect-expr → vl-bitselect-expr
- A bit select operator applied to an expression. Typically the subexpression is some sort of concatenation, since this is what the SystemVerilog grammar allows. E.g. {sub}[idx].
- :vl-partselect-expr → vl-partselect-expr
- A part select operator applied to an expression. Typically the subexpression is some sort of concatenation, since this is what the SystemVerilog grammar allows. E.g. {sub}[idx].
- :vl-mintypmax → vl-mintypmax
- A minimum/typical/maximum delay operator, e.g., 3 : 4 : 5.
- :vl-call → vl-call
- A call of a function or a system function, e.g., myencode(foo,
3) or $bits(foo_t).
- :vl-stream → vl-stream
- A streaming concatenation (pack or unpack) operation, e.g.,
{<< 16 {a,b,c}}.
- :vl-cast → vl-cast
- A casting expression, e.g., int'(2.0 * 3.0).
- :vl-inside → vl-inside
- A set membership inside operator, e.g., a inside { 5, [16:23] }.
- :vl-tagged → vl-tagged
- A tagged union expression, e.g., tagged Some (12+34) or tagged None.
- :vl-pattern → vl-pattern
- A (possibly typed) assignment pattern expression, for instance,
'{a:1, b:2} or foo_t'{head+1, tail-1}.
- :vl-special → vl-special
- Representation of a few special things like $, null, etc.
- :vl-eventexpr → vl-eventexpr
- Representation of an event expression, e.g., @(posedge foo).
For more general background, see expressions-and-datatypes
and new-expression-representation. Also note that there are
many functions for working with expressions throughout mlib;
see especially expr-tools.
Subtopics
- Vl-expr-p
- Recognizer for vl-expr structures.
- Vl-expr->atts
- Get the attributes from any expression.
- Vl-index
- A reference to some part of something that is somewhere in the
design. Could be a simple wire name like foo, or something
much fancier with scoping, hierarchy, indexing, and part-selects
like ape::bat::cat.dog[3][2][1].elf[6][5][10:0].
- Vl-call
- A call of a function or a system function, e.g., myencode(foo,
3) or $bits(foo_t).
- Vl-exprsign
- An indication of an integer expression's signedness (signed or
unsigned).
- Vl-maybe-expr
- Option type; vl-expr or nil.
- Vl-stream
- A streaming concatenation (pack or unpack) operation, e.g.,
{<< 16 {a,b,c}}.
- Vl-expr-case
- Case macro for the different kinds of vl-expr structures.
- Vl-pattern
- A (possibly typed) assignment pattern expression, for instance,
'{a:1, b:2} or foo_t'{head+1, tail-1}.
- Vl-literal
- A literal value of any kind, such as integer constants, string
literals, time literals, real numbers, etc.
- Vl-binary
- A simple binary operator applied to some arguments, like a +
b or a & b.
- Vl-expr-update-atts
- Change the attributes of any expression.
- Vl-unary
- A simple unary operator applied to some argument, like &a or -b.
- Vl-special
- Representation of a few special things like $, null, etc.
- Vl-qmark
- A ternary/conditional operator, e.g., a ? b : c.
- Vl-inside
- A set membership inside operator, e.g., a inside { 5, [16:23] }.
- Vl-cast
- A casting expression, e.g., int'(2.0 * 3.0).
- Vl-multiconcat
- A multiple concatenation (a.k.a. replication) expression, e.g., {4{a,b,c}}.
- Vl-mintypmax
- A minimum/typical/maximum delay operator, e.g., 3 : 4 : 5.
- Vl-partselect-expr
- A part select operator applied to an expression. Typically the subexpression is some sort of concatenation, since this is what the SystemVerilog grammar allows. E.g. {sub}[idx].
- Vl-bitselect-expr
- A bit select operator applied to an expression. Typically the subexpression is some sort of concatenation, since this is what the SystemVerilog grammar allows. E.g. {sub}[idx].
- Vl-tagged
- A tagged union expression, e.g., tagged Some (12+34) or tagged None.
- Vl-concat
- A basic concatenation expression, e.g., {a, b, c}.
- Vl-expr-equiv
- Basic equivalence relation for vl-expr structures.
- Vl-eventexpr
- Representation of an event expression, e.g., @(posedge foo).
- Vl-expr-kind
- Get the kind (tag) of a vl-expr structure.
- Vl-exprlist
- A list of vl-expr-p objects.
- Vl-maybe-exprlist
- A list of vl-maybe-expr-p objects.
- Vl-expr-fix
- Fixing function for vl-expr structures.
- Vl-expr-count
- Measure for recurring over vl-expr structures.