时钟反转ioop

问题描述 投票:0回答:1

我看到这段代码是在测试台中编写的。但是,我不明白为什么我们需要这样做。时钟周期为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;
system-verilog clock
1个回答
0
投票

您展示的 2 个代码示例之间存在差异。

带有

always
块的示例产生 50% 的占空比。

带有

forever
的示例不会 产生 50% 的占空比。

always
块中,每个半周期为1017ps

forever
块中,一些半周期为1017ps,而其他半周期为1018ps:1017与1018

© www.soinside.com 2019 - 2024. All rights reserved.