Está en la página 1de 21

Electrnica Digital I Curso 2006-2007

Ingeniera de Telecomunicacin

Diseo digital con esquemticos y FPGA


El objetivo de esta prctica guiada es introducir al alumno en el diseo con esquemticos mediante el uso de herramientas CAD (computer aided design)
Esta prctica consistir en un grupo de pequeos ejercicios con los que aprenderemos a programar una FPGA utilizando la herramienta de diseo electrnico digital ISE-WebPACK de Xilinx. En las prcticas de este curso realizaremos diseo con esquemticos: puertas lgicas, bloques combinacionales y secuenciales. Una vez que hayamos realizado el diseo en la herramienta, lo sintetizaremos y lo implementaremos en la FPGA. La sntesis es la tarea que transforma un diseo desde un nivel de descripcin a otro nivel de descripcin ms bajo. En nuestro caso, el diseo lo tendremos en esquemticos, y la herramienta lo transformar en una descripcin que indica las conexiones internas y configuracin de la FPGA para que funcione de la misma manera a como funcionara nuestro diseo original en esquemticos. Por suerte, la sntesis la realiza la herramienta automticamente, durante la sntesis nosotros nos ocuparemos de supervisar el proceso, analizando los errores y advertencias (warnings) que aparezcan. Antes de implementar el diseo en la FPGA es recomendable simular el diseo para comprobar que funciona correctamente. Es ms fcil detectar errores de diseo mediante simulacin, que en la placa. Imagina que has implementado el diseo en la FPGA y que sta no hace nada. Para descubrir el fallo tendras que usar un polmetro o un osciloscopio y comprobar los niveles de tensin de los pines. Adems con el inconveniente de que slo tienes accesibles los puertos de entrada y salida, y no las seales internas del diseo. Mediante la simulacin puedes comprobar todas las seales (internas y externas) y directamente de un vistazo, sin recurrir a medidas elctricas. Una vez que tenemos el diseo verificado por simulacin, lo implementaremos en la FPGA. La herramienta de diseo crear un fichero de configuracin (con extensin .bit). Este fichero contiene la informacin de la implementacin de nuestro diseo en la FPGA. Para programar la FPGA, en nuestro caso, utilizaremos un cable JTAG, que es un cable que cumple un protocolo de depuracin y programacin: Boundary Scan.. Este cable se conecta al puerto paralelo de nuestro ordenador. Una vez programada la FPGA, nuestro diseo estar implementado en la FPGA y por lo tanto estar funcionando. Dependiendo del diseo implementado, interactuar con el exterior de distinta manera, y podremos comprobar su correcto funcionamiento. Para las prcticas utilizaremos la placa Pegasus de Digilent, que contiene el modelo de FPGA Spartan-II XC2S200 con encapsulado PQ208. Esta FPGA tiene 200000 puertas lgicas equivalentes y 140 pines disponibles para el usuario. Con esta capacidad podemos hacer diseos digitales bastante grandes. La placa Pegasus contiene distintos perifricos que nos facilitarn la tarea del diseo, como por ejemplo: 8 LED, 4 displays de 7 segmentos, 4 botones, 8 interruptores, un puerto PS/2 (para ratn o teclado), y puerto VGA (para conectar un monitor), y varios puertos de expansin. En la figura 1 se muestra la placa Pegasus, y en la que se sealan varios de sus componentes. La foto de la placa no coincide exactamente con la versin de la placa que tenemos, y hay algunos componentes que no estn en el mismo lugar, aunque s todos los que se han sealado.
FPGA Conector JTAG Conector de expansin Memoria Flash

VGA

Alimentacin Jumpers de configuracin PS/2 LED Display 7 segmentos

Pulsadores

Interruptores

Figura 1: Placa Pegasus de Digilent

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

