Net Data Types

Formal Definition

Nets are data types that can be used to model physical connections.

Simplified Syntax

Net declaration:

wire range delays list_of_identifiers;

wand range delays list_of_identifiers;

wor range delays list_of_identifiers;

tri range delays list_of_identifiers;

triand range delays list_of_identifiers;

trior range delays list_of_identifiers;

tri0 range delays list_of_identifiers;

tri1 range delays list_of_identifiers;

supply0 range delays list_of_identifiers;

supply1 range delays list_of_identifiers;

trireg strength range delays list_of_identifiers;

Net declaration assignment:

wire strength range delays list_of_identifiers = expression;

wand strength range delays list_of_identifiers = expression;

wor strength range delays list_of_identifiers = expression;

tri strength range delays list_of_identifiers = expression;

triand strength range delays list_of_identifiers = expression;

trior strength range delays list_of_identifiers = expression;

tri0 strength range delays list_of_identifiers = expression;

tri1 strength range delays list_of_identifiers = expression;

supply0 strength range delays list_of_identifiers = expression;

supply1 strength range delays list_of_identifiers = expression;

trireg strength range delays list_of_identifiers = expression;

Description

Net data types are used to model physical connections. They do not store values (there is only one exception - trireg, which stores a previously assigned value). The net data types have the value of their drivers. If a net variable has no driver, then it has a high-impedance value (z).

Nets can be declared in a net declaration statement (Example 1) or in a net declaration assignment (Example 2).

Net declarations can contain strength declarations, which specifies the strength of the logic values driven by the net (see Strengths for more details). The range declaration is used to specify multi-bit nets (vectors). The delays are used to specify propagation delays through the nets. The strength, delay and range declarations are optional.

Wire and tri nets.

Both wire net and tri net are identical. Two different names are used for more readability. Preferably wire nets may be used if a net has only one driver. If a net has more than one driver, then tri net may be used instead.

 

0

1

x

z

0

0

x

x

0

1

x

1

x

1

x

x

x

x

x

z

0

1

x

z

Table 8: Truth table for wire and tri nets

This table applies only to wire and tri nets driven by multiple drivers that have no strength declaration or their strengths are equal.

Wand and triand nets.

These net types are wired and nets. It means that if one of their drivers is 0 then the result value will also be 0.

 

0

1

x

z

0

0

0

0

0

1

0

1

x

1

x

0

x

x

x

z

0

1

x

z

Table 9: Truth table for wand and triand nets

This table applies only to wand and triand nets driven by multiple drivers that have no strength declaration, or their strengths are equal.

Wor and trior nets.

These net types are wired or nets. It means that if one of their drivers has a value of 1, then the result value will also be 1.

 

0

1

x

z

0

0

1

x

0

1

1

1

1

1

x

x

1

x

x

z

0

1

x

z

Table 10: Truth table for wor and trior nets

This table applies only to wor and trior nets driven by multiple drivers that have no strength declaration, or their strengths are equal.

Tri0 and tri1 nets.

These nets are used to model resistive pulldown and pullup devices. If a tri0 net has no driver its value is 0. If a tri1 net has no driver, then its value is 1. These values have pull strength.

 

0

1

x

z

0

0

x

x

0

1

x

1

x

1

x

x

x

x

x

z

0

1

x

0

Table 11: Truth table for tri0 net

 

0

1

x

z

0

0

x

x

0

1

x

1

x

1

x

x

x

x

x

z

0

1

x

1

Table 12: Truth table for tri1 nets

Supply0 and supply1 nets.

These nets are used to model power supplies in the circuit. They should have supply strength.

Trireg nets.

The trireg nets are used to model net capacity. If the trireg net driver has 0, 1, or x value, then it becomes a trireg net value and its strength can be one of the drive strengths, depending on the driver strength. If the driver has a z value, then the trireg net keeps the previously driven value and the strength can be one of the charge strengths, depending on the strength specified during net declaration.

Examples

Example 1

wire [7:0] a;
tri tristate_buffer;
wand #5 sig_1;
trireg (small) t;

The 'a' variable is a 8-bit wire net.

The 'tristate_buffer' is 1-bit tri net type variable.

The 'sig_1' variable is 1-bit wand net type variable, which propagates driven value to its output in 5 time units.

The 't' variable is trireg net variable with small charge strength.

Example 2

reg a;
wire [3:0] b;
wor (strong1, weak0) wired_or = a;
trior (pull1, weak0) [3:0] #(5:3:4) vect = b;

The 'wired_or' variable is a 1-bit wor net type variable that has specified strengths (strong1 when its value is 1 and weak0 when its value is 0).

The 'vect' variable is a 4-bit trior net type variable that has pull and weak strengths and 3 delay parameters.

Important Notes

  • Nets cannot be used as left-hand value of procedural assignments.
  • If the trireg net is not driven, then it has charge strength. Otherwise it has the strength of its driver.

No comments:

Post a Comment

Please provide valuable comments and suggestions for our motivation...

Popular Posts