Mantis 2097

P1800-2008/D4

Sections 6.5, 10.6.1, 10.6.2

Clarify and correct text dealing with deassign and release of variables driven by continuous assignments

 

Modify the text in 6.5 Nets and variables

For the purposes of the preceding rule, a declared variable initialization or a procedural continuous

assignment is considered a procedural assignment. A force statement is neither a continuous nor a

procedural assignment. A release statement shall not change the variable until there is another

procedural assignment or shall schedule a reevaluation of the continuous assignment driving it. A single

force or release statement shall not be applied to a whole or part of a variable that is being assigned by

a mixture of continuous and procedural assignments.

 

Modify the text in 10.6.1 The assign and deassign procedural statements

REPLACE

The assign procedural continuous assignment statement shall override all procedural assignments or

continuous assignment to a variable. The deassign procedural statement shall end a procedural

continuous assignment to a variable. The value of the variable shall remain the same until the variable is

assigned a new value through a procedural assignment, or a procedural continuous assignment, or the next

time a continuous assignment driving the variable is evaluated. The assign and deassign procedural

statements allow, for example, modeling of asynchronous clear/preset on a D-type edge-triggered flip-flop,

where the clock is inhibited when the clear or preset is active.

 

The left-hand side of the assignment in the assign statement shall be a variable reference or a concatenation

of variables. It shall not be an unpacked array reference or a bit-select or a part-select of a variable.

 

WITH:

The assign procedural continuous assignment statement shall override all procedural assignments or

continuous assignment to a variable. The deassign procedural statement shall end a procedural

continuous assignment to a variable. The value of the variable shall remain the same until the variable is

assigned a new value through a procedural assignment, or a procedural continuous assignment, or the next

time a continuous assignment driving the variable is evaluated. The assign and deassign procedural

statements allow, for example, modeling of asynchronous clear/preset on a D-type edge-triggered flip-flop,

where the clock is inhibited when the clear or preset is active.

 

The left-hand side of the assignment in the assign statement shall be a singular variable reference or a

concatenation of variables. It shall not be an unpacked array reference or a bit-select or a part-select of a

variable.

 

Modify the text in 10.6.2 The force and release procedural statements.

REPLACE:

Another form of procedural continuous assignment is provided by the force and release procedural

statements. These statements have a similar effect to the assign-deassign pair, but a force can be

applied to nets as well as to variables. The left-hand side of the assignment can be a variable, a net, a

constant bit-select of a vector net, a part-select of a vector net, or a concatenation. It cannot be a an

unpacked array reference or a bit-select or a part-select of a vector variable.

 

A force statement to a variable shall override a procedural assignment, continuous assignment or an

assign procedural continuous assignment to the variable until a release procedural statement is

executed on the variable. When released, then if the variable does not currently have an active assign

procedural continuous assignment, the variable shall not immediately change value. The variable shall

maintain its current value until the next procedural assignment or procedural continuous assignment to the

variable, or the next time a continuous assignment driving the variable is evaluated. Releasing a variable

that currently has an active assign procedural continuous assignment shall immediately reestablish that

assignment.

 

WITH:

Another form of procedural continuous assignment is provided by the force and release procedural

statements. These statements have a similar effect to the assign-deassign pair, but a force can be

applied to nets as well as to variables. The left-hand side of the assignment can be a reference to a singular

variable, a net, a constant bit-select of a vector net, a constant part-select of a vector net, or a concatenation

of these. It cannot be a an unpacked array reference or shall not be a bit-select or a part-select of a vector

variable. A force or release statement shall not be applied to a variable that is being assigned by a mixture of continuous and procedural assignments.

 

A force statement to a variable shall override a procedural assignment, continuous assignment or an

assign procedural continuous assignment to the variable until a release procedural statement is

executed on the variable. When released, then if the variable does not currently have an active assign

procedural continuous assignment, the variable shall not immediately change value. The variable shall

maintain its current value until the next procedural assignment or procedural continuous assignment to the

variable, or the next time a continuous assignment driving the variable is evaluated. Releasing a variable

that currently has an active assign procedural continuous assignment shall immediately reestablish that

assignment. When released, then if the variable is not driven by a continuous assignment and does not currently have an active assign procedural continuous assignment, the variable shall not immediately change value and shall maintain its current value until the next procedural assignment. Releasing a variable that is driven by a continuous assignment or currently has an active assign procedural continuous assignment shall cause a reevaluation and reestablish that assignment.