Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniera de Telecomunicacin
VGA
Pulsadores
Interruptores
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
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.
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.
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.
XC2S200 PQ208
5C
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.
En las dos siguientes ventanas pinchamos en Next sin rellenar nada y en la ltima pinchamos en Finish.
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.
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
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.
Opciones Procesos
Fuentes
Smbolos
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.
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:
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.
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
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.
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
Representacin:
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).
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).
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).
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
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.
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.
AND de 2 entradas
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.
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.
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.
11
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.
Nuestro diseo final tiene 3 entradas (SW0, SW1 y BRN0) y 4 salidas (LD0, LD1, LD2 y LD3). Y deber tener el siguiente aspecto:
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.
12
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.
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.
13
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
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
14
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).
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.
15
Ejercicio 3. Decodificador de 2 a 4
Despus de haber comprobado la funcionalidad del circuito, nos disponemos a implementarlo en la FPGA
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
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
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:
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
17
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.
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
Aadimos las puertas y las conectamos con la seal de habilitacin. El circuito debera quedarnos como la siguiente figura
18
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.
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.
19
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.
20
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.
Por ltimo tendremos el decodificador en el editor de esquemticos (figura 46), en donde hay una pestaa para acceder al esquema en puertas.
Smbolo Smbolo
Ahora podremos utilizar este smbolo en otros diseos. En esto va a consistir el prximo ejercicio.
21