miércoles, 14 de noviembre de 2012

Contador Binario 4 Bit's

En la siguiente practica vamos a diseñar un contador Binario de 4 Bit’s con sincronización de reloj y borrado asíncrono.  Su salida será decodificada (binario a decimal) sobre una barra de 10 LED’s, los cuales nos mostrarán su cuenta.
Para ello analizaremos la siguiente tabla de verdad.


Creación del proyecto

En primer lugar crearemos un proyecto nuevo dentro de Proyect Navigator, en File-> New Proyect igual que en el paso anterior, estableciendo el nombre de proyecto, la configuración del CPLD…



A continuación crearemos una nueva fuente de tipo esquemático para poder comenzar con el diseño.


Una vez que hayamos añadido la fuente de tipo esquemático, comenzaremos con el diseño, y en primer lugar insertaremos el componente desarrollado por Xilinx  CB4CE.
 Para continuar estableceremos las entradas y salidas. Estableciendo una entrada Ce, la entrada de reloj(en la cual insertaremos un BUFG para reducir el SKEW),y la entrada al reset asíncrono, que estará gobernado por una puerta AND de 2 entradas, para que en el momento que se cumple la condición esperada en la cuenta haga un Reset al contador.
Las salidas serán Q0,Q1,Q2,Q3, e irán conectadas a un bus que comunicará con el decodificador,a excepción de la salida Tc.



Una vez completada esta parte, pasaremos a diseñar el decodificador, por tanto tenemos que añadir una fuente nueva de tipo esquemático también, que yo la he llamado “deco”.


Creando el Decodificador

Para crear el decodificador lo primero de todo tenemos que analizar la tabla de verdad y sus salidas, para así poder generar el componente.


Como se puede observar en las ecuaciones de las salidas de los Led's, están compuestas por las combinaciones de entradas Q0,Q1,Q2,Q3.
Si tomamos como ejemplo el Led0, su ecuación para que obtengamos un HIGH en salida tenemos que tener las entradas Q0,Q1,Q2,Q3 negadas.
Por tanto se puede deducir que para que se cumpla la salida de Led0 tiene que existir una puerta And de 4 entradas, en las cuales lleguen de forma negada a traves de una puerta NOT.
Por ello, en primer lugar, crearemos el BUS con las 4 entradas que provienen del contador binario.



A continuación insertaremos 4 puertas NOT conectadas al BUS, e iremos realizando las conexiones a las 10 Puertas AND en función de lo analizado, que corresponderán a la salidas del Deodificador, en la fotografía se puede observar el resultado.



Como última parte del diseño del decodificador, guardaremos y  pasaremos a crear el componente, seleccionando en la ventana de procesos, la opción "Create Schematic Symbol"



Ahora que ya lo tenemos creado, pasaremos a insertar el nuevo componente en el archivo fuente principal, simplemente buscando el componente nuevo, con el nombre que hemos creado "deco" y uniremos sus conexiones.




Completados los pasos anteriores, pasamos a crear las restricciones, donde asignaremos los pines del CPLD.
Igual que en la entrada anterior del sumador de 1 Bit, para crear las restricciones tenemos que añadir una nueva fuente en el dispositivo, seleccionando la opción Implementation Constraints File, al cual daremos el nombre y pulsamos Next.


Asignación de Pines

Hecho esto, nos cargara una nueva ventana con la herramienta PACE, donde deberemos asignar los pines de la parte izquierda con los de la derecha, en caso de que no cargue de forma automática, debemos hacer doble click en el fichero generado *.ucf. Para asignar los pines, arrastraremos las entradas o salidas a sus respectivos números de Pin, por último escribiremos el numero de la dirección del pin.



Aquí se puede observar el resultado final.



Tenemos una herramienta para comprobar que no haya errores, llamada "design rule check", si la seleccionamos nos aparecerá una ventana indicándonos si existieran errores en la asignación  tal y como se aprecia en la imagen.


Simulación...

Acabado este punto, el siguiente paso, seria la creación del TestBench para simular el funcionamiento del circuito.
Haciendo click con el boton derecho seleccionamos "New source", y crearemos un fichero TestBench Waveform.



A continuación  nos cargará la siguiente ventana donde seleccionaremos la entrada de Reloj(1), y estableceremos la configuración deseada del reloj(2).



Al haber hecho click en finish, nos habrá cargado el HDL Bencher con las formas de onda.



Simplemente añadiremos un paso a nivel alto en la entrada Ce, tal y como se aprecia en la imagen. Ya que la entrada reloj, ya la tenemos establecida con la configuración anterior.



Ahora daríamos paso a la propia simulación  cambiando en primer lugar en la ventana de fuentes a Behavioral Simulation y haciendo doble click en la ventana de procesos en Simulate Behavioral Model.



En el momento que acabe de cargar nos mostrará la simulación mediante el simulador de ISE.



El ultimo paso antes de la programación del CDPL, sería la creación del archivo *.jed haciendo doble click en "implemente design".
Nos aparecerán todas las partes con un tick verde, a no ser que exista un error. En la ventana del editor de la derecha nos cargará un resumen con los datos del proyecto.



Proceso descarga al Cpld

Igual que en la entrada anterior, del sumador, ya tenemos generado el archivo *.jed, asi que podemos realizar la descarga al CPLD.

Abriremos Impact y crearemos un nuevo proyecto.


A continuación configuramos el dispositivo utilizando Jtag.

.
Una vez que nos haya cargado el entorno de Impact y se haya establecido la comunicación, abriremos el archivo conta4_bin.jed. A continuación realizaremos un borrado.


Finalizado el borrado, hacemos doble click en "Program" para iniciar la descarga


Opcionalmente podemos hacer una verificación con la opción "Verify"


Ahora pasamos a realizar las conexiones en la TAD , según el archivo generado de restricciones. Debo añadir que hicimos unas modificaciones en los pines.
Asignamos como Ce el pin 65.
Reloj el pin 12.
Y la barra de leds para el contador asignamos desde el pin 44 hasta el 57, quedando el primer led de la barra deshabilitado.


Este es el conexionado


Y por último aquí se puede ver la practica en funcionamiento



Descarga aquí el programa:

1 comentario:

  1. como seria este codigo para arduino y que se muestre los numeros hasta 15 en 4 leds??

    ResponderEliminar