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.