martes, 15 de noviembre de 2011

Contador BCD en xilinx


Contador de cuatro bits decodificado a decimal que se muestra en el DISPLAY  7 segmentos:
Hola a todos, en esta entrada os voy a enseñar cómo hacer un contador de 4 bits decodificado a decimal y el cual vamos a reflejar en un display 7 segmentos. Este proyecto es muy parecido al contador de 4 bits anterior.
Bueno, como siempre, en primer lugar, nos vamos al entorno de xilinx, y crearemos un nuevo proyecto,(file/ new Project), le pondremos el nombre que queramos, yo lo llamo “contadorbcd7”, y elegimos la ruta donde queremos guardarlo. Importante, como empezamos con el diseño, seleccionaremos “schematich”. 
Una vez creado el proyecto, añadiremos una nueva fuente, como dije en anteriores proyectos, botón derecho en el proyecto y “new source”, elegiremos “schematich” y le pondremos un nombre, yo aconsejo que sea el mismo que el del proyecto, para saber siempre a qué proyecto pertenece ése archivo.
Bien, una vez nos aparezca la página en blanco, empezaremos con el diseño de nuestro esquemático, para ello empezaremos introduciendo el contador “CD4CE” y añadir un BUFG y un BUFGSR tanto a C como al CLK.
Será algo similar a esto.


Bueno, el siguiente paso es crear un nuevo símbolo, como hicimos en el anterior contador, el cual será el decodificador de 7 segmentos. Para esto tenemos que añadir una nueva fuente al proyecto, dándole al botón derecho y seleccionando “new source”. Esta vez seleccionaremos “VHDL module”, en vez de esquemático, y la pondremos un nombre, yo la he llamado “bcd7segmentos”.
Una vez que le demos a ok, nos saldrá una ventana como esta.








Ahora es el momento de seleccionar las entradas y las salidas del decodificador. Tenemos que tener en cuenta varias cosas, en primer lugar, marcar en la dirección se es salida (out) o entrada (in), además, debemos agregarle un nombre en la celda de “name” después, debemos marcar el ticket en la casilla del bus y, por último marcaremos las 4 entradas ( de 0 a 3) y las 7 salidas (de 0 a 6). Tendrá que quedaros más o menos así.





Una vez le demos a ok nos generará un archivo VHDL. Este tramo es algo más complicado, debido a que debemos introducirnos en el VHDL para “configurar” nuestro decodificador. Sin embargo, el propio entorno xilinx tiene un listado de plantillas que podemos que seleccionar.
Para eso tenemos que irnos a “edit” y seleccionamos “language templates”, como os muestro en la imagen.






Una vez le demos deberemos ir a la siguiente ruta. VHDL/SYNTESIS CONSTRUCTS/CODING EXAMPLES/MISC. Y una vez  entremos en misc, seleccionamos el que pone “7 segments display”, una vez lo encontremos, tendremos que copiar tal cual ése código, para aplicarlo al anterior VHDL. Cogeremos lo que os marco en el recuadro negro. Y lo pegaremos en el anterior VHDL justo entre begin y end behavioral.











Bueno, ahora nos encontramos con una pequeña “trampa” por decirlo de alguna manera, aunque aparentemente parezca una tontería, va a determinar que el proyecto funcione. Tenemos que tener en cuenta el tipo de led, esto es, como repaso del año pasado, los leds pueden ser de ánodo o cátodo común, su diferencia es que uno se activa con un uno (ánodo) y el otro lo hace con el 0 (cátodo). En términos claros,nuestra placa tiene leds de cátodo común, por lo que vamos a tener que cambiar los 0 por 1 y los 1 por 0 para que esto funcione.

 Esto sería el equivalente a haberlo hecho para cátodo común.




Una vez cambiado eso, procederemos a “materializar” por decirlo de alguna manera , lo que es el programa, dentro de un componente. Para eso, seleccionamos “bcd7segmentos” y le damos, en la parte de la derecha a lo que dice “create schematic symbol”. Una vez creado y encontrado en “symbols”, tendremos que elaborar el esquemático del contador entero, más o menos es una cosa así.







 

Recordad que para agregar etiquetas, extender cables y nombrarlos, se hace mediante el uso de estos elementos en la barra superior de herramientas. Como os enseño aquí.








Bueno, una vez acabado el esquemático es hora de empezar con la simulación, el primer paso es crear una nueva fuente de tipo “test bench”, es decir, botón derecho sobre el proyecto, new source, y a continuación elegimos un nombre y marcamos el tipo, “test bench waveform”. Una vez le demos a OK, deberemos elegir los parámetros como os muestro en ésta imagen.







Entonces, tras darle a finish en esta ventana nos saldrá la simulación, como os muestro a continuación.








 
Ya tendríamos nuestra simulación, sin embargo, como os dije en anteriores proyectos, esta no es la verdadera simulación, porque no tiene en cuenta todos los retrasos, por lo que no es tan precisa como la del  “post fit”, para acceder a esa simulación solo tenemos que ir a donde pone “simúlate post fit model” en la ventana de procesos. Recordad que antes hay que configurarlo a 2500 ns, para que se nos muestre el ciclo entero, para eso sólo tenemos que dar botón derecho sobre “simúlate post fit  model” y en propiedades, cambiar la que nos sale por defecto, que suele ser 1000 ns.
Le daremos y nos deberá salir algo como esto.


Cuando ya tengamos el post fit simulado será hora de crear el archivo con extensión ucf que, si recordáis de otros proyectos, es donde se colocan todas las salidas y las entradas en el CPLD físico. Para crear el archivo ucf, vamos a nuestro proyecto, botón derecho, new source, y después elegiremos “implementation contraints file”, pondremos el nombre “contabcdufc” y le daremos a OK, una vez hayamos hecho esto, se nos tendrá que haber creado en la ventana de implementación.
Ya cuando le demos doble click sobre el UCF se nos abrirá el entorno “PACE” y entonces podremos colocar las respectivas entradas y salidas en el CPLD.
Importante, el CLR no se toca, el propio CPLD lo integra en el pin 74.

Otra cosa a tener en cuenta es el CE, el cual es un enable, que debemos tener siempre activado para que nuestro contador funcione, de otra manera no lo hará.
Muy IMPORTANTE, no cometais el mismo error que yo, pensé que podría colocar los pines a mi antojo, puesto que la placa entrenadora que he usado tiene muchas de sus conexiones internas, sin embargo, precísamente por eso cometí el error, coloqué las salidas en los pines que me dió la gana, sin tener en cuenta que cada pin está asignado de una determinada manera al display, es decir, el PIN que representa a "a" debe ir colocada a p26, puesto que la placa microcontroladora está conectada intermanente de ese modo.









Una vez los tengamos colocados, cerraremos la ventana y daremos al Translate, así como que
nos genere el “fit”.







Para que todo esté en orden debemos tener la ventana de procesos con todos los tickets verdes, de otra manera no nos funcionará nada. Esto es todo que os sirva de mucha ayuda!




DESCARGAR PROYECTO AQUÍ



No hay comentarios:

Publicar un comentario