Verilog 中 = 和 <= 有什么区别?
What is the difference between = and <= in Verilog?
这段代码中的=
和<=
有什么区别?另外,如何打印 data
?
的值
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
<= 是非阻塞赋值。它用于描述顺序逻辑,就像在您的代码示例中一样。请参阅 IEEE 标准 1800-2012,第 10.4.2 节 "Nonblocking procedural assignments"。
= 用于阻塞赋值。它用于描述组合逻辑。
另见 Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill!
您可以使用 $display
而不是 $print
来打印变量的值。另见 IEEE 标准 1800-2012,第 21.2 节 "Display system tasks"。
= 是阻塞语句。在 always
块中,该行代码只有在其前一行执行后才会执行。因此,它们一个接一个地发生,就像循环中的组合逻辑一样。
<= 本质上是非阻塞的。这意味着在 always
块中,每一行都将并行执行。因此导致顺序元素的实现。
这段代码中的=
和<=
有什么区别?另外,如何打印 data
?
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
<= 是非阻塞赋值。它用于描述顺序逻辑,就像在您的代码示例中一样。请参阅 IEEE 标准 1800-2012,第 10.4.2 节 "Nonblocking procedural assignments"。
= 用于阻塞赋值。它用于描述组合逻辑。
另见 Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill!
您可以使用 $display
而不是 $print
来打印变量的值。另见 IEEE 标准 1800-2012,第 21.2 节 "Display system tasks"。
= 是阻塞语句。在 always
块中,该行代码只有在其前一行执行后才会执行。因此,它们一个接一个地发生,就像循环中的组合逻辑一样。
<= 本质上是非阻塞的。这意味着在 always
块中,每一行都将并行执行。因此导致顺序元素的实现。