Máquinas Moore

Modelo de bloques

La funcionalidad del modelo Moore puede representarse tal como podemos observar en la Ilustración 2, destacando el hecho de que el circuito combinacional de salida solo depende del estado.

Ilustración 2. Modelo Moore

Modelo Verilog

La forma en que este modelo se describe en Verilog es tan sencillo como dedicar un proceso para cada bloque funcional, teniendo en cuenta claro está que dos de ellos son de carácter combinacional y uno de ellos de carácter secuencial. Los procesos combinacionales serán sensibles a sus entradas y el proceso secuencial a la señal de reloj y a una señal asíncrona si la tuviera (por ejemplo el reset asíncrono de inicialización). Así de esta forma tendríamos lo siguiente:

combinacional1: always @( entradas or estado_actual)

proceso sensible a las entradas y al estado de la máquina. En este proceso, de tipo combinacional, modelizaremos el circuito combinacional que nos obtiene el próximo estado.

secuencial2: always @(posedge reloj or negedge reset_a)

proceso que modelizará la lógica secuencial. Se encargará de que en el flanco activo del reloj el estado de la máquina pase a ser el valor que en ese momento tenga el próximo estado. También en este proceso se modelizará la acción del reset de la máquina, sea asíncrono o síncrono.

combinacional3: always @(estado_actual)

proceso sensible al estado de la máquina. En este proceso, de tipo combinacional, modelizaremos el circuito combinacional de las salidas.

               Esta es sin duda alguna la forma más natural y sencilla de representar el funcionamiento mediante procesos concurrentes del comportamiento de una máquina de estados. Variantes a este esquema combinan los procesos 1 y 2 en uno solo de tipo secuencial (y por tanto solo sensible a la señal de reloj y señal asíncrona si la hubiera) que elimina la necesidad de manejar la señal estado próximo y que actualiza directamente el estado actual . Una variante también muy habitual es combinar los dos procesos combinacionales en uno solo, aunque esta práctica es mucho más usual en las máquinas Mealy como luego veremos, al compartir ambos procesos la misma lista de sensibilidad.

Ejemplo

               El diagrama de estado correspondiente al detector de secuencias bajo un modelo Moore es el representado en la Ilustración 3 y su correspondiente descripción Verilog la tenemos en Ejemplo 1.

Ilustración 3. Diagrama de estados Moore

Ejemplo 1. Descripción Verilog del detector de secuencia Moore.

Realizando FSM Moore con Verilog

1 Estilo de tres procesos

A continuación en el siguiente vídeo verás cómo se describe una FSM Moore con un estilo de tres procesos.

Moore: Estilo de 3 procesos

2 Estilo de dos procesos

A continuación en el siguiente vídeo verás cómo se describe una FSM Moore con un estilo de dos procesos.

Estilo de 2 procesos

Alternativas  y comentarios

Hay que destacar en el modelo descrito que en SystemVerilog podríamos utilizar un tipo enumerado y sustituir las líneas 7 y 8 por

que consigue de forma fácil que el tipo de datos utilizado ( para las variables de ESTADO, ESTADO_PROX y sus valores asociados) pueda ser considerado como si de un enumerado se tratara .

Hay que destacar el en proceso de cálculo del estado siguiente (ESTADO_PROX) el uso de unique .

               Esta es una buena forma de indicar al sintetizador que todos los casos son contemplados y por tanto no debe de inferir en ningún caso una retroalimentación. Evidentemente si utilizáramos el tipo enumerado, no sería necesario este pragma puesto que solo serían posibles 4 casos diferentes de codificación; pero estamos intentando realizar un código abierto a diferentes codificaciones, algunas de las cuales, como la one-hot, introduce una gran cantidad de estados espúreos en los cuales, de no colocar este pragma, tendríamos gran cantidad de retroalimentaciones indeseadas al sintetizar (debido a que no se han contemplado en el case todos los casos de codificación).

               Ante el uso de unique podríamos utilizar la alternativa del default del case (que si se ha utilizado en el proceso COMBINACIONAL de salida). Esta alternativa es absolutamente necesaria si queremos explícitamente llevar los posibles estados espúreos a estados siguientes conocidos (diseño de riesgo mínimo). Sin embargo para un criterio de coste mínimo, suele ser preferible utilizar unique para el proceso combinacional de ESTADO_PROX y el default para el proceso combinacional de salida.

               Otra alternativa posible para evitar retroalimentaciones indeseadas y que tiene el mismo efecto que las dos anteriormente descritas es utilizar valores por defecto al principio del proceso, justo antes del case. Por ejemplo en nuestro caso del proceso de cálculo del estado siguiente podríamos poner: