Produzindo uma falha de relógio em um design de verilog
Pergunta
Estou projetando um chip usando um Verilog. Eu tenho um balcão de 3 bits. Eu quero isso quando o contador estiver em seu 8º loop, Deve haver uma falha no relógio e depois funcionam normalmente. O que poderia ser as maneiras possíveis de produzir uma falha de relógio em um design de verilog?
Solução
Uma maneira de injetar falhas em um sinal de relógio é usar force
e release
Do seu teste de teste:
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
Outras dicas
Então você quer essencialmente uma borda extra do relógio? Não consigo pensar em uma maneira de fazer isso no RTL. Você pode ser capaz de fazer um hack feio utilizando atrasos no portão, mas isso precisaria ser caracterizado com a temperatura e as variações de processo.
Eu recomendo que você pense em outra solução para o seu problema. Por que você precisa dessa borda extra do relógio?