Ejemplo de máquina de estado (FPGA)

Más conocidas por su acrónimo en inglés FSM (Finite State Machine), se utilizan ampliamente en el diseño de circuitos digitales (además de en otros ámbitos de la ingeniería, como la programación), para describir el comportamiento de un sistema según el valor de sus entradas y de cómo van cambiando en el tiempo. Ésta es una definición parcial pero que nos permite hacernos una primera idea intuitiva. Desde el punto de vista de las FSM, un sistema está compuesto de estados por los que va pasando el sistema, de señales de entrada que modifican esos estados y de señales de salida que pueden utilizarse para conocer el estado del sistema y actuar en consecuencia.

Para representar una máquina de estados se utilizan diagramas de estados como el siguiente.

 Para poder llevarla a una FPGA, la máquina que vamos a implementar es la mostrada en el siguiente diagrama de estados.
Tenemos cuatro señales de salida, la señal Y0 se activa cuando el sistema está en el estado S0, La Y1 cuando el sistema está en el estado S1 y así sucesivamente. Como se puede observar, la salida del sistema depende exclusivamente del estado en el que se encuentra el sistema. Cuando ocurre esto decimos que se trata de una máquina de estados de tipo Moore. Si la salida depende del estado y además de las entradas actuales del sistema, se trataría de una máquina de estados.

  Esquema FSM.

Como tenemos cuatro estados, podríamos usar dos bit para codificar los estados. 

Se implementa en VHDL cada uno de estos tres bloques (registro de estados)

El registro de estados tiene una señal de reset síncrona que lleva al sistema al estado S0. Si la lógica de codificación del estado siguiente genera un nuevo estado, este se almacenará en el registro, si no, la salida del registro se mantiene.
El estado siguiente se genera a partir del estado actual y de las entradas A y B, por lo que ponemos estas tres señales en la lista de sensibilidad del proceso. Para evitar que el sintetizador genere algún latch o elemento de memoria, asignamos por defecto el estado actual a la señal de estado siguiente. El código VHDL describe los estados y las transiciones asociadas a loas entradas según el diagrama de estados que definimos más arriba, de forma que, de ser necesario, asigna el valor del estado siguiente a la variable state_next cuando hay un cambio en las entradas o en el estado.
El código VHDL  completo de nuestra FSM.









 











Comentarios

Entradas populares de este blog

CROCODILE CLIPS

Compuertas Logicas