If Statement
  
    
    
     
   
   Definition:
  
   The if
   statement is a statement that depending on the value of one or more
   corresponding conditions, selects for execution one or none of the
   enclosed sequences of statements,. 
  
   Simplified Syntax
  
   if condition then 
  
     sequential_statements 
  
   end if; 
  
   if condition then 
  
     sequential_statements 
  
   else 
  
     sequential_statements 
  
   end if; 
  
   if condition then 
  
     sequential_statements 
  
     elsif condition then 
  
       sequential_statements 
  
     else 
  
       sequential_statements 
  
   end if; 
  
   Description
  
   The if statement controls 
   conditional execution of other sequential statements. It contains at 
   least one Boolean condition (specified after the if
    keyword). The remaining conditions are specified with the elsif clause.
    The else clause is 
   treated as elsif true then. 
   Conditions are evaluated one by one until any of them turns to be 
   true or there are no more conditions to be checked for. When a 
   condition is true then the sequence of statements specified after the then 
   clause is executed. If no condition is met then the control is passed 
   to the next statement after the if statement. 
  
   The if statement can be used 
   in a simplified form, often called if-then 
   statement, where neither elsif nor else 
   clause is supported (example 1). 
  
   In case when meeting a condition should cause some statements to be 
   executed, but when it is not met some other actions should be 
   performed, the else clause 
   is used (example 2). 
  
   The elsif clause is used 
   when different nested conditions have to be checked (example 3). This 
   can be used for prioritizing conditions and signals. 
  
   The if statements can be 
   nested (example 4). 
  
   Examples
  
   Example 1 
  
   I1: if Status_Signal = hold 
         then 
   A1: Outputs <= 'X'; 
       end if I1; 
  
     
   The assignment will be realized only when the condition Status_Signal 
   = hold is true. Otherwise, the statement that follows the end if I1 
   will be executed. 
  
   Example 2 
  
   function AND_FUNC (x, y: in 
   Bit) return Bit is 
   begin 
     I2: if x = '1' and 
   y = '1' 
           then return '1'; 
         else return '0'; 
         end if I2; 
   end AND_FUNC; 
  
     
   When the variables x and y are both equal to '1', then the function 
   returns the value '1'. Otherwise, '0' is returned. 
  
   Example 3 
  
   Signal Code_of_Operation : 
   Bit_Vector(1 downto 0); 
   I3: if Code_of_Operation(1) 
   = '1' 
         then 
   F := Operand_1 + Operand_2; 
       elsif 
   Code_of_Operation(0) = '1' 
         then 
   F := Operand_1 - Operand_2; 
         else 
   F := "00000000"; 
       end if I3; 
  
     
   In this example, the bit number 1 of the Code_of_Operation has a 
   higher priority than bit number 0. When the bit number 1 has a 
   '1'value, then the two operands are added. If not (i.e. it is '0'), 
   then the bit number 0 is checked. If it is '1', then the two operands 
   are subtracted. Otherwise, when both bits of the Code_of_Operation 
   are '0', the F signal is assigned all zeros. 
  
   Example 4 
  
   if Status = RUN 
     then 
       if 
   Code_of_Operation = CONC 
         then 
           F := Operand_1 & 
   Operand_2 ; 
         else 
           F := "00000000"; 
       end if; 
     Output_1 <= F; 
   end if; 
  
     
   Nesting of if statements is legal, but you should be careful not to 
   confuse the statement levels. 
  
   Important Notes
  
   - 
   
    One of the most typical errors with the if 
    statements is to skip the space between end 
    and if, at the end of the 
    statement, and writing it as endif. 
    - 
   
    If is a sequential statement 
    that cannot be used in the concurrent
     statements section of an architecture. If assigning a new 
    value to a signal must be influenced by a specific condition, then a 
    conditional signal assignment should be used (which in turn cannot be 
    used inside processes and procedures). 
     
  
    
 
    |