【发布时间】:2010-02-12 11:36:58
【问题描述】:
我正在使用 Verilog 设计芯片。我有一个 3 位计数器。我希望当计数器处于第 8 个循环时,应该有时钟故障,然后才能正常工作。在 Verilog 设计中产生时钟故障的可能方法是什么?
【问题讨论】:
我正在使用 Verilog 设计芯片。我有一个 3 位计数器。我希望当计数器处于第 8 个循环时,应该有时钟故障,然后才能正常工作。在 Verilog 设计中产生时钟故障的可能方法是什么?
【问题讨论】:
在时钟信号上注入毛刺的一种方法是使用测试平台中的force 和release:
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
【讨论】:
所以你本质上想要一个额外的时钟边沿?我想不出在 RTL 中做到这一点的方法。您也许可以利用门延迟进行丑陋的破解,但这需要根据温度和工艺变化进行表征。
我建议您考虑另一种解决问题的方法。为什么需要这个额外的时钟边沿?
【讨论】: