En esta entrada vamos a realizar un ejercicio para
implementar una máquina de estados tipo Moore, en el CPLD XC9572:
¿Qué es un autómata tipo Moore?
La máquina de Moore, a diferencia de la máquina de Mealy,
las salidas depende exclusivamente del estado interno y no de las entradas.
Es decir, si alguna entrada cambia, las salidas no
cambian al menos hasta que aparezca un pulso de reloj que origine un cambio en
los estados internos (elementos de memoria). Por ejemplo, una máquina tipo
Moore, sería un contador.
Ejercicio:
Se desea proyectar un detector de
secuencia que reconozca la secuencia de entrada ‘1 -> 0
-> 1
->1’.
• La entrada se llamará ‘a’.
•
Y la salida ‘S’.
Tenemos
que pensar que la máquina se desarrollará mediante un diagrama de flujo de máquina
Moore síncrona que será exportada a código VHDL, y este, se utilizará para
implementar el diseño en el CPLD.
Es
decir, tenemos que realizar casi el mismo procedimiento que en la máquina
rotativa, pero en este caso hablamos de una maquina tipo Moore.
En
primer lugar vamos a analizar el diagrama de flujo del ejercicio, el cual
representa los estados estables, inestables y valores de salida.
Creación del
proyecto:
En
primer lugar, como en los casos anteriores, comenzaremos creando un proyecto
nuevo en el entorno de Proyect Navigator.
Le
hemos llamado Detector, y el tipo será HDL.
A
continuación configuraremos el CPLD con los siguientes valores.
Ahora
crearemos una nueva fuente de tipo State Diagram, que yo he llamado
detector_SD.
Acto
seguido nos tiene que haber cargado el entorno de State Cad.
Lo
primero de todo dentro del entorno State Cad, añadiremos los puertos de entrada
y salida de la máquina de moore.
Seleccionamos
en la barra de menús Options->variable.
Añadiremos
las variables a y S, configurándolas como entrada o salida, tipo. Para
finalizar pulsamos Ok.
El
siguiente paso será añadir los estados de los cuales disponemos.
Tenemos
5 estados, ahora hay que insertar las transiciones.
Añadidas
las transiciones asignaremos el Reset en el estado 0. El cual lo configuraremos
en alto activo y asíncrono.
Ahora
pasaremos a editar las transiciones, quedándonos el siguiente resultado.
Como
ya hemos acabado la máquina de estados, ahora pasaremos a realizar su verificación,
mediante StateBench paso por paso, tal y como se observa en la imagen.
Acabada
la simulación y comprobación con StateBench, generaremos el código VHDL
mediante la opción “Generate HDL”.
Aquí
se puede observar el código generado VHDL.
Acto
seguido guardaríamos el trabajo y volveríamos a Proyect navigator para añadir
la fuente que hemos creado.
1
2
3
Aunque
ya habíamos hecho la simulación con State Cad, si queremos podemos hacer una
simulación de nuevo con el simulador de ISE, para ello añadiremos la fuente de
tipo TestBench generada por StateCad en este caso se llama DETECTOR_TB.vhd
Ahora
pasaremos a realizar la síntesis del autómata, para ello hacemos doble click en
la opción “Synthesize-Xst”, en la ventana de procesos.
Y
si todo a salido correcto nos aparecerá el tick verde tal y como se muestra en
la imagen, además si hacemos click en “View RTL schematic”, podemos ver el esquemático
del mismo.
Podemos hacer Push para ver su interior
Vamos
a crear ahora las restricciones, como anteriores ocasiones, para ello crearemos
nueva fuente de tipo “Implementation Constrait file”. Y cuando nos cargue el
entorno PACE, asignaremos los pines.
Por
último y antes de programar, generaremos el archivo *.jed, que posteriormente cargaremos
en el CPLD con Impact. Tenemos que hacer doble click en “Implement Design”.
Proceso descarga al Cpld
Como en los casos anteriores abriremos Impact y crearemos un nuevo proyecto.
A continuación configuramos el dispositivo utilizando Boundary-Scan(Jtag)
.
Una vez que nos haya cargado el entorno de Impact y se haya establecido la comunicación, abriremos el archivo detector.jed. Como en los anteriores casos, realizaremos un borrado.
Finalizado el borrado, hacemos doble click en "Program" para iniciar la descarga
Como ya tenemos programado el Cpld, simplemente realizaremos el conexionado en la TAD.. Igual que en casos anteriores modificamos los pines y establecimos el pulsador A con el pin 25 para introducir la secuencia. Como pin de salida asignamos el pin 46, correspondiente al segundo led.
En primer lugar lo comprobamos de forma automática, conectando el Global Clock al pin 10, pero posteriormente introducimos los pulsos de forma manual mediante el pulsador D
Este es el resultado
Descarga aquí el programa
No hay comentarios:
Publicar un comentario