我看到这段代码是在测试台中编写的。但是,我不明白为什么我们需要这样做。时钟周期为2.034ns。
`timescale 1ps/1ps
module tb();
initial begin
#0
forever begin
for (int x=0; x<95; x++) begin
#(1017) clk_491p52 = ~clk_491p52;
#(1017) clk_491p52 = ~clk_491p52;
#(1017) clk_491p52 = ~clk_491p52;
#(1018) clk_491p52 = ~clk_491p52;
end
#(1017) clk_491p52 = ~clk_491p52;
#(1018) clk_491p52 = ~clk_491p52;
#(1017) clk_491p52 = ~clk_491p52;
#(1018) clk_491p52 = ~clk_491p52;
end
end
endmodule
为什么我们要用这种特定的模式来反转时钟?难道我们就不能这样吗?
initial clk_491p52=0;
always #(2034/2) clk_491p52=~clk_491p52;
您展示的 2 个代码示例之间存在差异。
带有
always
块的示例产生 50% 的占空比。
带有
forever
块 的示例不会 产生 50% 的占空比。
在
always
块中,每个半周期为1017ps。
在
forever
块中,一些半周期为1017ps,而其他半周期为1018ps:1017与1018