Guard
Formal Definition
A Boolean-valued expression
associated with a block statement that controls assignments to
guarded signals within a block. A guard expression defines an
implicit signal GUARD that may be used to control the operation of
certain statements within the block.
Simplified Syntax
some_signal_in_a_block <= guarded
expression;
Description
The characteristic feature of the block statement is the guard
expression. It is a logical expression of the Boolean type, declared
implicitly after the reserved word block
whenever a guarded expression appears inside the block (Example 1).
The guard expression
implies a signal named 'guard' at the beginning of the block
declaration part. This signal can be read as any other signal inside
the block statement but no assignment statement cant update it. This
signal is visible only within the given block. Whenever a transaction
occurs on any of the signals on the right hand side of the guard
expression, the expression is evaluated and the 'guard'
signal is immediately updated. The 'guard' signal takes on the TRUE
value when the value of the guard
expression is true. Otherwise, 'guard' takes on the FALSE value.
The 'guard' signal may also be declared explicitly as a Boolean
signal in the block statement. The advantage of this approach is that
more complex (than a simple Boolean expression) algorithm to control
the guard signal can be used. In particular, a separate process
(Example 2) can drive the guard signal.
If there is no guard
expression and the guard signal is not declared explicitly, then by
default the guard signal is always true.
The guard signal is used to control so called guarded concurrent
signal assignment statements contained inside the block. Each such
statement contains the reserved word guard
placed after the symbol "<=". They assign a new value to
the signal only when the guard signal is true. Otherwise, the signal
assignment statement does not change the value of the given signal.
In Example 1, the signal OUT_1 will take on the value of not
IN_1 only when the value of the expression CLS'EVENT and
CLK='1' will be true.
Examples
Example 1
RISING_EDGE : block
(CLK'EVENT and CLK='1')
begin
OUT_1 <= guarded not
IN_1 after 5 ns;
..................................
end block RISING_EDGE;
The assignment to the signal OUT_1 is guarded, which introduces the
implicit GUARD signal into the block.
Example 2
ALU : block
signal GUARD: Boolean := False;
begin
OUT_1 <= guarded not
IN_1 after 5 ns;
..............................
P_1: process
begin
GUARD <= True;
...............
end process P_1;
end block
ALU;
Signal GUARD is declared explicitly and can be assigned value like
any other signal.
Important Notes
|