Net and Terminal Name Syntax
This section describes the name syntax for net and terminal names. The name syntax is in Backus Nour Format (BNF).
|
[ ]
|
Items enclosed in brackets are optional where zero or, at most, one item is present.
|
|
{ }
|
Items enclosed in curly braces are also optional, but zero or more items can be present.
|
|
|
|
The vertical bar means or.
|
|
N
|
Defined as a nonnegative integer less than 64K (65535).
|
|
nameExpr
|
A string containing a name term optionally prefixed with the <*N> construct. This construct is also referred to as a prefix repeat operator. This means the name term is repeated (enumerated) N times. Name expressions can be concatenated to form a comma-separated list.
|
|
nameTerm
|
A base name optionally followed by a vector expression contained in angle brackets. A name term can also be a name expression enclosed in parenthesis.
|
|
baseName
|
A string of printable ASCII characters which does not include reserved special characters such as angle brackets (< >), parentheses (()), comma (,), slash (/), or white space. Parentheses (()) are allowed in a base name only if they enclose a number.
|
|
vectExpr
|
Either a single or repeated vector term. The optional *N suffix on a vector term is called a suffix repeat operator. It indicates N repetitions of each bit of the vector term. The value of N must be greater than zero. Vector expressions can also be concatenated to form a comma-separated list.
|
|
vectTerm
|
A single number or a range of numbers. A range of numbers can be expressed with a starting, ending, and increment number separated by colons. A vector term can also be a vector expression enclosed in parentheses. In this case, the innermost term is expanded first and the repeat operator is then applied to repeat the entire expanded term enclosed in parentheses.
|
Examples:
nameExpr ::= [ < *N > ] nameTerm { , nameExpr }
nameTerm ::= baseName [ < vectExpr > ] | < nameExpr >
vectExpr ::= vectTerm [ *N ] { , vectExpr }
vectTerm ::= N [ : N [ : N ] ] | < vectExpr >
Figure 2-1 illustrates how name and vector expressions are expanded.
Figure -1
Expanded Net/Terminal Names
|
Name
|
Members
|
Expanded format
|
|
clk
|
1
|
clk
|
|
data<2>
|
1
|
data<2>
|
|
<*1>base
|
1
|
base
|
|
<*2>term
|
2
|
term,term
|
|
<*2>(a,b),c
|
5
|
a,b,a,b,c
|
|
<*2>(a,<*2>b)
|
6
|
a,b,b,a,b,b
|
|
b<0:2>
|
3
|
b<0,1,2> or b<0>,b<1>,b<2>
|
|
b<0:2:1>
|
3
|
b<0,1,2>
|
|
b<3:0:2>
|
2
|
b<3,1>
|
|
b<0:2*2>
|
6
|
b<0,0,1,1,2,2,>
|
|
b<(0:2)*2>
|
6
|
b<0,1,2,0,1,2>
|
|
b<0,2*2>
|
3
|
b<0,2,2>
|
|
b<(0,2)*2>
|
4
|
b<0,2,0,2>
|
|
b<0,1:3:4*1,2:2>
|
3
|
b<0,1,2>
|
|
b<0:1,2:2>
|
3
|
b<0,1,2>
|
As shown, the expanded form of a name is semantically equivalent to the original specification. This form is created by expanding the range specifications, applying repeat operators, and removing parentheses.
To determine the Nth member name, use a zero-based counting scheme to find the Nth element in the expanded form. For example, member zero of <*2>(a,<*2>b) is a, member one is b, member two is b, and so on. If the name contains a vector expression, such as b<0:1,2:2>, then member zero in this case is called b<0>, member one is b<1>, and member two is b<2>.
Related Topics
Inherited Connections Functions
Instance Name Syntax
Return to top