【发布时间】:2020-05-18 01:07:47
【问题描述】:
我了解 Verilog 中阻塞和非阻塞语句的基本区别。但是我仍然无法理解 & 何时何地使用阻塞和非阻塞语句发生了什么。例如,考虑简单的 d ff 代码:
module dff (clk, reset,d, q, qb);
input clk;
input reset;
input d;
output q;
output qb;
reg q;
assign qb = ~q;
always @(posedge clk or posedge reset)
begin
if (reset) begin
// Asynchronous reset when reset goes high
q <= 1'b0;
end else begin
// Assign D to Q on positive clock edge
q <= d;
end
end
endmodule
但如果我使用两段编码技术编写完全相同的逻辑:
module dff(input wire d,
clk,
reset,
en,
output wire q);
reg q;
reg r_reg, r_next;
always @(posedge clk, posedge reset)
if(reset)
r_reg<=1'b0;
else
r_reg<=r_next;
always @*
if(en)
r_reg=d;
else
r_reg=r_next;
assign q<=r_reg;
endmodule
现在,在这段代码中,我只是不明白为什么在第一个 always 块中使用 <= 以及为什么在第二个 always 块中使用 =。我也知道在组合逻辑电路中= 建议使用& 顺序<= 建议使用。但是,我仍然无法找到使用阻塞和非阻塞语句的答案。你能帮帮我吗!?
【问题讨论】:
-
您的第二个示例不代表相同的逻辑 - 它具有第一个示例没有的
en输入。它在语法上也不正确。请解决这个问题,您可能会更清楚,或者如果没有,有人可以回答这个问题。
标签: verilog system-verilog hdl vlsi