SystemVerilog NonBlocking assignment

  nonblocking assignment  


NonBlocking assignment statements executes in parallel. In NonBlocking assignment all the assignments will occur at the same time. (during the end of simulation time stamp).


  Example-1:  


In Below Example, a and b are initialized with value 10 and 15 respectively, after that b is being assigned to a (a value will become 15), and value 20 is assigned to b. After assignment value of a = 15 and b = 20 but these values will get assigned only after the simulation time-stamp.

module nonblocking_assignment;

  //variables declaration
  int a,b;

  initial begin  //initial block will get executed at starting of simulation
    $display("-----------------------------------------------------------------");
    //initializing a and b
    a = 10;
    b = 15;
 
    //displaying initial value of a and b
    $display("\tBefore Assignment :: Value of a is %0d",a);
    $display("\tBefore Assignment :: Value of b is %0d",b);
 
    a <= b;
    b <= 20;
  
    $display("\tAfter  Assignment :: Value of a is %0d",a);
    $display("\tAfter  Assignment :: Value of b is %0d",b);
    $display("-----------------------------------------------------------------");
  end

  final begin  //final block will get executed at end of simulation
    $display("-----------------------------------------------------------------");
    $display("\tEnd of Simulation :: Value of a is %0d",a);
    $display("\tEnd of Simulation :: Value of b is %0d",b);
    $display("-----------------------------------------------------------------");
  end
    
endmodule

  Simulator output:  

                       -----------------------------------------------------------------
                       Before Assignment :: Value of a is 10
                       Before Assignment :: Value of b is 15
                       After Assignment :: Value of a is 10
                       After Assignment :: Value of b is 15
                       -----------------------------------------------------------------
                       -----------------------------------------------------------------
                       End of Simulation :: Value of a is 15
                       End of Simulation :: Value of b is 20
                       -----------------------------------------------------------------

Execute the above code on 


  Example-2:  



In Below Example, a and b are initialized with value 10 and 15 respectively, x<=a+b  and y<=a+b+x, value of x is sum of a (10) and b (15). therefore x=10+15=25. value of y is sum of a (10) ,b(15)and x (0 -> became at current simulation time-stamp value of x=0, new value will get assigned at the end of current time stamp, and new value will be available only after the current time-stamp). therefore y=10+15+0=25;

module nonblocking_assignment;
  //variables declaration
  int a,b;
  int x,y;
  
  initial begin
    //initializing a and b
    a = 10;
    b = 15;
    
    x <= a + b;
    y <= a + b + x;
    
    $display("-----------------------------------------------------------------");
    $display("\tValue of x is %0d",x);
    $display("\tValue of y is %0d",y);
    $display("-----------------------------------------------------------------");
  end
  
  final begin
    $display("-----------------------------------------------------------------");
    $display("\tEnd of Simulation :: Value of x is %0d",x);
    $display("\tEnd of Simulation :: Value of y is %0d",y);
    $display("-----------------------------------------------------------------");
  end
      

endmodule


  Simulator output:  



                       -----------------------------------------------------------------
                       Value of x is 0
                       Value of y is 0
                       -----------------------------------------------------------------
                       -----------------------------------------------------------------
                       End of Simulation :: Value of x is 25
                       End of Simulation :: Value of y is 25
                       -----------------------------------------------------------------

Execute the above code on