【问题标题】:How can I generate 2 clocks in testbench with systemverilog?如何使用 systemverilog 在测试台中生成 2 个时钟?
【发布时间】:2013-10-22 17:00:42
【问题描述】:

我需要 2 个以不同频率运行的时钟。我试过了:

forever
begin
 #5ns clk1=~clk1;
 #4ns clk2=~clk2;
end

使用此代码,clk2 将在 clk1 完成后生成,但它们不会同时生成。

如何编写 Verilog 代码以确保两个时钟(clk1clk2)同时生成?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    一种方法是使用 2 个单独的 initial 块:

    module tb;
        bit clk1, clk2;
        initial forever #5ns clk1 = ~clk1;
        initial forever #4ns clk2 = ~clk2;
    endmodule
    

    另一种方法是使用单个 initial 块和 fork/join 而不是 begin/end

    【讨论】:

      【解决方案2】:

      begin / end 块中的语句按顺序计算。您需要创建两个forever 块以使它们并行运行。

      forever begin
        #5ns clk1 = ~clk1;
      end
      
      forever begin
        #4ns clk2 = ~clk2;
      end
      

      【讨论】:

        【解决方案3】:

        尝试使用非阻塞赋值

        forever
        begin
         #5ns clk1 <= ~clk1;
         #4ns clk2 <= ~clk2;
        end
        

        【讨论】:

        • 我惊讶地发现这有效(在initial 块内)。它很聪明,但我不建议使用它,因为它不像 2 个初始块或 fork-join 那样简单。
        猜你喜欢
        • 2021-12-14
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-05
        相关资源
        最近更新 更多