A medida que vayamos avanzando con la prctica iremos aprendiendo la funcionalidad de la placa. An as se puede consultar en la pgina web de la asignatura (http://gtebim.es/docencia/EDI) el manual de la placa (en ingls), y una versin resumida de dicho manual en espaol. Bueno, es hora ya de empezar con las practicas ...

1. Encender un LED
Cuando nos enfrentamos por primera vez a disear mediante una metodologa y herramientas nuevas, lo ms aconsejable es empezar con ejemplos lo ms sencillos posibles, y a partir de stos ir aumentando la complejidad del diseo. Son muchas cosas las que pueden fallar, tanto en el uso de las herramientas de diseo como en la placa de la FPGA. Y por consiguiente, si probamos con un diseo complejo, si no funciona no sabremos si es el diseo que est mal, o es algn paso que no hemos realizado bien. De manera similar, los informticos realizan un programa llamado "Hello world" (hola mundo), que es un programa muy sencillo que simplemente saca por pantalla dicho texto. Nosotros, como no tenemos pantalla, encenderemos un LED. Tambin podramos usar el display de 7 segmentos, pero su uso es algo ms complicado, y lo que queremos es la mayor sencillez. Ya hemos visto que la placa Pegasus tiene 8 LED disponibles para utilizar, cada uno de estos LED van conectados a un pin de la FPGA, de los 140 pines que hay disponibles. La conexin de los LED se muestra en la figura 2. En ella se indican qu pines de la FPGA estn conectados a los LED. Por ejemplo el LED nmero 0, est conectado al pin 46. Para facilitar esta identificacin, la placa lleva impresos la identificacin del LED y el pin asociado de la FPGA. As, podemos ver cmo al lado del LED 0 (LD0) de la placa est el nmero 46 entre parntesis. Podemos apreciar que esto se cumple para casi todos los componentes: pulsadores, interruptores, ...
'1' Encendido '0' Apagado 390 Spartan-II PIN 46 45 44 43 42 41 37 36 LED LD0 LD1 LD2 LD3 LD4 LD5 LD6 LD7

Figura 2: Conexin de los LED de la placa Pegasus

Viendo el esquema elctrico de la figura 2 podemos deducir que si ponemos un '1' lgico en el pin 46 de la FPGA encenderemos el LED, ya que con un '1' lgico la FPGA pondr 3,3 voltios en ese pin (que es el nivel de tensin de ese pin de la FPGA). Por el contrario, si ponemos un '0' lgico en el pin 45, mantendremos apagado el LED 1 (LD1), puesto que no circular corriente por l. As pues, ste ser el objetivo del primer ejercicio, poner un '1' en el pin 46 y un '0' en el pin 45. Si despus de programar la FPGA el LED 0 se enciende y el LED 1 se apaga habremos cumplido el objetivo. Con el resto de pines que van a los otros LED no haremos nada, en teora, hacindolo as no debera lucir, ya que por defecto la FPGA pone resistencias de pull-down en los pines no configurados, y una resistencia de pull-down pone la salida a tierra.

1.1. Diseo del circuito


El diseo del circuito lo haremos con la herramienta ISE-Foundation o con ISE-WebPack de Xilinx, esta ltima es la versin gratuita que se puede descargar en la pgina web de Xilinx. Esta prctica est referida a la versin 8.2, debido a que existen nuevas versiones, puedes descargar esta versin en: http://www.xilinx.com/ise/logic_design_prod/classics.htm Para arrancar el programa pincharemos en el icono de Xilinx o bien, desde: InicioTodos los programasXilinx ISE 8.2iProject Navigator Nos puede aparecer una ventana con el Tip of the day que son indicaciones que hace la herramientas cada vez que la arrancamos. Si las leemos habitualmente podemos ir aprendiendo poco a poco. Pinchamos en Ok, con lo que se cierra dicha ventana. Normalmente la herramienta abre el ltimo proyecto que se ha realizado. As que lo cerramos pinchando en: FileClose Project. Para empezar a crear nuestro nuevo proyecto, pinchamos en FileNew Project... y nos saldr la ventana New Project Wizard Create New Project como la mostrada en la figura 3. En ella pondremos el nombre del proyecto, que lo

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

llamaremos led0, indicamos la ruta donde guardaremos el proyecto, y en el ltimo recuadro, donde pone Top-Level Source Type seleccionaremos Schematic, ya que nuestro diseo lo haremos mediante esquemticos.

Figura 3: Ventana para la creacin de nuevo proyecto

Una vez que hemos rellenado los tres recuadros pinchamos en Next. Ahora nos aparece la ventana de seleccin del dispositivo (figura 5). En Product Category ponemos All. En la familia ponemos Spartan2, que es, como ya hemos dicho, la FPGA que tenemos en la placa de Pegasus. Los siguientes datos los podemos obtener a partir de la observacin del texto del encapsulado de la FPGA, que se muestran en la figura 4.

tipo de dispositivo encapsulado velocidad rango de operacin C: comercial

XC2S200 PQ208

cdigo de fecha cdigo de lote

5C

Figura 4: Interpretacin del texto del encapsulado de la FPGA

Para la seleccin de la herramienta de sntesis no tenemos alternativa, y para el simulador en esta prctica no es importante y lo dejamos en ISE Simulator (VHDL/Verilog). Al terminar pinchamos en Next.

Figura 5: Ventana para la seleccin del dispositivo del nuevo proyecto

En las dos siguientes ventanas pinchamos en Next sin rellenar nada y en la ltima pinchamos en Finish.

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

Ya tenemos el proyecto creado, y ahora nos disponemos a crear nuestro diseo. Para ello creamos una nueva fuente pinchando en ProjectNew Source. Esto har saltar a una nueva ventana que nos pedir que seleccionemos el tipo de fuente que queremos crear. Como estamos trabajando en esquemticos, seleccionamos Schematic, y nombramos al fichero led0. Este paso se muestra en la figura 6. Posteriormente pinchamos en Next y en la siguiente ventana en Finish.

Figura 6: Seleccin del tipo de nueva fuente

Si al terminar el proceso la herramienta nos muestra la siguiente imagen, debemos seleccionar el fichero que hemos creado (led0.sch) como se muestra en la figura 7. Tambin se puede pinchando en Windowled0.sch

Seleccionar led0.sch

Figura 7: Seleccin de la ventana del fichero led0.sch

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

Ahora veremos el plano donde podremos dibujar el esquemtico. En la figura 8 se muestra la apariencia de la herramienta. En ella se han movido las subventanas para tener una disposicin ms cmoda. Muvelas de manera que queden de una forma similar a la figura 8.

Plano donde dibujaremos el circuito

Opciones Procesos

Fuentes

Smbolos

Figura 8: Apariencia de la herramienta para empezar a realizar el esquema del circuito

En la figura 8 se han sealado algunas pestaas que utilizaremos durante el proceso de diseo y a las que se har referencia durante el ejercicio. As que familiarzate con sus nombres y vuelve a esta figura si durante la prctica no sabes a qu pestaa nos estamos refiriendo. Si quieres, pincha en ellas para ver el aspecto que tienen. La ventana de opciones permite cambiar el comportamiento de la herramienta al dibujar el esquemtico. La ventana de smbolos nos permite dibujar las puertas lgicas y los distintos componentes de nuestro diseo. En la ventana de fuentes se muestran los ficheros de nuestro diseo (en este caso slo hay uno: led0.sch). Y por ltimo, en la ventana de procesos se indica a la herramienta los comandos que se quieren ejecutar. Para empezar a disear volvemos a la ventana de smbolos. En ella, seleccionamos la categora General y tomamos el smbolo vcc. Una vez que los hemos seleccionado podemos apreciar que el puntero del ratn cambia de forma cuando lo situamos en el plano del circuito. Si pinchamos en cualquier parte del plano se situar el smbolo correspondiente a Vcc, que es la fuente de alimentacin, y por tanto, en electrnica digital es un '1' lgico (ver la figura 9). A veces la herramienta tarda un poco en situarlo, as que no desesperes y no pinches varias veces con el ratn, pues colocaras varias Vcc por tu circuito. Cuando hayas colocado tu fuente de alimentacin, seguramente la veas un poco pequea. Para ampliar la zona puedes pinchar en ViewZoomZoom In (o bien pulsar F8). Siempre que se haya seleccionado un smbolo, al pinchar con el ratn en el mapa del circuito se aade dicho smbolo. Esto puede resultar incmodo ya que podemos estar aadiendo componentes sin querer. Para quitar esta opcin y tener en cursor del ratn en modo de seleccin (con su flechita habitual) basta con pulsar la tecla de escape (Esc) o bien pulsar el icono de la flechita que est en la barra de herramientas . Si por error hemos incluido un smbolo ms de una vez, para borrarlo vamos al modo seleccin (tecla Esc) y pinchamos encima del smbolo que queramos eliminar. ste cambiar a color rojo, y entonces o bien lo borramos con la tecla Supr, o bien pinchamos con el botn derecho del ratn y del men seleccionamos Delete. Como podrs apreciar viendo dicho men, tambin puedes copiar y cortar de la misma manera que se hace en Windows.

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

Figura 9: Creacin de un nivel lgico alto: '1'

Ahora conectaremos dicho '1' lgico a un puerto de salida, para ello pincha en AddI/O Marker, o bien pincha en el icono de la barra de herramientas. Vers que la ventana de opciones cambia, en ella puedes determinar el tipo de puerto y cambiar la orientacin del smbolo dibujado. Esto lo puedes cambiar posteriormente seleccionando el smbolo y pinchando con el botn derecho del ratn. Ahora, con el ratn te pones encima del final del cable del smbolo de la fuente (VCC) y encima de l pinchas con el ratn. Aparecer el smbolo del puerto, con un nombre similar a XLXN_1. Seguramente est verticalmente, para ponerlo horizontalmente, seleccinalo (habiendo pulsado antes la tecla Esc) y pulsa CTRL+R para rotarlo y CTRL+M para voltearlo, tambin lo puedes hacer pinchando con el botn derecho del ratn. Como el nombre dado por la herramienta nos dice poco del puerto, le pondremos un nuevo nombre que nos ayude a identificar el puerto. Seleccionamos el puerto y pinchando con el botn derecho del ratn, seleccionamos la opcin Rename Port. En el cuadro de dilogo escribiremos LD0, que hace referencia al LED 0 de la placa. Hasta ahora, el aspecto de nuestro circuito debera ser el siguiente:

Figura 10: El 1-lgico conectado al puerto LD0

Ahora realizaremos el mismo proceso para conectar el puerto LD1 a un 0-lgico. Para ello, primero situamos el smbolo de tierra en el mapa del circuito. En la ventana superior de smbolos mantenemos la seleccin General y en la ventana inferior seleccionamos gnd (del ingls ground : tierra). Situamos la tierra en el mapa del circuito, y posteriormente, de la misma manera que hicimos anteriormente, la conectamos a otro puerto de salida. Este puerto de salida lo llamaremos LD1, haciendo referencia al LED nmero 1 de la placa.

Figura 11: Esquema final de nuestro circuito

Ya tenemos nuestro primer diseo hecho. Le damos a guardar (es algo que deberas hacer de vez en cuando), y procederemos a implementarlo en la FPGA.
Diseo digital con esquemticos y FPGA 6

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

1.2. Sntesis e implementacin del circuito


Ahora selecciona la ventana de procesos y la ventana de fuentes (Sources). En la ventana de fuentes verifica que el componente y el fichero que hemos creado est seleccionado: led0(led0.sch). Pincha en l una vez si no estuviese seleccionado. Aunque a los puertos de salida les hayamos dado unos nombres referidos a los LED que vamos a utilizar, la herramienta no sabe qu pines queremos utilizar. Para indicarle a la FPGA qu pines vamos a utilizar y con qu puertos de nuestro diseo los vamos a conectar deberemos lanzar la herramienta PACE. Esto lo hacemos desde la ventana de procesos, en ella despliega la seccin que dice User Constraints, pincha dos veces en Assign Package Pins (figura 12). Posteriormente nos saldr una ventana de aviso que nos indica que para este proceso se requiere aadir al proyecto un fichero del tipo UCF. Este tipo de ficheros son los que se usan para definir las conexiones de los pines de la FPGA con los puertos de nuestro diseo, y por tanto pinchamos en Yes.

Figura 12: Seleccin para la asignacin de pines

Ahora nos aparecer la herramienta Xilinx PACE. En ella podemos distinguir tres subventanas, la de la derecha, tiene 2 pestaas en su parte inferior, en una se muestra la arquitectura de la FPGA y en la otra la asignacin de los pines (ver figura 13). En la subventana de la parte inferior izquierda hay una tabla con los nombres de nuestros puertos: LD0 y LD1. En una columna se indica la direccin de los puertos (ambos de salida: output). Y en la siguiente columna (Loc) debemos indicar el pin de la FPGA con el que queremos unir nuestros puertos. Ten cuidado porque aqu hay un fallo de la herramienta, ya que si pinchas en las celdas de dicha columna aparece un men desplegable con los bancos de la FPGA (los pines se organizan en bancos), pero en estas celdas hay que indicar los pines y no los bancos. As que pinchamos en dichas celdas y ponemos nosotros mismos el pin que queremos conectar. As, para el puerto LD0 conectamos el pin 46, para ello escribimos P46 (el mismo nmero que indica la placa aadindole una P). Para el puerto LD1 le asignamos el pin P45.

Figura 13: Herramienta PACE para la asignacin de pines

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

Le damos a guardar y nos saldr una ventana que nos pregunta por el formato del fichero que guardar esta informacin. Aunque nos es indiferente, seleccionamos la primera opcin "XST Default <>", pinchamos en OK, cerramos la herramienta PACE y volvemos al ISE. En la ventana de procesos, tenemos ordenados los pasos que debemos tomar: "Synthesize-XST" , "Implement Design" y "Generate Programming File". As que con este orden, vamos a ir pinchando dos veces en cada uno de ellos hasta que veamos que se pone una signo verde de correcto en ellos. Cuando se ponga en verde, pinchamos en el siguiente. En realidad, si se ejecuta el ltimo paso sin haber ejecutado los anteriores, la herramienta realiza todo el proceso. Cuando tengamos todos los pasos correctamente ejecutados, la subventana de procesos debera mostrar el aspecto de la figura 14. Si es as, ya estamos en disposicin de programar la FPGA.

Figura 14: Aspecto de la subventana de procesos una vez que se ha sintetizado e implementado el diseo correctamente

1.3. Programacin de la FPGA


Si hemos llegado hasta aqu, ya habremos generado el fichero de programacin de la FPGA (que tiene extensin .bit). Ahora veremos los pasos que hay que dar para programarla. Lo primero que tenemos que hacer es quitar los tres jumpers de configuracin: M0, M1 y M2 del conector J4, (ver situacin en la figura 1). Para no perder las caperuzas conctalos a un slo conector dejando el otro al aire como se muestra en la figura 15.
jumper conectado jumper desconectado
su caperuza est perdida y pisoteada por el suelo del labo

jumper desconectado sin perder su caperuza

Representacin:

Figura 15: Jumpers y su conexin

Cuando estos jumpers estn conectados, la FPGA se programa desde la memoria flash, que guarda un fichero de configuracin para la FPGA. La Spartan-II es un tipo de FPGA voltil, esto es, requiere estar alimentada para mantener su configuracin, y por tanto, cuando la apagamos se borra lo que hayamos programado. Para evitar tener que programar la FPGA desde el ordenador cada vez que encendamos nuestro sistema electrnico, se pone una memoria flash que la programa automticamente. Si esto no fuese posible, este tipo de FPGA perderan casi toda su utilidad, ya que no seran autnomas y prcticamente slo valdran para hacer pruebas en el laboratorio. Como nosotros estamos haciendo pruebas, queremos programar la FPGA desde el ordenador y no desde la memoria flash, as que desconectamos los tres jumpers. Ahora hay que conectar el cable JTAG al puerto paralelo del ordenador y conectar el otro extremo del cable al conector JTAG de la placa (conector J2, ver figura 1). No debes conectarlo de cualquier manera, de las dos posibilidades que hay, hazlo de forma que los nombres de las seales de la placa coincidan con los nombres de las seales del cable. Esto es: TMS con TMS, TDI con TDI, ... , y VDD con VCC (este es el nico caso en que no coinciden exactamente).

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 1. Encender un LED

A continuacin conectamos el cable de alimentacin de la placa y lo enchufamos a la red elctrica (y cuando lo desenchufes fjate en que no se quede enchufado el adaptador de la clavija plana americana a clavija redonda europea). Al enchufar la placa vers que se enciende el LED LD8. Ya tenemos todo preparado para programar la FPGA y probar nuestro diseo. Volvemos al ordenador, al programa ISE. Dentro de "Generate Programming File" desplegamos el men pinchando el cuadradito con el signo + dentro: + . Y pinchamos dos veces en "Configure Device (iMPACT)". Esto arrancar la herramienta iMPACT, que nos mostrar un ventana en la que se ofrecen varias opciones, dejamos la opcin que hay por defecto "configure devices using Boundary-Scan (JTAG)" y "Automatically connect to a cable and identify Boudary-Scan chain". Aceptamos pinchando en Finish. Lo que hemos hecho es decirle a la herramienta que identifique los componentes que hay en la placa por medio del protocolo Boundary-Scan (JTAG). Despus de eso la herramienta procede a identificar a la placa y debera encontrar dos componentes: la FPGA y la memoria flash. La FPGA la identifica como xc2s200 y la memoria como xcf02s. A continuacin nos pedir los ficheros de programacin para cada uno de los componentes (figura 16).

Figura 16: iMPACT: componentes detectados y asignacin de un fichero de configuracin

Para la FPGA hay que asignar el fichero led0.bit, sabremos que est asignando el fichero a la FPGA porque sta tendr color verde y adems la extensin del fichero es .bit (para las memorias es otro). Seleccionamos el fichero y pinchamos en Open. Inmediatamente nos saldr una advertencia (Warning) que habla sobre el Startup Clock, esto no nos afecta y pulsamos en Ok. Ahora nos pide el fichero de configuracin de la memoria, como no vamos a programarla pulsamos en Cancel. En la ventana central del iMPACT tenemos los dos componentes, pinchando en cualquiera de ellos los seleccionamos y se pondrn de color verde. Si pinchamos en la FPGA (xc2s200) con el botn derecho del ratn nos saldr un men. En ste podemos asignar un fichero de configuracin diferente, o programarla (figura 17). Y esto es lo que vamos hacer, pinchamos en Program, y le damos a Ok a la siguiente ventana sin cambiar nada (si disemos a Verify dara un error de programacin).

Diseo digital con esquemticos y FPGA

Electrnica Digital I Curso 2006-2007

Ejercicio 2. Puertas lgicas, interruptores y pulsadores

Figura 17: Orden para programar la FPGA

Despus de la orden de programar la FPGA, aparece un cuadro que muestra la evolucin y, si todo ha salido bien, la herramienta nos avisar de que hemos tenido xito en la programacin mostrando un aviso como el de la figura

Figura 18: Programacin realizada con xito

Ahora miramos la placa y debera de haber tres LED encendidos: LD8: que indica que la placa est encendida LD9: que indica que se ha programado la FPGA LD0: que es LED que hacemos encender nosotros con el diseo de la FPGA El LED LD1 deber estar apagado, pues lo hemos puesto a un '0' lgico. Y el resto de LED tambin estarn apagados debido a las resistencias de pull-down que la FPGA pone en los puertos sin conectar. Con esto hemos terminado el primer ejercicio. Hemos comprobado que la placa y la herramienta funcionan, y ya podemos probar otros diseos ms complejos.

2. Puertas lgicas, interruptores y pulsadores


En este ejercicio vamos disear un circuito sencillo con el que podamos interactuar. Para ello usaremos como entradas del circuito los interruptores y pulsadores de la placa. Adems incluiremos alguna lgica interna. A partir de ahora no se va a realizar una explicacin tan detallada como la del primer ejercicio, si durante la ejecucin de este ejercicio has olvidado algn paso, repasa lo explicado en el ejercicio anterior. Analizando las conexiones de los interruptores (figura 19) vemos que cuando el interruptor est hacia arriba transmite un 1-lgico a la entrada de la FPGA. En la placa, a la derecha del interruptor SW0 se indica que hacia arriba son 3,3V y hacia abajo son 0V.

Diseo digital con esquemticos y FPGA

10

Electrnica Digital I Curso 2006-2007 Spartan-II 4,7k PIN 89 88 87 86 84 83 82 81 interruptor SW0 SW1 SW2 SW3 SW4 SW5 SW6 SW7 3,3V

Ejercicio 2. Puertas lgicas, interruptores y pulsadores Spartan-II 4,7k PIN pulsador 59 BTN0 58 BTN1 57 BTN2 154 BTN3

3,3V

4,7k

0,1F

Figura 19: Esquema elctrico de las conexiones de los interruptores y pulsadores en la placa Pegasus

Para los pulsadores, cuando estn pulsados transmiten un 1-lgico a la entrada, y cuando no estn pulsados ponen 0 voltios a la entrada. Observa que los pulsadores tienen un pequeo circuito con resistencias y un condensador, esto es para eliminar los rebotes que se producen al pulsar, y as enviar una seal sin ruido.

2.1. Diseo del circuito


Creamos un nuevo proyecto (FileNew Proyect...) llamado swt0 con las mismas caractersticas que el anterior. Creamos una nueva fuente de tipo esquemtico llamada swt0.sch. Y tendremos una pantalla similar a la de la figura 8. Como vamos a realizar el circuito con puertas lgicas, en la subventana de categoras (Categories) dentro de la ventana de smbolos, seleccionamos el elemento Logic. Veremos como en la subventana de smbolos (Symbols) aparecen nombres relativos a puertas lgicas (and12, and16, and2, or2, ...) el nmero indica el nmero de entradas de la puerta y si hay alguna b indica que tiene una entrada negada. La figura 20 muestra ejemplos de esta nomenclatura.
and2 and2b1 and3b2

AND de 2 entradas

AND de 2 entradas con una de ellas negada

AND de 3 entradas con dos de ellas negadas

Figura 20: Ejemplos de la nomenclatura de las puerta lgicas

Lo primero que haremos es aadir una puerta AND (and2) en el mapa, y conectamos sus entradas y salidas con puertos ( conectaremos sus entradas (AddI/O Marker). Los puertos de entrada los llamaremos SW0 y SW1, que se correspondern con los interruptores 0 y 1. Y el puerto de salida lo renombraremos como LD0, que ser el LED nmero cero. Quedando como muestra la figura 21.

Figura 21: Implementacin de la puerta AND

De manera similar conectaremos los interruptores SW2 y SW3 con la entrada de una puerta OR, y su salida la conectaremos a LD1, obteniendo algo similar a la figura 22.

Figura 22: Implementacin de la puerta OR

Ahora conectaremos un inversor al pulsador BTN0 y su salida la conectaremos a LD2:

Figura 23: Implementacin de un inversor

Adems queremos conectar la entrada del pulsador BTN0 a LD3. Como no podemos conectar directamente el puerto de entrada BTN0 al puerto de salida LD3, los conectamos mediante un buffer. Para ello, en la subventana de categoras (Categories) seleccionamos Buffer. Para el smbolo seleccionamos buf y lo situamos encima del inversor (fjate que el smbolo es el mismo pero sin la bolita a la salida, por eso no invierte). Conectamos la salida del buffer al LED LD3.

Diseo digital con esquemticos y FPGA

11

Electrnica Digital I Curso 2006-2007

Ejercicio 2. Puertas lgicas, interruptores y pulsadores

Figura 24: Buffer que queremos conectar a la misma entrada (BTN0) que la del inversor

Para conectar la entrada del buffer al puerto de entrada BTN0 necesitamos un cable. Los cables los implementan , o bien tecleando CTRL+W. Una vez que hemos seleccionado pinchando en AddWire, o bien con el icono este comando, veremos que en la ventana de opciones aparecen las opciones para situar los cables. En ella seleccionamos la segunda opcin: Use the Manual Method to add single line segments between the points you indicate. Y posteriormente pinchamos a la salida del puerto BTN0 y sin soltar el botn del ratn, nos dirigimos a la entrada del buffer.

Figura 25: Conexin final del buffer e inversor

Nuestro diseo final tiene 3 entradas (SW0, SW1 y BRN0) y 4 salidas (LD0, LD1, LD2 y LD3). Y deber tener el siguiente aspecto:

Figura 26: Diseo final del ejercicio

Para comprobar que hemos hecho la conexin bien podemos pinchar en ToolsCheck Schematic, y revisamos la ventana inferior (Console) para ver si ha detectado algn error o advertencia. Grabamos el esquemtico: FileSave (esto deberas hacerlo regularmente). Debido a que es un diseo pequeo podramos probar el circuito directamente en la placa, sin embargo vamos a simularlo antes para aprender el proceso.

2.2. Simulacin del circuito


Una vez que hemos terminado el esquemtico y lo hemos grabado, seleccionamos la ventana de fuentes (Sources) y la ventana de procesos (Processes). En la parte superior de la ventana de fuentes, vemos que indica Sources for: "Synthesis/Implementation" (ver figura 27). Normalmente no se ve muy claro, ya que en la ventana no suele haber hueco para mostrar todo el texto. El men desplegable permite seleccionar el tipo de ficheros fuentes con los que se quiere trabajar: para simulacin o para sntesis. Es importante conocer esta opcin debido a que nos puede ocurrir que no veamos un fichero que hemos creado a causa de tener seleccionada una opcin que no lo muestra. Por ejemplo, los ficheros para simulacin no se vern en caso de tener seleccionada la opcin de sntesis.

Diseo digital con esquemticos y FPGA

12

Electrnica Digital I Curso 2006-2007

Ejercicio 2. Puertas lgicas, interruptores y pulsadores

Seleccin de fuentes para: - Sntesis/Implementacin - Simulacin comportamental - Simulacin post-rutado

Figura 27: Seleccin de los ficheros fuente segn el tipo de actividad que se vaya a realizar

Como ahora queremos simular el circuito para comprobar su funcionamiento, seleccionamos Sources for: "Behavioural Simulation" . Como resultado de esta seleccin, la ventana de procesos cambia. Por lo tanto, si en cualquier momento ves que la ventana de procesos no est como piensas que debera estar, comprueba que has seleccionado el men de fuentes adecuado. Por ejemplo, puede pasar que quieras sintetizar el diseo y no aparezca el comando, entonces mira que opcin tienes seleccionada. Ahora crearemos un nuevo fichero para simular nuestro diseo. Mediante un cronograma, este fichero indicar al simulador qu valores toman las entradas en funcin del tiempo. En la ventana de procesos pinchamos dos veces en Create New Source. Y nos saldr una ventana como la de la figura 28, que es similar a la que ya vimos en la figura 6.

Figura 28: Creacin de una fuente para la simulacin

Tal como se muestra en la figura 28, seleccionamos el tipo de fichero como Test Bench Waveform. Lo nombramos tb_swt0 y pinchamos en Next. Test Bench significa "banco de pruebas", y eso es lo que queremos hacer, un banco de pruebas que demuestre que el diseo funciona como queremos. Waveform significa "forma de onda", as que nuestro banco de pruebas lo definiremos con las formas de onda de los puertos de entrada (ahora veremos cmo y por qu). La siguiente ventana nos pide que seleccionemos el diseo que vamos a probar con el banco de pruebas. En nuestro caso solo hay uno: swt0. Y as que pinchamos en Next y en la siguiente ventana en Finish. Surgir una ventana que nos pide mucha informacin (figura 29). Como nuestro circuito no tiene reloj ni elementos de memoria (ya los estudiaremos en el tema 7) es un circuito combinacional, y por tanto, en el apartado de Clock Information, seleccionamos Combinatorial (or interlal clock). El resto de opciones las dejamos como estn y pinchamos en Finish.

Diseo digital con esquemticos y FPGA

13

Electrnica Digital I Curso 2006-2007

Ejercicio 2. Puertas lgicas, interruptores y pulsadores

Figura 29: Opciones de la temporizacin de la simulacin

Y as llegamos a una ventana como la de la figura 30 en la que en la vertical se muestran los puertos de entrada y salida, y en la horizontal un eje de tiempos. En medio de estos dos ejes tendremos los valores de las seales segn el tiempo en que estemos.
Eje Eje temporal temporal

Puertos Puertos de de entrada entrada

Puertos Puertos de de salida salida

Valores Valores de de las las seales seales en en el el tiempo tiempo

Figura 30: Ventana de los cronogramas de las seales de simulacin

Ahora nosotros tenemos que asignar los valores de los puertos de entrada, para que a partir de ellos el simulador calcule los de salida. Inicialmente, la ventana asigna a todos los puertos de entrada el valor '0'. Nosotros vamos a asignar diversos valores para comprobar el funcionalidad de nuestro circuito en distintos casos. Antes de asignar los valores, vamos a agrupar las seales entre s, para comprobar de manera ms fcil los resultados de la simulacin. SW0 y SW1 van a las entradas de una puerta AND cuya salida es LD0. As que las vamos a poner juntas. Esto se hace pinchando en el nombre del puerto y arrastrndolo hasta donde queramos. Hacemos lo mismo con el resto: SW2, SW3 y LD1 juntas; y por ltimo BTN0 junto con LD2 y LD3. Pinchando en los recuadros azules del cronograma de los puertos de entrada modificamos su valor. Los cuadrados amarillos de los puertos de salida indican el tiempo en que stos se van a evaluar, y por tanto podrn cambiar de valor. En realidad los una seal no tiene estas limitaciones para modificar su valor, y esto se hace para la simulacin, para evitar que una seal se modifique mientras se est evaluando otra sobre la que influye. El ancho de estos cuadrados se define en la ventana de la figura 29, nosotros los dejaremos con su valor por defecto. Como tenemos un diseo pequeo, los valores de las entradas que vamos a asignar cubrirn todas las posibilidades para cada puerta. As, haremos que las entradas SW0 y SW1, de la puerta AND, tomen todos los valores de la tabla de verdad. En la figura 31 se muestran los valores que se quieren asignar a los puertos de entrada y los intervalos de

Diseo digital con esquemticos y FPGA

14

Electrnica Digital I Curso 2006-2007

Ejercicio 2. Puertas lgicas, interruptores y pulsadores

tiempo en que se asignarn. Tambin se muestra los valores que deben salir (los valores de los LED), y que ms adelante comprobaremos si coinciden con los de la simulacin.
LD0: AND tiempo 0-100ns 100-200 200-300 300-400 SW0 SW1 LD0 0 0 0 0 1 0 1 0 0 1 1 1 LD1: OR tiempo 0-100ns 100-200 200-300 300-400 SW2 SW3 LD1 0 0 0 0 1 1 1 0 1 1 1 1 LD2: NOT tiempo 0-200ns 200-400 BTN0 LD2 LD3 0 1 0 1 0 1

Figura 31: Asignacin de valores a los puertos de entrada de modo que cubran todas las posibilidades de la tabla de verdad

Asignando los valores de la figura 31 obtendremos un cronograma como el mostrado en la figura 32. Cuando lo tengamos hecho lo grabamos y comprobaremos cmo aparece en la ventana de fuentes: tb_swt0.tbw, y cmo dentro de l est nuestro diseo: UUT swt0(swt0.sch).

Figura 32: Valores en los puertos de entrada para la simulacin

Para simularlo, en la ventana de fuentes (Sources) el fichero tb_swt0.tbw debe estar seleccionado, y en la ventana de Procesos, dentro de Xilinx ISE Simulator, pincharemos dos veces en Generate Expected Simulation Results. Esto dar la orden para llevar a cabo la simulacin, y finalmente obtendremos los resultados de la simulacin en el cronograma (figura 33). Ahora debemos comprobar que los valores a las salidas se corresponden con los valores que esperamos (los de la figura 31). Debido a los tiempos en que se evalan y se modifican las seales (cuadrados amarillos y azules) veremos que las salidas tienen un retardo. Vemos, por ejemplo que la seal LD3 que es la misma que BTN0, va retardada 50 ns. Por ejemplo, para comprobar el buen funcionamiento de LD0 vemos que est a '1' slo cuando SW0 y SW1 estn a '1' (aadiendo el retardo del cuadrado). Esto es as porque es una AND. Para la LD1, como es una OR, valdr '1' cuando SW2 o SW3 sean '1'. Y por ltimo, vemos que LD2 y LD3 tienen valores complementarios, ya que LD2 invierte el valor de BTN0 y LD1 lo asigna directamente. As pues, se cumple lo que habamos esperado en la figura 31.

Diseo digital con esquemticos y FPGA

15

Electrnica Digital I Curso 2006-2007

Ejercicio 3. Decodificador de 2 a 4

Figura 33: Resultados de la simulacin

Despus de haber comprobado la funcionalidad del circuito, nos disponemos a implementarlo en la FPGA

2.3. Sntesis e implementacin del circuito


Los pasos que debemos tomar son casi los mismos que los que tomamos en el ejemplo anterior. Aunque ahora, como venimos de la simulacin, lo primero que tienes que hacer es seleccionar en la ventana de fuentes las fuentes para sntesis: Sources for: "Synthesis/Implementation" (ver figura 27). Debemos tambin activar la ventana de Procesos, que es donde le indicaremos a la herramienta que comandos de sntesis debe ejecutar (recuerda la figura 8). Antes de dar la orden de sintetizar debes asignar los pines de la FPGA. Ahora tenemos ms pines que asignar, repite el mismo proceso, y asigna los pines conforme a la numeracin de la placa (si se te ha olvidado, vuelve a mirarte el ejercicio anterior). Ya podemos sintetizar e implementar el circuito y pasarlo a la placa. Si todo ha salido bien, podrs comprobar que los LED de la placa se enciende segn tengas los interruptores y el pulsador 0.

3. Decodificador de 2 a 4
En este ejercicio implementaremos un decodificador de 2 a 4 como los que hemos visto en clase. Un decodificador de 2 a 4 recibe dos entradas que estn codificadas en binario y segn que nmero est codificado activa la salida correspondiente a ese nmero. Por ejemplo, si el nmero de la entrada es 10, activar la salida 2, ya que 10 es dos en binario. Adems, los decodificadores suelen tener una seal de habilitacin (enable) que en caso de no estar activa, todas las salidas estarn tambin inactivas independientemente del valor del resto de entradas. Por tanto, nuestro decodificador ser un bloque como el mostrado en la figura 34, cuya tabla de verdad tambin se muestra.
DECOD 2a4 S0 A0 S1 A1 S2 E S3 E 0 1 1 1 1 A1 X 0 0 1 1 A0 X 0 1 0 1 S3 0 0 0 0 1 S2 0 0 0 1 0 S1 0 0 1 0 0 S0 0 1 0 0 0

Figura 34: Decodificador de 2 a 4 y su tabla de verdad

3.1. Diseo del decodificador


Si nos fijamos en la tabla de verdad del decodificador, considerando que E=1, podemos ver que cada una de las salidas S0, S1, S2 y S3, se corresponde con un trmino mnimo de A1 y A0. Por ejemplo, la salida S0 es el trmino

A0 ); la salida S1 es el trmino mnimo 1 (m1=A1 A0), y de manera similar para el resto. mnimo 0 (m0=A1
Luego slo tendremos que aadir la habilitacin y obtendremos las salidas.
Diseo digital con esquemticos y FPGA 16

Electrnica Digital I Curso 2006-2007

Ejercicio 3. Decodificador de 2 a 4

Empecemos a disear: primero creamos un nuevo proyecto llamado decod2a4 con las mismas caractersticas de los proyectos anteriores. Creamos tambin una nueva fuente con el mismo nombre y de tipo esquemtico (Schematic). Ya tendremos que tener el plano vaco de nuestro circuito. Ya que el decodificador implementa todos los trminos mnimos, necesitaremos todas las entradas negadas y afirmadas (no negadas). Como los puertos no se pueden colocar solos (se deben conectar a las patas de algn componente), empezamos colocando los dos inversores de las entradas A1 y A0. Y posteriormente les conectamos los puertos de entrada (figura 35).

Figura 35: Inversores colocados a las entradas para formar los trminos mnimos

Ahora conectamos un cable a la salida de cada inversor (mediante el icono ), acurdate de seleccionar en la ventana de opciones: Use the Manual Method to add single line segments between the points you indicate. El otro lado del cable lo dejamos al aire: pinchamos en un punto ms alejado a la derecha y pulsamos la tecla ESC. Vamos a nombrar los terminales de cada cable que hemos dejado al aire. Seleccionamos AddNet Name (tambin ). Y en la ventana de opciones, en el apartado Name ponemos el nombre del cable. Para el negado hay un icono de A1 lo llamamos N_A1, y el negado de A0 lo llamamos N_A0. Para colocarlo nos ponemos al final del cable y pinchamos encima. Para colocar el segundo, cambiamos el nombre y repetimos la operacin. Hasta ahora final deberamos tener:

Figura 36: Inversores con nombre a la salida

A continuacin incluiremos 4 puertas AND de dos entradas que se encargarn de crear los 4 trminos mnimos. Por ahora simplemente las creamos una debajo de la otra, y conectamos un cable a la salida de cada una de ellas.

Figura 37: Inversores y las cuatro puertas AND para formar los trminos mnimos

Ahora vamos a conectar las entradas de cada una de las puertas. La puerta de arriba ser la del trmino mnimo cero (m0) y la de abajo m3. Para unir los cables de los puertos de entrada (negados o no) con las entradas de las puertas usamos el comando AddNet y dejamos la opcin por defecto: Use the Autorouter to add one or more line segments between the points you indicate. Al unir los cables veremos que en las uniones se forma un cuadradito que indica la

Diseo digital con esquemticos y FPGA

17

Electrnica Digital I Curso 2006-2007

Ejercicio 3. Decodificador de 2 a 4

conexin entre cable. Al terminar de unir los cables tendremos un circuito como el siguiente. Si te equivocas, usa CTRL+Z para deshacer la ltima unin.

Figura 38: Trminos mnimos del decodificador

Aade tambin los nombres de cada uno de los trminos mnimos (como se ve en la figura 38). Ahora solo nos queda incluir la seal de habilitacin. Cuando sta es cero, las salidas son cero, por tanto se puede aadir al final de cada trmino mnimo mediante una puerta AND. Recuerda que la puerta AND acta como una compuerta en el sentido que si E='0' la salida vale '0' (inhabilitada) y si E='1' la salida vale lo que la otra entrada (ver figura 39).
E Habilitacin
m0 E S0

E='0' Salida inhabilitada


m0 S0='0' E='0'

E='1' Salida habilitada


m0 S0=m0 E='1'

Figura 39: Puerta AND como habilitacin

Aadimos las puertas y las conectamos con la seal de habilitacin. El circuito debera quedarnos como la siguiente figura

Figura 40: Esquema de puertas del decodificador

Diseo digital con esquemticos y FPGA

18

Electrnica Digital I Curso 2006-2007

Ejercicio 3. Decodificador de 2 a 4

Antes de seguir, debemos guardar el fichero (CRTL+S) y comprobar si todas las conexiones estn bien hechas: ToolsCheck Schematic. Debemos ver los errores o advertencias que puedan aparecer en la consola (ventana de abajo). Si hubiese algn error, debemos comprobar qu cable o componente se trata, y moverlo para ver si realmente est conectado, y conectarlo bien. Vuelve a comprobar el esquemtico (ToolsCheck Schematic) cuantas veces haga falta hasta que no tengas errores, y el final guarda el fichero.

3.2. Comprobacin del diseo


Antes de implementarlo en la placa vamos a ver si est bien diseado. Para ello seguimos los mismos pasos que en el apartado 2.2: Seleccionamos en la ventana de fuentes (Sources) la opcin de Behavioural Simulation En la ventana de procesos pinchamos en Create New Source Seleccionamos el tipo: Test Bench Waveform, y nombramos el fichero tb_decod2a4 En la ventana de las opciones del cronograma (figura 29) indicamos que es un diseo combinacional Introducimos en el cronograma los valores de las entradas y guardamos el fichero del banco de pruebas Damos la orden de simular Generate Expected Simulated Values Comprobamos si los valores a las salidas son correctos. Como slo tenemos 3 entradas, introduciremos las 8 combinaciones posibles. stas se muestran en la figura 41.

Figura 41: Valores introducidos en el cronograma para la simulacin del decodificador

Despus de la simulacin, los resultados de las salidas son:

Figura 42: Cronograma de la simulacin

Podemos ver que los resultados de la simulacin son correctos. Cuando E='0' no hay ninguna salida activa, y cuando E='1' se van activando las distintas salidas segn cambian las entradas.

3.3. Implementacin del diseo


Ahora pasamos a implementarlo en el FPGA, si no te acuerdas, repasa lo visto en el apartado 1.2. Aqu te recordamos los pasos principales: Como venimos de la simulacin, lo primero que tienes que hacer es seleccionar en la ventana de fuentes las fuentes para sntesis: Sources for: "Synthesis/Implementation" (ver figura 27). Activa la ventana de Procesos, que es donde le indicaremos a la herramienta que comandos de sntesis debe ejecutar (recuerda la figura 8). Asigna los pines de la FPGA. Asigna el puerto A0 al interruptor SW0, el puerto A1 al interruptor SW1, y la habilitacin a el interruptor SW7. Los 4 LED de salida asgnalos consecutivamente. Sintetiza e implementa el diseo Comprueba que funciona como debe funcionar

3.4. Creacin de un bloque


Si hemos llegado hasta aqu significa que nuestro diseo funciona bien, tanto en simulacin como fsicamente en la placa, ahora vamos a crear un mdulo que integre este codificador para que cada vez que lo necesitemos implementar en diseos ms grandes, no tengamos que crear todo el esquema de puertas sino que conectaremos un bloque como el de la figura 34. Sera similar a un componente MSI (Medium-Scale Integration) como los chips disponibles para diseo con componentes discretos. Por ejemplo los decodificadores 74LS138 y 74LS139.

Diseo digital con esquemticos y FPGA

19

Electrnica Digital I Curso 2006-2007

Ejercicio 3. Decodificador de 2 a 4

Esto nos permitir subir el nivel de abstraccin, y disear con bloques lgicos en vez de con puertas, lo que har que podamos disear de manera ms rpida y con menos probabilidad de equivocarnos, ya que cada uno de los bloques estn probados y sabemos que funcionan correctamente. Volvemos a la vista del mapa del circuito: dentro de la ventana de fuentes pinchamos dos veces en el decodificador (decod2a4) o bien seleccionndolo directamente en la pestaa de la ventana grande. Para crear el mdulo (Xilinx lo llama smbolo) pinchamos en ToolsSymbol Wizard, lo que har que aparezca una ventana (figura 43) que nos preguntar para qu componente vamos a crear un smbolo. En la opcin Pin Name Source, seleccionamos Using Schematic, y aparecer el nico esquemtico que hemos creado en este proyecto: decod2a4.

Figura 43: Seleccin del componente para el que vamos a crear un smbolo

Pinchamos en Next y aparecer una ventana con las entradas y salidas del mdulo. En ella podemos cambiar el lugar donde aparecern (derecha o izquierda) y el orden. Ponemos el mismo orden de la figura 44.

Figura 44: Determinacin de la posicin de los pines del smbolo

Diseo digital con esquemticos y FPGA

20

Electrnica Digital I Curso 2006-2007

Ejercicio 4. Decodificador de 3 a 8

Pinchando en Next la siguiente ventana nos preguntan por las distancias y los tamaos del smbolo. Lo dejamos como est, o bien, si lo prefieres de otra manera, puedes modificarlo a tu gusto. Volvemos a pinchar en Next, y tendremos una ventana con el smbolo de nuestro decodificador (figura 45). Si nos gusta pinchamos en Finish.

Figura 45: Aspecto final del smbolo de nuestro decodificador

Por ltimo tendremos el decodificador en el editor de esquemticos (figura 46), en donde hay una pestaa para acceder al esquema en puertas.

Esquema Esquema en en puertas puertas


Figura 46: Smbolo del decodificador en el editor de esquemticos

Smbolo Smbolo

Ahora podremos utilizar este smbolo en otros diseos. En esto va a consistir el prximo ejercicio.

Diseo digital con esquemticos y FPGA

21

También podría gustarte