我在 verilog 中实现一个时序电路。我想要一个时间段为 10 的时钟。为了实现这一点,我做了类似的事情
initial begin
forever begin
clk=0;
#5
clk=1;
#5
clk=0;
end
end
但是当我运行代码时,它会继续运行而不显示任何输出。上面的实现有什么错误吗?
我在 verilog 中实现一个时序电路。我想要一个时间段为 10 的时钟。为了实现这一点,我做了类似的事情
initial begin
forever begin
clk=0;
#5
clk=1;
#5
clk=0;
end
end
但是当我运行代码时,它会继续运行而不显示任何输出。上面的实现有什么错误吗?
实现它的一种方法如下(假设您在测试台中使用它):
parameter clock_period=10;
always
#(clock_period/2) clock=~clock;
initial begin
clock=0;
#1000 $finish; // You can put the delay as per your requirement.
end
由于没有 $finish,您的代码继续运行。所以它是一个自由运行的振荡器。
以下是一些时钟生成方法。或多或少,它们都是一样的。
方法一:
parameter int clk_tgl_period = 5;
parameter timeout = 500;
module clkgen1;
reg clk;
initial begin
clk <= '0;
forever #(clk_tgl_period) clk = ~clk;
end
initial begin
#(timeout) $finish
end
endmodule
方法 - 2
parameter int clk_tgl_period = 5;
parameter timeout = 500;
module clkgen2;
reg clk;
initial begin
clk = 0;
#(timeout) $finish;
end
always #(clk_tgl_period) clk = ~clk;
endmodule
方法 - 3
parameter int clk_tgl_period = 5;
parameter timeout = 500;
module clkgen3;
reg clk;
initial begin
clk = 0;
#(timeout) $finish;
end
always #(clk_tgl_period) clk++;
endmodule
有关更多信息,您可能需要查看CummingsSNUG2006Boston_SystemVerilog_Events 论文的第 4 节。