1

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

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

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

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

4

3 回答 3

3

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

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

另一种方法是使用带有/而不是/的单个initial块。forkjoinbeginend

于 2013-10-22T18:27:36.010 回答
1

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

forever begin
  #5ns clk1 = ~clk1;
end

forever begin
  #4ns clk2 = ~clk2;
end
于 2013-10-22T17:57:08.847 回答
-1

尝试使用非阻塞赋值

forever
begin
 #5ns clk1 <= ~clk1;
 #4ns clk2 <= ~clk2;
end
于 2013-10-22T19:12:35.770 回答