用于阻塞分配的verilog硬件解释

用于阻塞分配的verilog硬件解释,verilog,Verilog,硬件是否以相同的方式解释两个verilog代码 非阻塞代码: module nonblock (input logic clock); logic a, b, c; always @(posedge clock) begin a <= b; b <= c; end endmodule module block (input logic clock); logic a, b, c; always @(posedge clock) begi

硬件是否以相同的方式解释两个verilog代码

非阻塞代码:

module nonblock (input logic clock);   
logic a, b, c;

always @(posedge clock)  
begin 
   a <= b;  
   b <= c;
end  
endmodule
module block (input logic clock);   
logic a, b, c;

always @(posedge clock)  
begin 
   a = b;  
   b = c;
end  
endmodule

它们不会以同样的方式合成。使用阻塞分配的代码将在一行中创建两个触发器。使用非阻塞分配的代码只会在一个时钟周期内将a分配给c。您可以在模拟中验证这一点


这里有更多关于

的信息,在这种情况下,您可能会得到相同的硬件,因为您用verilog描述的模型在这两种情况下的结果是相同的。在HDL中,您描述了一种应该发生的理想模型-您不是告诉合成器“使硬件像这样”,而是说“使硬件像我的模型那样工作”。如果你翻转a=b的顺序;b=c;然后,您将从每个硬件描述中获得不同的行为,因此不同的硬件“…将在一个时钟内将a分配给c…”不是。如果赋值顺序为b=c,则为;a=b;