Implementando circuito con d-flipflop en verilog

Soy bastante nuevo en Verilog y actualmente estoy tratando de hacer una implementación estructural de un circuito que consta de un flip-flop d, tiene entradas x e y, x e y son exclusivas o'd y ese resultado es exclusivo o' d con el estado actual, y se usa como entrada para el flip flop d. y usará el estado de resultado del flip-flop en la próxima ejecución, etc. Pero no estoy muy seguro de cómo construirlo.

El circuito se ve así:

ingrese la descripción de la imagen aquí

Y mi código es el siguiente:

module circ(clk,x,y);
 input clk,x,y;
 wire state=1'b0;
 wire xoy,d;
 xor(xoy,x,y);
 xor(d,xoy,state);
 dff a(d,clk,state);
endmodule

module dff(D,clk,q);
input D,clk;
output q;
reg q;
initial q<=0;
always @ (posedge clk)
 begin
  q<=D;
 end
endmodule

Estoy bastante seguro de que el código del flip flop d es correcto, pero cuando trato de probar esto, mi d y los valores de estado son solo x por alguna razón. Cuando pongo diferentes valores de x e y en mi banco de pruebas, no sucede nada, "estado" y "d" siempre dicen que tiene el valor "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 en la primera ejecución, pero si le doy un estado, ¿no va a establecer el estado? a 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, simplemente permanece rojo para siempre:ingrese la descripción de la imagen aquí

Respuestas (1)

En su simulador, el valor inicial del flip-flop D no está definido, por lo tanto, el comportamiento de su circuito no está definido. Puede tomar uno de dos enfoques:

  1. Agregue una initialasignación al flip-flop:

    initial q <= 0;
    
  2. Agregue una señal de reinicio al flip-flop y cámbielo de su simulación. Su alwaysbloque entonces debería ser:

    always @ (posedge clk) begin
        if(reset) q <= 0;
        else q <= D;
    end
    
@dshawn ¿Puede adjuntar más información sobre su banco de pruebas? Suponiendo que todas las señales se controlen correctamente (sin Z alto, etc.), la única fuente de an Xsería el flip-flop que eliminamos claramente; el problema posiblemente esté en su banco de pruebas entonces.
jaja, solo estaba siendo un idiota y pasé por alto el estado del cable de línea = 1'b0, por lo que se volvía a establecer en 0 cada vez, funciona perfectamente ahora, ¡gracias por la ayuda!