martes, 6 de diciembre de 2011

Detector de secuencia Moore (1,0,1,1)



Hola a todos, en esta entrada os voy a explicar cómo hacer una máquina del tipo moore, es decir, como definición, una Máquina de Moore es un autómata de estados finitos donde las salidas están determinadas por el estado actual únicamente (y no depende directamente de la entrada).
El objetivo de nuestro ejercicio es crear una especie de “secuencia” por la que, tras meterla, se nos activará una salida, si esa secuencia no es la correcta y por tanto, la sucesión errónea, la salida no se activará.
Nuestra secuencia es  “1,0,1,1”.
Para ir pasando la secuencia necesitaremos un reloj, en este proyecto lo que haremos es simular el reloj mediante pulsos quedaros nosotros manualmente.

En primer lugar lo que tendremos que hacer será crear un nuevo proyecto. Para eso, nos vamos a “New Project” nos saldrá la ventana, en la que pondremos nombre, ruta y tipo. En este caso el tipo de esquema va a ser “HDL”. Tras esto añadiremos una nueva fuente, y elegiremos “state diagram”. Y le daremos a crear.
Ya habremos dado el primer paso para crear nuestra máquina. Bien, una vez dentro del “stateCAD” ese entorno que se nos abre cuando trabajamos con máquinas de estados, daremos botón derecho en la página en blanco y seleccionaremos “variable”, será ahí donde vayamos introduciendo nuestras variables.
Como bien os dije antes, pondremos una “a” que será la que utilicemos para ir introduciendo la secuencia. Además de eso, añadiremos una salida que será la que utilicemos para verificar que la secuencia es correcta. La llamaremos “S” y tendrá registro, para que se mantenga hasta que se vuelva a dar un pulso, y por último un reloj.
Nos deberá quedar una cosa así.


Ahora, una vez tengamos declaradas las variables, será el momento de ir introduciendo los estados que va a necesitar nuestra máquina Moore. Daremos a “Add state” e iremos metiendo los estados, en este caso 5.



Ahora una vez que estén colocados tendremos que ir estableciendo las  transiciones, para eso tickamos en “add transition” que se encuentra en la barra de herramientas que está a la izquierda. Y nos deberá quedar algo parecido a esto. 





Esto es más o menos el boceto de cómo nos debe quedar. Una vez hayamos colocado todos los estados y sus respectivas transiciones será de meter el reset en el estado 0. Para eso tendremos que seleccionar “add reset”, en la barra de herramientas que está a la izquierda.
Y nos tendrá que quedar así. 




Las características de este reset son, que sea asíncrono y de alto activo, es decir, tendremos que poner en la condición “RESET =’1’ “, para que así sea.



Ahora lo que tenemos que ir haciendo es ir configurando los estados y las transiciones, para eso tenemos que dar doble click sobre los globos o las transiciones, cuando lo hagamos, se nos abrirá una ventana. En las transiciones, pondremos el estado de “a”, mientras que en los propios estados, pondremos el estado de la “S”.
Nos tiene que quedar algo parecido a la siguiente imagen.




 
Una vez tengamos acabado el diagrama de estados, será el momento de empezar con la “simulación” o también llamado “state bench” para saber si la máquina hará exactamente lo que nosotros deseamos.


Una vez lo marquemos tendremos que ir dando a la tecla “Cycle” que se encuentra en la parte inferior e ir comprobando que pasa de estados correctamente. También podemos resetear los estados en el botón que se encuentra justo al lado.
Es importante marcar la casilla superior que pone “sim” si estamos trabajando en edit, no nos dejará ir viajando entre las distintas transiciones.



Es importante también que os fijéis en la parte inferior, la simulación gráfica, en la que la “s” se activa justo cuando llegamos al último estado, es decir, cuando metemos correctamente la secuencia.
Una vez hayamos pasado por todos los estados y hayamos comprobado que van pasando correctamente le tendremos que dar a “Generate HDL” en la parte superior. Para que se nos compile el diagrama en VHDL.
Al darle se nos abrirá una pantalla con los resultados, y por último nos mostrará   el archivo VHDL que ha generado a partir de nuestro diagrama de estados. Con esto ya es hora de pasar al entorno ISE.

Lo que hay que hacer ahora es ir a nuestro proyecto y darle botón derecho y “Add source”, nos saldrá un archivo con extensión VHD, que será el que se creó antes desde el state cad. Lo añadiremos y nos mostrará que está bien. Una vez metido será hora de crear un Test bench.
Para eso, como siempre, botón derecho, “new source” y seleccionamos “test bench waveform” y ponemos un nombre, tras esto seleccionamos nuestra máquina y listo.


Configuramos los parámetros de tiempo.



Configuramos las entradas en la simulación como os muestro a continuación.



Una vez terminado esto, tendremos que generar el UFC, para poner los pines del programa, para eso nos vamos al proyecto, “new source” y seleccionaremos “implementation contraints file”, pondremos un nombre y listo, se nos generará el archivo con extensión UFC.
Lo abriremos para entrar en el entorno PACE.




 
Metemos los pines que deseemos y lo guardamos. Y, tras esto, haremos la simulación “post fit”. Para trabajar con retardos.
Al darle nos generará el fit, con información sobre el proyecto, tiempos de trabajo, etc. Y nos mostrará la simulación.



Y una vez tengamos la simulación será el momento de generar el .JED, mediante  el “Generate programing file”.

Y con esto ya tendríamos acabada nuestra máquina de Moore. El uso de las máquinas de estado son muy útiles, una de las aplicaciones más interesantes que nos da este ejemplo de diagrama de estados es un código de seguridad para proteger algún tipo de elemento. Véase cajas fuertes o como código de seguridad a modo de "contraseña" para filtrar usuarios, proteger... etc. Espero que halla sido claro y os sirva de ayuda para futuros proyectos, nos vemos, un saludo!


DESCARGAR PROYECTO AQUÍ


No hay comentarios:

Publicar un comentario