• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
      • Fgl
      • Vwsim
      • Vl
        • Syntax
        • Loader
        • Warnings
        • Getting-started
        • Utilities
        • Printer
        • Kit
        • Mlib
          • Scopestack
          • Hid-tools
          • Filtering-by-name
          • Vl-interface-mocktype
          • Stripping-functions
          • Genblob
          • Expr-tools
          • Extract-vl-types
          • Hierarchy
          • Range-tools
          • Finding-by-name
          • Stmt-tools
          • Modnamespace
          • Flat-warnings
          • Reordering-by-name
          • Datatype-tools
          • Syscalls
          • Allexprs
          • Lvalues
            • Lvaluecheck
            • Vl-expr-variable-lvalue-p
            • Vl-expr-net-lvalue-p
              • Vl-exprlist-net-lvalues-p
              • Vl-assignpat-net-lvalue-p
          • Port-tools
        • Transforms
      • X86isa
      • Svl
      • Rtl
    • Software-verification
    • Math
    • Testing-utilities
  • Lvalues
  • Vl-parse-net-lvalue-2012

Vl-expr-net-lvalue-p

Recognizer an expression that is OK for a SystemVerilog-2012 net_lvalue.

Signature
(vl-expr-net-lvalue-p x) → bool
Arguments
x — Guard (vl-expr-p x).

Here's the grammar for net_lvalue:

net_lvalue ::= ps_or_hierarchical_net_identifier constant_select
             | '{' net_lvalue { ',' net_lvalue } '}'
             | [ assignment_pattern_expression_type ] assignment_pattern_net_lvalue

The first production essentially corresponds to our notion of an index expression and the second to concatenation. The third production is quite similar to assignment_pattern_expression, which can be a valid expression primary,

assignment_pattern_expression ::= [ assignment_pattern_expression_type ] assignment_pattern

Except that here we have an assignment_pattern_net_lvalue instead of an assignment_pattern. So let's compare:

assignment_pattern_net_lvalue ::= QUOTE '{' net_lvalue { ',' net_lvalue } '}'

assignment_pattern ::= QUOTE '{' expression { ',' expression } '}'
                     | QUOTE '{' structure_pattern_key ...
                     | QUOTE '{' array_pattern_key ...
                     | QUOTE '{' constant_expression '{' ...

So essentially the grammar is just trying to (1) rule out the fancier structure/array/replication assignment patterns while still allowing basic positional assignment patterns, and (2) ensure that all of the expressions within the assignment pattern here happen to be good net_lvalues. We'll recognize these expressions with vl-expr-net-lvalue-p.

Subtopics

Vl-exprlist-net-lvalues-p
Vl-assignpat-net-lvalue-p