Verilog Práctico

Capítulo 12. Ascensor fácil con Alhambra FPGA

Segunda Parte. Código Verilog

Publicado el 1 de agosto de 2021.Actualizado el 23 de enero de 2022. Nuevo código Verilog para la Alhambra FPGA.

En esta segunda parte, veremos como programar la Alhambra como una máquina de estado finito.

En esta nueva versión del código Verilog, he añadido un pulsador de reset y un estado inicial del que partir en caso de fallo, dos características muy importantes que no deben faltar cuando se diseñan FSM's y de las que carecía la versión original.

Programaremos la  Alhambra dos formas distintas; como máquina de Moore y Mealy. En ambos casos utilizaremos el estilo de tres bloques always que vimos en  el los apuntes de Verilog,  Tema 4. Máquinas de Estado Finito 

1. Ascensor de tres plantas como FSM de Moore


Lo primero es dibujar el diagrama de estados de nuestra máquina.

Declaramos el módulo principal, las entradas y las salidas.

Codificamos los estados que vamos a utilizar y declaramos los registros cs current state y ns next state.

Declaramos un bloque always para el circuito secuencial que almacena el estado actual. Al ser un circuito secuencial utilizamos asignaciones non-blocking <=.

Un segundo bloque always para describir el circuito combinacional que genera el estado siguiente. Las transiciones se implementan con declaraciones if-else. Debe haber tantas condiciones  if-else como transiciones en el diagrama de estados.

Con los circuitos combinacionales usamos asignaciones blocking =.

Con las declaraciones case hay que poner una condición por defecto.

Este bloque es sensible a los cambios de estado cs y a las entradas in.

El último bloque always se corresponde con el circuito combinacional que genera las salidas en función del estado actual. Como estamos modelando una FSM de Moore el bloque always sólo es sensible al estado actual.

Dentro de un bloque always sólo se pueden hacer asignaciones a variables tipo reg, por eso hemos declarado la salida l298 como un registro. Al ser un circuito combinacional usamos asignaciones blocking =.

Archivo pcf.

Puedes descargar el código Verilog de la máquina de Moore aquí abajo.

2. Ascensor de tres plantas como FSM de Mealy

Dibujamos el diagrama de estados.

Para modelar la FSM de Mealy procedemos de igual manera.

Declaramos el módulo principal, las entradas y las salidas.

Codificamos los estados que vamos a utilizar y declaramos los registros cs current state y ns next state.

Declaramos un bloque always para el circuito secuencial que almacena el estado actual. Al ser un circuito secuencial utilizamos asignaciones non-blocking <=.




Un segundo bloque always para describir el circuito combinacional que genera el estado siguiente. Las transiciones se implementan con declaraciones if-else. Debe haber tantas condiciones  if-else como transiciones en el diagrama de estados.

Con los circuitos combinacionales usamos asignaciones blocking =.

Con las declaraciones case hay que poner una condición por defecto.

Este bloque es sensible a los cambios de estado cs y a las entradas in.

El tercer bloque always es el circuito combinacional que genera las salidas. Al ser una máquina de Mealy, las salidas dependen del estado actual cs y de las entradas in, por eso se incluyen ambas en la lista de sensibilidades del bloque always. Además en cada estado la salida puede tomar diferentes valores en función de las entradas, eso se modela con declaraciones if-else. Y como es un circuito combinacional usamos asignaciones blocking =

El archivo .pcf no cambia.

Puedes descargar el código Verilog de la máquina de Mealy aquí abajo.