Verilog valor inicial para flip flop

0

Estoy tratando de escribir el código verilog que establecerá el valor inicial de la salida de un flip-flop activado por flanco positivo a 0. El comportamiento del circuito del flip-flop es exactamente lo que quiero DESPUÉS del reloj o la entrada c hits. Desafortunadamente, al principio (antes de cualquier actividad en c o clk) el valor de x es incorrecto porque mi declaración inicial parece no tener efecto:

Entiendo que el problema puede ser que la salida Q del flipflop siempre sea inicialmente 0, y el inversor establece el valor de x en 1. Por lo tanto, alguien podría sugerir cómo cambiar el código para que el valor inicial de x es 0 ? Tal vez use una serie de cierres? Esencialmente, el comportamiento que quiero es que cuando el valor de c es alto, x también es alto, pero cuando llega el reloj, x siempre se reinicia a 0.

module test (c, x, clk);
   input c;
   input clk;
   output x;
   reg x;
   initial begin
     x = 0;
   end
   always @(posedge clk or posedge c) begin
      if (c) begin
        x = c;
      end else begin
        x = 1'b0;
      end
   end
endmodule
    
pregunta roro172

1 respuesta

1

Está utilizando c como un restablecimiento alto activo, luego está configurando el valor en c en lugar de 1'b0. Está activo alto, por lo que c siempre es 1 cuando este código se ejecuta. La solución a esto es la condición de restablecimiento a 0 no c:

always @(posedge clk or posedge c) begin
  if (c) begin
    x <= 1'b0; //Reset Condition
  end else begin
    //x <= ...;
  end
end 

Su código utiliza un initial y un reinicio asíncrono. Esto realmente no representa ningún tipo de hardware que tenga que elegir uno u otro, no puede tener ambos.

La forma de onda en la pregunta no muestra el reinicio asíncrono que se aplica al inicio de la simulación. debe aplicarlo durante al menos 1 ciclo de reloj y soltarlo en la posición de su reloj.

    
respondido por el pre_randomize

Lea otras preguntas en las etiquetas