viernes, 23 de noviembre de 2012

Detector


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