我是新来的,就像在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
答案 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;。