Circuito de implementación con d-flipflop en verilog

1

Soy bastante nuevo en Verilog y actualmente estoy tratando de hacer una implementación estructural de un circuito que consiste en un flipflop d, tiene entradas xey, xey son exclusivas y el resultado es exclusivo o con el estado actual, y utilizado como entrada para el flip flop d. y utilizará el estado del resultado del flipflop en la próxima ejecución, etc. Pero no estoy muy seguro de cómo construirlo.

El circuito se ve así:

Ymicódigoeselsiguiente:

modulecirc(clk,x,y);inputclk,x,y;wirestate=1'b0;wirexoy,d;xor(xoy,x,y);xor(d,xoy,state);dffa(d,clk,state);endmodulemoduledff(D,clk,q);inputD,clk;outputq;regq;initialq<=0;always@(posedgeclk)beginq<=D;endendmodule

Estoybastantesegurodequeelcódigodflipflopescorrecto,perocuandointentoprobaresto,misvaloresdeestadoydsonsoloxporalgunarazón.Cuandocolocodiferentesvaloresdexeyenmibancodepruebas,nopasanada,"estado" y "d" siempre dice que tiene un valor de "1'hx" en la simulación. ¿Por qué sucede esto y cómo les asigno un valor?

Simplemente no entiendo realmente lo que se supone que debes hacer con el estado, asumo que necesitas darle un estado la primera vez que lo ejecutas, pero si lo hago, ¿no es eso? para establecer el estado en ese valor cada vez que se accede a ese módulo?

Así es como se ve el estado en el gráfico de simulación, solo permanece rojo para siempre:

    
pregunta dshawn

1 respuesta

2

En su simulador, el valor inicial del flip-flop D no está definido, por lo que el comportamiento de su circuito no está definido. Puedes tomar uno de estos dos métodos:

  1. Agregar una asignación initial al flipflop:

    initial q <= 0;
    
  2. Agregue una señal de reinicio al flipflop y actívelo desde su simulación. Tu bloque always debería ser:

    always @ (posedge clk) begin
        if(reset) q <= 0;
        else q <= D;
    end
    
respondido por el Andrey Akhmetov

Lea otras preguntas en las etiquetas