verilog中永久时钟的实现
我正在用verilog实现一个时序电路。我想要一个时间段为10的钟。为了实现这一点,我做了如下工作verilog中永久时钟的实现,verilog,hardware-programming,Verilog,Hardware Programming,我正在用verilog实现一个时序电路。我想要一个时间段为10的钟。为了实现这一点,我做了如下工作 initial begin forever begin clk=0; #5 clk=1; #5 clk=0; end end 但是当我运行代码时,它会继续运行,而不显示任何输出。上述实现中是否存在任何错误?实现它的一种方法如下(假设您在测试
initial begin
forever begin
clk=0;
#5
clk=1;
#5
clk=0;
end
end
但是当我运行代码时,它会继续运行,而不显示任何输出。上述实现中是否存在任何错误?实现它的一种方法如下(假设您在测试台中使用此方法):
由于没有$finish,您的代码将继续运行。所以它是一个自由运转的振荡器 以下是一些产生时钟的方法。或多或少,他们都是一样的 方法1:
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
方法-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
有关更多信息,您可能需要查看的第4节。这在很大程度上取决于代码的其余部分。您是否曾经调用过
$finish
?如果没有,则总是有更多的事情要做,因为永久
块将为clk
保留调度事件以更改值。(请注意,使用initial begin clk=0;forever clk=#5~clk;end
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
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