Product Documentation
Virtuoso Studio Design Environment SKILL Reference
Product Version IC23.1, November 2023

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
 ⠀
X