nonblocking assignment
- non-blocking assignment statements execute in parallel
- In the non-blocking assignment, all the assignments will occur at the same time. (during the end of simulation timestamp)
Nonblocking assignment example
In the below example,
a and b are initialized with values 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 values expected in a and b are 15 and 20 respectively.
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 -----------------------------------------------------------------
Nonblocking assignment example-2
In the 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). -> 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 -----------------------------------------------------------------
