Las máquinas Moore con salidas registradas se caracterizan por registrar, en lugar de las salidas, las próximas salidas, lo cual hace necesario prever esas próximas salidas. Esto es sencillo en los modelos Moore puesto que las próximas salidas solo dependen del próximo estado. Una vez sabemos cuales son las próximas salidas y las registramos, observamos que el efecto resultante es la aparición de las salidas definitivas en el mismo ciclo que las que describíamos en el Ejemplo 1. Por tanto el modelo que utilizaríamos sería el representado en la Ilustración 7 .

Ilustración 7. Modelo Moore con salidas registradas. Primera alternativa
Si tomamos nuestro ejemplo de detector de secuencia y lo describimos con un modelo Moore con salidas registradas tendremos la descripción del siguiente ejemplo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
module moore_reg1(RELOJ, RESET_A, SALIDA, ENTRADA); input RELOJ,ENTRADA,RESET_A; output SALIDA; parameter [3:0] /*synopsys enum hola*/ Q1=4'H1, Q2=4'H2, Q3=4'H4,Q4=4'H8 ; reg SALIDA,SALIDA_PROX; reg [3:0] /*synopsys enum hola*/ ESTADO, ESTADO_PROX; always @(ESTADO or ENTRADA) //combinacional1 case (ESTADO) //synopsys full_case Q1 : if (!ENTRADA) ESTADO_PROX=Q2;else ESTADO_PROX=Q1; Q2 : if (ENTRADA) ESTADO_PROX=Q3; else ESTADO_PROX=Q2; Q3 : if (!ENTRADA) ESTADO_PROX=Q4; else ESTADO_PROX=Q1; Q4 : if (!ENTRADA) ESTADO_PROX=Q2;else ESTADO_PROX=Q3; endcase always @(posedge RELOJ or negedge RESET_A) //secuencial 2 y 4 if (!RESET_A) begin ESTADO <= Q1; SALIDA <= 1'b0; end else begin ESTADO<=ESTADO_PROX ; SALIDA<=SALIDA_PROX; end always @(ESTADO_PROX) //combinacional 3 case (ESTADO_PROX) Q1: SALIDA_PROX=1'b0; Q2: SALIDA_PROX=1'b0; Q3: SALIDA_PROX=1'b0; Q4 : SALIDA_PROX=1'b1; default : SALIDA=1'bx; endcase endmodule |
Ejemplo 7. Máquina Moore registrada. Primera alternativa
Si pensamos que el estado siguiente depende de entradas y estado, podemos decir que las salidas siguientes dependen también de entradas y estado, con lo cual tenemos el siguiente diagrama de bloques

Ilustración 8. Modelo Moore con salidas registradas . Segunda alternativa
Si tomamos nuestro ejemplo de detector de secuencia y lo describimos con un modelo Moore con salidas registradas siguiendo el diagrama de bloques de la ilustración 8, tendremos la descripción del siguiente ejemplo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
module moore_reg1(RELOJ, RESET_A, SALIDA, ENTRADA); input RELOJ,ENTRADA,RESET_A; output SALIDA; parameter [3:0] /*synopsys enum hola*/ Q1=4'H1, Q2=4'H2, Q3=4'H4,Q4=4'H8 ; reg SALIDA,SALIDA_PROX; reg [3:0] /*synopsys enum hola*/ ESTADO, ESTADO_PROX; always @(ESTADO or ENTRADA) //combinacional1 case (ESTADO) //synopsys full_case Q1 : if (!ENTRADA) ESTADO_PROX=Q2;else ESTADO_PROX=Q1; Q2 : if (ENTRADA) ESTADO_PROX=Q3; else ESTADO_PROX=Q2; Q3 : if (!ENTRADA) ESTADO_PROX=Q4; else ESTADO_PROX=Q1; Q4 : if (!ENTRADA) ESTADO_PROX=Q2;else ESTADO_PROX=Q3; endcase always @(posedge RELOJ or negedge RESET_A) //secuencial 2 y 4 if (!RESET_A) begin ESTADO <= Q1; SALIDA <= 1'b0; end else begin ESTADO<=ESTADO_PROX ; SALIDA<=SALIDA_PROX; end always @(ESTADO_PROX) //combinacional 3 case (ESTADO_PROX) Q1: SALIDA_PROX=1'b0; Q2: SALIDA_PROX=1'b0; Q3: SALIDA_PROX=1'b0; Q4 : SALIDA_PROX=1'b1; default : SALIDA=1'bx; endcase endmodule |
Ejemplo 8. Máquina Moore registrada. Segunda alternativa
Para concluir vamos a ver el siguiente video: