在verilog中使用永远的时钟实现

clock implementation using forever in verilog

我正在用 verilog 实现时序电路。我想要一个时间段为 10 的时钟。为了实现这一点,我做了类似

的事情
 initial begin
       forever begin
            clk=0;
            #5
            clk=1;
            #5
            clk=0;
       end
   end 

但是当我 运行 代码时,它一直 运行ning 而没有显示任何输出。以上实现有没有错误?

实现它的一种方法如下(假设您在测试台中使用它):

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

有关详细信息,您可能想查看 第 4 部分 CummingsSNUG2006Boston_SystemVerilog_Events Paper