$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
方法 - 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 Paperのセクション 4を参照してください。