Cómo manejar el registro de salida en la máquina de estado con verilog

0

Suponiendo que no quiero implementar una máquina de estado en verilog, donde tengo 1 salida que es un registro Así que la salida debe estar sincronizada con el reloj de entrada. Sé que las transiciones entre los estados de la máquina deberían implementarse mediante un bloque secuencial, por ejemplo:

always @ (posedge clock)
  if (state)
      state <= 1'b0;
  else
      state <= 1'b1;

Si quiero que la salida esté sincronizada con el reloj, ¿la implementación del resultado a través de la combinación servirá? Quiero decir:

always @ (state)
  if (state) 
      Out_Reg = a;
  else 
      Out_Reg = b;

¿Esta implementación sigue siendo válida para que Out_Reg sea un registro activado por flanco positivo?

¿O debería hacer una asignación a Out_Reg en el bloque secuencial para que sea un registro de salida sincronizado válido?

    
pregunta user3921

1 respuesta

1

Probablemente debería sintetizar su diseño para estar seguro, pero espero que su ejemplo resulte en que Out_Reg se genere a partir de la lógica combinatoria. Se podría expresar más convencionalmente como

wire Out_Reg;
// ...
assign Out_Reg = state ? a : b;

Si desea que Out_Reg sea la salida de un registro físico (flip-flop), podría escribir

reg Out_Reg;
// ....
always @(posedge clock) begin
    Out_Reg <= state ? a : b;
end

Pero, por supuesto, el valor de Out_Reg se retrasa un ciclo de reloj en relación con el estado de state . Si necesita que esté sincronizado, deberá duplicar la lógica state para que Out_Reg anticipa cuál será el próximo estado de state . Podría simplificar esto utilizando la lógica combinatoria para crear una señal next_state :

wire next_state;
reg state, Out_Reg;

assign next_state = /* logic to determine next value of 'state' */
always @(posedge clock)
    state <= next_state
// ...
always @(posedge clock)
    Out_Reg = next_state ? a : b;

Sin embargo, también debe considerar si esto es necesario. ¿A tu lógica descendente realmente le importa si la salida de este módulo proviene de un registro o de una compuerta combinatoria?

    
respondido por el The Photon

Lea otras preguntas en las etiquetas