Section 3.7, 3.8, 8.13, 8.13.1, 8.13.2, 32.39, A.6.8, A.8.5,
Index
Assignment patterns as lvalues
In 8.13, REPLACE
An assignment pattern is
built from braces, keys, and expressions and is prefixed with an apostrophe. For
example:
var int A[N] =
'{default:1};
var integer i = '{31:1, 23:1, 15:1, 8:1,
default:0};
typedef struct
{real
r, th;} C;
var C x = '{th:PI/2.0,
r:1.0};
A positional notation without keys can also be used. For example:
var int B[4] = '{a,
b, c, d};
var C y = '{1.0,
PI/2.0};
WITH
An
assignment pattern specifies a correspondence between a collection of
expressions and the fields and elements in a data object or data value. An assignment pattern has no
self-determined data type, but can be used as one of the sides in an
assignment-like context (see below) when the other side has a self-determined
data type. An assignment pattern is built from
braces, keys, and expressions and is prefixed with an apostrophe. For
example:
var int A[N] =
'{default:1};
var integer i = '{31:1, 23:1, 15:1, 8:1,
default:0};
typedef struct
{real
r, th;} C;
var C x = '{th:PI/2.0,
r:1.0};
var real
y,
z;
A positional notation without keys can also be used. For example:
var int B[4] = '{a,
b, c, d};
var C y = '{1.0,
PI/2.0};
'{a,
b, c, d} = B;
When an
assignment pattern is used as the left-hand side of an assignment-like context,
the positional notation shall be required and each member expression shall have
a bit-stream data type that is assignment compatible with and has the same
number of bits as the data type of the corresponding element on the right-hand
side.
Neither a static cast
nor a default correspondence between an expression in an assignment pattern and
a field or element in a data object shall be considered an assignment-like
context.
An assignment pattern
can be used to construct a structure or array value by prefixing the pattern
with the name of a data type to form an assignment pattern expression that
yields the value that a variable of the data type would hold if it were
initialized using the assignment pattern.
typedef logic
[1:0] [3:0]
T;
shortint'({T'{1,2}, T'{3,4}}) //
yields 16'sh1234
WITH
Neither a static cast nor a
default correspondence between an expression in an assignment pattern and a
field or element in a data object shall be considered an assignment-like
context. No other contexts shall be considered assignment-like
contexts. In particular, none of
the following shall be considered assignment-like
contexts:
-- A static
cast
-- A default correspondence
between an expression in an assignment pattern and a field or element in a data
object
-- A port expression in a
module, interface or program declaration
-- The passing of a value to
a subroutine ref port
-- A port connection to an
inout or ref port of a module, interface or program
An assignment pattern can be
used to construct a structure or array value by prefixing the pattern with the
name of a data type to form an assignment pattern expression that yields the
value that a variable of the data type would hold if it were initialized using
the assignment pattern.
An assignment pattern can be used to construct
or deconstruct a structure or array by prefixing the pattern with the name of a
data type to form an assignment pattern expression. Unlike an assignment pattern, an
assignment pattern expression has a self-determined data type and is not
restricted to being one of the sides in an assignment-like context. When an assignment pattern expression is
used in a right-hand side expression, it shall yield the value that a variable
of the data type would hold if it were initialized using the assignment
pattern.
typedef logic
[1:0] [3:0]
T;
shortint'({T'{1,2}, T'{3,4}}) //
yields 16'sh1234
When an assignment pattern
expression is used in a left-hand side expression, the positional notation shall
be required and each member expression shall have a bit-stream data type that is
assignment compatible with and has the same number of bits as the corresponding
element in the data type of the assignment pattern expression. If the right-hand
side expression has a self-determined data type, then it shall be assignment
compatible with and have the same number of bits as the data type of the
assignment pattern expression.
typedef
byte
U[3];
var
U A = '{1, 2,
3};
var
byte a, b,
c;
U'{a, b, c} =
A;
U'{c, a, b} =
'{a+1, b+1, c+1};
An assignment pattern
expression shall not be used in a port expression in a module, interface or
program declaration.
In A.6.8, ADD
assignment_pattern_net_lvalue ::=
'{ net_lvalue {, net_value }
}
assignment_pattern_variable_lvalue ::=
'{ variable_lvalue {, variable_value }
}
In A.8.5, in net_lvalue, ADD
|
[ assignment_pattern_expression_type ] assignment_pattern_net_lvalue
In A.8.5, in variable_lvalue, ADD
|
[ assignment_pattern_expression_type ]
assignment_pattern_variable_lvalue
In 8.13, in the definition of
assignment-like context, REPLACE
A port connection to an input port of a
module, interface, or program
WITH
A port connection to an input
or output port of a module, interface, or
program
WITH
The passing of a value to a subroutine input, output or inout port
AND REPLACE
A non-default
correspondence between an expression in an assignment pattern and a field or
element in a data object
WITH
A non-default
correspondence between an expression in an assignment pattern and a field or
element in a data object or data
value
In 8.13, REPLACE
nor a default correspondence between an
expression in an assignment pattern and a field or element in a data
object
WITH
nor a default correspondence between an
expression in an assignment pattern and a field or element in a data object
or data value
In 8.13.1,
REPLACE
Verilog uses concatenation braces to
construct simple bit vectors. SystemVerilog adds a similar syntax to support the
construction of arrays.
Verilog uses concatenation braces to
construct and deconstruct simple bit vectors.
SystemVerilog adds a similar syntax to support the construction and deconstruction of arrays.
In 8.13.2,
REPLACE
A structure value can be constructed with
a structure assignment pattern built from member expressions using braces and
commas, with the members in declaration order.
A structure value can be constructed and deconstructed with a structure assignment pattern
built from member expressions using braces and commas, with the members in
declaration order.
In 3.7,
REPLACE
Array literals are
array assignment patterns with constant member expressions (see 8.13.1). An
array literal must have a type, which may be either explicitly indicated with a
prefix or implicitly indicated by an assignment-like
context.
WITH
Array literals are
array assignment patterns or pattern
expressions with constant member expressions (see 8.13.1). An array
literal must have a type, which may be either explicitly indicated with a prefix
or implicitly indicated by an assignment-like context.
In 3.8,
REPLACE
Structure literals
are structure assignment patterns with constant member expressions (see 8.13.2).
A structure literal must have a type, which may be either explicitly indicated
with a prefix or implicitly indicated by an assignment-like context (see
4.14).
WITH
Structure literals are
structure assignment patterns or pattern
expressions with constant member expressions (see 8.13.2). A structure
literal must have a type, which may be either explicitly indicated with a prefix
or implicitly indicated by an assignment-like context (see 4.14).
In 32.39, in bullet 5,
REPLACE
when the curly braces of the assignment pattern are prefixed by a
data type name.
WITH
when the curly braces of the assignment pattern are prefixed by a data
type name to form an assignment pattern
expression.
In 32.39, in bullet 6,
REPLACE
Nesting of assignment
pattern expressions shall be preserved.
WITH
Nesting of assignment
pattern expressions patterns shall be preserved.
In 32.39, in bullet 6,
REPLACE
The assignment
pattern that initializes the struct variable ABC uses member, type and default keys. The
vpiOperand
traversal would
represent this assignment pattern expression as:
WITH
The assignment pattern that
initializes the struct variable ABC uses member, type and default keys. The
vpiOperand
traversal would
represent this assignment pattern expression as:
In 32.39, in bullet 6,
REPLACE
or some other
equivalent positional assignment pattern expression.
WITH
or some other equivalent
positional assignment pattern expression.
In 32.39, in bullet 6,
REPLACE
The assignment
pattern which initializes the array variable varr uses index and default keys. The
vpiOperand
traversal would
represent this assignment pattern expression
WITH
The assignment pattern which
initializes the array variable varr uses index and default keys. The
vpiOperand
traversal would
represent this assignment pattern expression
In 32.39, in bullet 7,
REPLACE
For the assignment
pattern expression ’{2{y}},
WITH
For the assignment pattern
expression ’{2{y}},
In the Index, ADD
references to "assignment pattern" and "assignment pattern expression" that
point to 8.13.