Skip to content

04_Qfsm a Icestudio

jospicant edited this page Oct 26, 2019 · 3 revisions

Máquina de estados finitos desde "Qfsm" hasta "Icestudio".

Vamos a intentar explicar como podemos crear una máquina de estados finitos desde el programa Qfsm , exportarlo a un fichero verilog y aprovechar este, para introducirlo, como un módulo Icestudio que será cargado en un ejemplo .ice y así, grabarlo en nuestra FPGA.

¿Qué necesitamos?

  • Software Qfsm, podemos seguir las instrucciones para su descarga en Qfsm
  • Software Icestudio Icestudio
  • Nuestra FPGA favorita soportada por Icestudio Boards soportadas

Creando el diagrama de estados en QFSM.

Vamos a realizar el siguiente Diagrama de estados como ejercicio didáctico.
Tendremos dos pulsadores A y B como valores de entrada y dos leds D2 D1 como salidas del sistema.

Diagrama de Estados

Desde Qfsm

Qfsm

Creamos una nueva máquina de estados File-->New donde especificamos el nombre, cuantas entradas tenemos y salidas Moore/Mealy que contiene, también podemos añadir una pequeña descripción de nuestro sistema.

Nueva FSM

En nuestro caso configuramos:

  • 2 entradas A B
  • 2 salidas Moore (El valor de salida depende única y exclusivamente del esrtado en el que nos encontramos)
  • Añadimos una pequeña descripción

Empezaremos por introducir los Estados desde el menú State-->New o desde el botón rápido de Add State

Add State

Para cada estado, configuraremos en otras cosas, el nombre del estado, el código binario que se le asigna a dicho estado, valor que asignamos a las salidas Moore cuando nos encontramos en dicho estado, tamaño y grosor de la línea,etc.

Continuamos añadiendo las transiciones desde el menú Transition-->New o desde el botón rápido de Add Transition A continuación podemos ver un ejemplo de como se añaden transiciones:

Add Transition

Con la herramienta de selección podemos mover los estados y las flechas de las transiciones a nuestro gusto para que quede todo ordenado.

Simulación del Diagrama de Estados.

Una vez montado nuestro diagrama de estados, se puede simular desde el menú ** Machine-->Simulate** o desde el menú rápido de simulate

Podemos ver la simulación en el siguiente fichero GIF

Machine-->Simulate

Exportar Diagrama a Verilog.

Qfsm nos permite exportar a Verilog desde el menú File-->Export-->verilog HDL... Tras la exportación, habremos creado un fichero FPGA_01.v (nombre elegido para este ejemplo)

FPGA_01.v

Una vez exportado, hay que editar el fichero verilog y corregir dos detalles:

  • Inicializar los registros a cero.
  • Elmiminar punto y coma que añade de más en el primer "end" del primer bloque "always"

Corregir Exportación
Corrección

Llegados aquí, habremos terminado con Qfsm y empezaremos a trabajar con Icestudio.

Creando módulo FSM con Icestudio.

Desde Icestudio, crearemos un bloque de código donde incluiremos el fichero verilog exportado con la directiva //@include fichero.v y creando una instancia de nuestra máquina de estados finitos llamando al módulo que contiene nuestra máquina. Añadiremos entradas y salidas necesarias a nuestro bloque de código teniendo así terminado nuestro módulo (contiene la máquina de estado finitos).

En la siguiente figura vemos como se crea el módulo:

Módulo FSM Modulo FSM

Con el módulo que contiene nuestra máquina de estados, creamos un ejemplo donde añadimos las entradas para los pulsadores A y B( Sincronización-debouncer y detector de flanco ) así como las salidas a los diodos D2, D1.

Ejemplo FSM Ejemplo FSM

Conectaremos los pulsadores a los puertos de entrada configurados ( Pmod1 (A) y Pmod7 (B) en mi IceStick ) y cargaremos el ejemplo.

Resultado final

En el siguiente GIF podemos ver el resultado obtenido.

Prueba FSM

Resumiendo.

Hemos podido ver como podemos integrar Qfsm a Icestudio y beneficiarnos de ambos para realizar máquinas de estado de forma sencilla.