┃ a = b; ┃ out_d = 0; ▼ {carry, sum} = in + sum_in;
非阻塞语句 <=
非阻塞语句 <= 使您可以调度作业而不会阻塞过程流。
每当您想在同一时间步内进行多个寄存器分配而无需考虑顺序或相互依赖性时,都可以使用非阻塞过程语句。
这意味着非阻塞语句比阻塞分配更类似于实际硬件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
module block_nonblock(); reg a, b, c, d , e, f ;
// 阻塞赋值 initialbegin a = #101'b1; // 模拟时,模拟器将在 10 时刻把 1 赋给 a b = #201'b0; // 模拟时,模拟器将在 30 时刻把 0 赋给 b c = #401'b1; // 模拟时,模拟器将在 70 时刻把 1 赋给 c end // 非阻塞赋值 initialbegin d <= #101'b1; // 模拟时,模拟器将在 10 时刻把 1 赋给 a e <= #201'b0; // 模拟时,模拟器将在 20 时刻把 1 赋给 b f <= #401'b1; // 模拟时,模拟器将在 40 时刻把 1 赋给 c end
endmodule
例子 - 阻塞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
module blocking (clk,a,c); input clk; input a; output c; wire clk; wire a; reg c; reg b; always @ (posedge clk ) begin b = a; c = b; end endmodule
综合后的输出
综合后的输出
例子 - 非阻塞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
module nonblocking (clk,a,c); input clk; input a; output c; wire clk; wire a; reg c; reg b; always @ (posedge clk ) begin b <= a; c <= b; end endmodule