Máquinas Moore con salidas registradas

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 .

This image has an empty alt attribute; its file name is Diagrama%20bloques_moore_registrado_bien1.png

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.

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



This image has an empty alt attribute; its file name is Diagrama%20bloques_moore_registrado_bien2.png

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.

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: