Process Statement
  
    
    
     
   
   Formal Definition
  
   A process statement defines an
   independent sequential process representing the behavior of some
   portion of the design. 
  
   Simplified Syntax
  
   [process_label:] process [ ( 
   sensitivity_list ) ] [ is ] 
  
       process_declarations 
  
       begin 
  
        sequential_statements 
  
       end process
    [ process_label ] ; 
  
   Description
  
   The process statement represents the behavior of some portion of the 
   design. It consists of the sequential statements whose execution is 
   made in order defined by the user. 
  
   Each process can be assigned an optional label. 
  
   The process declarative part defines local items for the process and 
   may contain declarations of: subprograms, types, subtypes, constants, 
   variables, files, aliases, attributes, use clauses and group 
   declarations. It is not allowed to declare signals or shared 
   variables inside processes. 
  
   The statements, which describe the behavior in a process, are 
   executed sequentially, in the order in which the designer specifies 
   them. The execution of statements, however, does not terminate with 
   the last statement in the process, but is repeated in an infinite 
   loop. The loop can be suspended 
   and resumed with wait 
   statements. When the next statement to be executed is a wait 
   statement, the process suspends its execution until a condition 
   supporting the wait statement is met. See respective topics for details. 
  
   A process declaration may contain optional sensitivity list. The list 
   contains identifiers of signals to which the process is sensitive. A 
   change of a value of any of those signals causes the suspended 
   process to resume. A sensitivity list is a full equivalent of a wait
    on sensitivity_list statement at the end of the process. It 
   is not allowed, however, to use wait statements and sensitivity list 
   in the same process. In addition, if a process with a sensitivity 
   list calls a procedure, then the procedure cannot contain any wait statements. 
  
   Examples
  
   Example 1 
  
   entity D_FF is 
   port (D,CLK : in BIT; 
         Q : out 
   BIT := '0'; 
         NQ : out 
   BIT := '1' ); 
   end entity D_FF; 
   architecture A_RS_FF of 
   D_FF is 
   begin 
     BIN_P_RS_FF: process (CLK) 
     begin 
       if 
   CLK = '1' and CLK'Event then 
         Q <= D; 
         NQ <= not D; 
       end if; 
     end process; 
   end architecture A_RS_FF; 
  
     
   The flip-flop has two input ports: D, CLK and two output ports: Q and 
   NQ. The value of the input signal D is assigned to the output Q when 
   the value of the CLK changes from '0' to '1'. The change of the 
   signal value initiates the process BIN_P_RS_FF, because the signal 
   CLK is on the sensitivity list of this process. The change of the CLK 
   value from the logical zero to the logical one is sensed by the use 
   of the if statement. 
  
   The first part of if statement 
   takes place when the actual value of the signal CLK is checked. The 
   second part confirms that the signal CLK really changes its value 
   (attribute 'Event is responsible for that). In the case when the 
   logical value of this condition is TRUE, then the two assignment 
   signal statement are executed. 
  
   Important Notes
  
  
    
 
    |