verilog中=和<=之间有什么区别?

Hay*_*ily 6 verilog

我在这里和Verilog一样新...我想问一下这个程序中=和<=之间的区别?以及如何打印数据的价值?

    module always_example();
reg clk,reset,enable,q_in,data;

always @ (posedge clk)
if (reset)  begin
   data <= 0;
end else if (enable) begin   
   data <= q_in;
end
// if i put     $print("data=%d", data);   there is error
endmodule
Run Code Online (Sandbox Code Playgroud)

小智 11

=是阻止声明.在一个always块中,代码行将仅在其前一行执行后执行.因此,它们一个接一个地发生,就像循环中的组合逻辑一样.

<=本质上是非阻塞的.这意味着在一个always块中,每一行都将并行执行.因此导致顺序元素的实现.

  • “每一行都将并行执行。因此导致顺序元素的实现”。你能解释一下吗,我更困惑了。顺序组件不应该串行执行吗? (2认同)

too*_*lic 10

<=是非阻塞分配.它用于描述顺序逻辑,就像在代码示例中一样.请参阅IEEE Std 1800-2012,第10.4.2节"非阻塞程序分配".

=用于阻止分配.它用于描述组合逻辑.

另请参阅Verilog综合中的非阻塞分配,杀死的编码样式!

您可以使用$display而不是$print打印变量的值.另请参见IEEE Std 1800-2012,第21.2节"显示系统任务".