【发布时间】:2013-10-22 17:00:42
【问题描述】:
我需要 2 个以不同频率运行的时钟。我试过了:
forever
begin
#5ns clk1=~clk1;
#4ns clk2=~clk2;
end
使用此代码,clk2 将在 clk1 完成后生成,但它们不会同时生成。
如何编写 Verilog 代码以确保两个时钟(clk1 和 clk2)同时生成?
【问题讨论】:
我需要 2 个以不同频率运行的时钟。我试过了:
forever
begin
#5ns clk1=~clk1;
#4ns clk2=~clk2;
end
使用此代码,clk2 将在 clk1 完成后生成,但它们不会同时生成。
如何编写 Verilog 代码以确保两个时钟(clk1 和 clk2)同时生成?
【问题讨论】:
一种方法是使用 2 个单独的 initial 块:
module tb;
bit clk1, clk2;
initial forever #5ns clk1 = ~clk1;
initial forever #4ns clk2 = ~clk2;
endmodule
另一种方法是使用单个 initial 块和 fork/join 而不是 begin/end。
【讨论】:
begin / end 块中的语句按顺序计算。您需要创建两个forever 块以使它们并行运行。
forever begin
#5ns clk1 = ~clk1;
end
forever begin
#4ns clk2 = ~clk2;
end
【讨论】:
尝试使用非阻塞赋值
forever
begin
#5ns clk1 <= ~clk1;
#4ns clk2 <= ~clk2;
end
【讨论】:
initial 块内)。它很聪明,但我不建议使用它,因为它不像 2 个初始块或 fork-join 那样简单。