4

我正在使用 Verilog 设计芯片。我有一个 3 位计数器。我希望当计数器处于第 8 个循环时,应该有一个时钟故障,然后正常工作。在 Verilog 设计中产生时钟故障的可能方法是什么?

4

2 回答 2

6

在时钟信号上注入毛刺的一种方法是使用forcerelease从您的测试台:

module tb;

reg clk;
reg [2:0] cnt;
reg reset;

always begin
    #5 clk <= 0;
    #5 clk <= 1;
end

always @(posedge clk or posedge reset) begin
    if (reset) begin
        cnt <= 0;
    end else begin
        cnt <= cnt + 1;
    end
end

always begin: inject_clk_glitch
    wait(cnt == 7);
    #1 force clk = 1;
    #1 force clk = 0;
    #1 release clk;
end

initial begin
    reset = 1;
    #20 reset = 0;
    #500 $finish;
end

endmodule
于 2010-02-12T13:56:14.690 回答
1

所以你本质上想要一个额外的时钟边沿?我想不出在 RTL 中做到这一点的方法。您也许可以利用门延迟进行丑陋的破解,但这需要根据温度和工艺变化进行表征。

我建议您考虑解决问题的另一种方法。为什么需要这个额外的时钟边沿?

于 2010-02-12T13:13:05.933 回答