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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top