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
  
  
    
 
    |