-1

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

 initial begin
       forever begin
            clk=0;
            #5
            clk=1;
            #5
            clk=0;
       end
   end 

但是当我运行代码时,它会继续运行而不显示任何输出。上面的实现有什么错误吗?

4

2 回答 2

3

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

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
于 2015-09-25T08:19:42.053 回答
2

由于没有 $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 节

于 2015-09-30T05:27:19.013 回答