我目前正在自学 Verilog,并浏览了一些我发现的教程,有两件事让我感到困惑,即如何具体计算在将输入更改为组合电路后需要延迟多少时间,以及项目的顺序是什么在您的代码中执行。我通常了解实际电路具有上升/下降延迟时间,并且您希望延迟输出,以便您的输入在计算输出之前生成一个值,但我想知道具体情况。
所以,这里有一个例子:
module dflipflop (d,clk,reset,q);
input d, clk, reset;
output q;
reg q;
always @ (posedge clk or posedge reset) begin
if (reset) begin
q <= 0;
else begin
q <= #2 d; //why did I need to delay this 2 time units?
end
end
end module
module main;
reg d, clk, rst;
wire q;
dflipflop dff(d,clk,rst,q);
inital begin
forever begin
clk = 0;
#5
clk = 1;
#5
clk = 0; //why do I need to reset the clk to 0 if this is a forever block and my first assignment is clk = 0 in the beginning?
end
end
initial begin
d=0; rst=1;
#4 //why #4? How did they calculate that?
d=1; rst=0;
#50
d=1; rst=1;
#20
d=0; rst=0;
end
end module
我的一些问题嵌入在代码的注释中。然而,我的另一个困惑是时间问题。在主模块的开头,我使用我在上面 main 中定义的参数实例化了一个名为 dff 的 dflipflop 模块。我的代码在哪里说:当我更改 main 中的输入时重建模块/重新计算 Q?我没有看到链接。