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

时间:2016-02-16 14:40:40

标签: 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

2 个答案:

答案 0 :(得分:9)

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

&lt; =非阻塞性质。这意味着在always块中,每一行都将并行执行。因此导致顺序元素的实现。

答案 1 :(得分:7)

&lt; =是非阻塞分配。它用于描述顺序逻辑,就像在代码示例中一样。参见IEEE Std 1800-2012,第10.4.2节和第34节;非阻塞程序分配&#34;。

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

另见Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill!

您可以使用$display代替$print来打印变量值。另见IEEE Std 1800-2012,第21.2节和第34页;显示系统任务&#34;。