Procedural Assignments
  
    
    
     
   
   Formal Definition
  
   The procedural assignments enable updating registers. 
  
   Simplified Syntax
  
   register_identifier = expression; 
  
   register_identifier <= expression; 
  
   Description
  
   The procedural assignments can be used only within the structured 
   procedures (always, initial, task, function). 
  
   The left-hand side of assignment should be one of the following: 
  
   - 
   
    Register. 
    - 
   
    Bit-select of register. 
    - 
   
    Part-select of reg, integer,
     or time data type. 
    - 
   
    Memory word. 
    - 
   
    Concatenation of any of the above. 
     
  
   The Verilog HDL contains two types of procedural assignments 
   statements: blocking (Example 1)
    and non-blocking (Example 2)
    procedural assignments. 
  
   If a current statement contains a blocking procedural assignment then 
   the next statement will be executed after the execution of the 
   current statement (in the next step of the simulation). 
  
   If a current statement contains a non-blocking procedural assignment 
   then the next statement will be executed at the same time (in the 
   same step of the simulation). 
  
   A block of statements with non-blocking procedural assignments has 
   similar functionality as a group of statements within a fork-join 
   block (Example 3). 
  
   Examples
  
   Example 1 
  
   begin 
     a = 1; 
     #10 a = 0; 
     #5 a = 4; 
   end 
  
   During the simulation, this block will be executed in 15 time units. 
   At time 0 the 'a' variable will be 1, at time 10 the 'a' variable 
   will be 0, and at time 15 (#10 + #5) the 'a' variable will be 4. 
  
   Example 2 
  
   begin 
     a <= 1; 
     #10 a <= 0; 
     #5 a <= 4; 
   end 
  
   During the simulation this block will be executed in 10 time units. 
   At time 0 the 'a' variable will be 1, at time 5 the 'a' variable will 
   be 4, and at time 10 the 'a' variable will be 0. 
  
   Example 3 
  
   fork 
     a = 1; 
     #10 a = 0; 
     #5 a = 4; 
   join 
  
   This fork-join block has the same functionality as the block with 
   non-blocking assignments from example 2. 
  
   Important Notes
  
  
    
 
    |