As their names imply, Non blocking assignments allow concurrent execution while blocking assignments execute sequentially.
Take Nandland’s explanation for example:
In C, “The second line is only allowed to be executed once the first line is complete.” This is used as an example or analogy to blocking statements in HDL.
He then uses an example of 3 non blocking vs 3 blocking statements inside an always block yet says it will take 3 clock cycles for the non blocking example to execute the third statement whereas the blocking assignments “immediately” confer the their value to the next register.
always @(posedge i_clock)
begin
r_Test_1 <= 1'b1;
r_Test_2 <= r_Test_1;
r_Test_3 <= r_Test_2;
end
// versus:
always @(posedge i_clock)
begin
r_Test_1 = 1'b1;
r_Test_2 = r_Test_1;
r_Test_3 = r_Test_2;
end
It seems to me like their names should be switched. Where is my misconception? Why name the assignments non blocking in sequential logic when sequential statements patently block succeeding statements from being executed as they are SEQUENTIAL statements?