Está en la página 1de 94

Departamento de Tecnologa Electrnica

Diseo digital con esquemticos y FPGA. v1.8

Felipe Machado Snchez


Norberto Malpica Gonzlez de Vega
Susana Borromeo Lpez

Departamento de Tecnologa Electrnica

ndice
ndice .................................................................................................................................................................................. 1
1. Introduccin..................................................................................................................................................................... 3
2. Encender un LED............................................................................................................................................................ 4
2.1. Diseo del circuito ............................................................................................................................................................................ 5
2.2. Sntesis e implementacin del circuito............................................................................................................................................ 10
2.3. Programacin de la FPGA.............................................................................................................................................................. 11

3. Puertas lgicas, interruptores y pulsadores .................................................................................................................. 15


3.1. Diseo del circuito .......................................................................................................................................................................... 15
3.2. Simulacin del circuito .................................................................................................................................................................... 17
3.3. Sntesis e implementacin del circuito............................................................................................................................................ 20

4. Decodificador de 2 a 4 .................................................................................................................................................. 21
4.1. Diseo del decodificador ................................................................................................................................................................ 21
4.2. Comprobacin del diseo ............................................................................................................................................................... 23
4.3. Implementacin del diseo ............................................................................................................................................................. 24
4.4. Creacin de un bloque.................................................................................................................................................................... 24

5. Decodificador de 3 a 8 .................................................................................................................................................. 27
5.1. Diseo del decodificador con bloques ............................................................................................................................................ 28

6. Decodificador de 4 a 16 ................................................................................................................................................ 30
6.1. Diseo del decodificador con bloques prediseados ..................................................................................................................... 31
6.2. Comprobacin del diseo ............................................................................................................................................................... 33

7. Convertidor de hexadecimal a 7 segmentos ................................................................................................................. 35


7.1. Diseo del convertidor de hexadecimal a 7 segmentos ................................................................................................................ 35
7.2. Implementacin .............................................................................................................................................................................. 39

8. Codificadores ................................................................................................................................................................ 42
8.1. Codificador de 4 a 2 sin prioridad ................................................................................................................................................... 42
8.2. Codificador de 4 a 2 con prioridad, lnea activa y habilitacin........................................................................................................ 42
8.3. Codificador de 4 a 2 con conversin a 7 segmentos...................................................................................................................... 44

9. Extensin de la capacidad de un codificador ................................................................................................................ 46


9.1. Codificador de 8 a 3 a partir de codificadores de 4 a 2 .................................................................................................................. 46
9.2. Inclusin del convertidor a siete segmentos................................................................................................................................... 47
9.3. Codificador mayores....................................................................................................................................................................... 47

10. Comparadores ............................................................................................................................................................ 48


10.1. Comparador de un bit ................................................................................................................................................................... 48
10.2. Comparador de dos bits ............................................................................................................................................................... 48
10.2.1. Diseo del comparador ....................................................................................................................................................... 50

11. Comparadores en cascada ......................................................................................................................................... 51


12. El multiplexor............................................................................................................................................................... 55
12.1. Especificaciones ........................................................................................................................................................................... 55
12.2. Diagrama de bloques del circuito ................................................................................................................................................. 55
12.3. Diseo........................................................................................................................................................................................... 57

13. El sumador .................................................................................................................................................................. 60


13.1. Especificaciones ........................................................................................................................................................................... 60
13.2. Diseo........................................................................................................................................................................................... 60

14. Sumador/restador ....................................................................................................................................................... 63


14.1. Especificaciones ........................................................................................................................................................................... 63
14.2. Diagrama de bloques.................................................................................................................................................................... 63
14.2.1. Bloque sumador/restador .................................................................................................................................................... 64
14.2.2. Bloque de visualizacin....................................................................................................................................................... 66
14.3. Diseo........................................................................................................................................................................................... 68
14.4. Comprobacin del diseo ............................................................................................................................................................. 69

15. Unidad aritmtico lgica .............................................................................................................................................. 71


15.1. Especificaciones ........................................................................................................................................................................... 71
15.2. Diagrama de bloques.................................................................................................................................................................... 71
15.3. Diseo........................................................................................................................................................................................... 74
15.3.1. Multiplicador por 2 ............................................................................................................................................................... 74
15.3.2. Circuito comparador, "mayor" ............................................................................................................................................. 75
15.3.3. Circuito operacin lgica AND ............................................................................................................................................ 75
15.3.4. Multiplexor de 4 entradas datos con habilitacin ................................................................................................................ 76
15.3.5. Codificador con prioridad de 4 entradas ............................................................................................................................. 77
15.3.6. Componente de mayor jerarqua......................................................................................................................................... 78
15.4. Implementacin y comprobacin .................................................................................................................................................. 78

16. Elementos de memoria ............................................................................................................................................... 79


16.1. Especificaciones ........................................................................................................................................................................... 79
16.2. Diseo........................................................................................................................................................................................... 79
16.3. Implementacin ............................................................................................................................................................................ 79

17. Interruptor con pulsador .............................................................................................................................................. 81


17.1. Ideas ............................................................................................................................................................................................. 81
Diseo digital con esquemticos y FPGA. v1.8 - - 04/06/2008

Departamento de Tecnologa Electrnica

ndice

17.1.1. Conectando el pulsador a la entrada del biestable T .......................................................................................................... 81


17.1.2. Conectando el pulsador al reloj del biestable T .................................................................................................................. 81
17.2. Circuito detector de flanco ............................................................................................................................................................ 82
17.3. Solucin al cronograma ................................................................................................................................................................ 83

18. Parpadeo de un LED................................................................................................................................................... 84


18.1. Especificaciones ........................................................................................................................................................................... 84
18.2. Diseo........................................................................................................................................................................................... 84

19. Reloj digital.................................................................................................................................................................. 87


19.1. Especificaciones ........................................................................................................................................................................... 87
19.2. Contador de 10 segundos ............................................................................................................................................................ 87
19.2.1. Bloque segundero ............................................................................................................................................................... 87
19.2.2. Bloque de mayor jerarqua .................................................................................................................................................. 89
19.3. Reloj digital con segundos y minutos ........................................................................................................................................... 89
19.3.1. Implementacin ................................................................................................................................................................... 90
19.3.2. Solucin............................................................................................................................................................................... 91

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

1. Introduccin

1. Introduccin
El objetivo de esta prcticas guiadas es introducir al alumno en el diseo con esquemticos mediante el uso
de herramientas CAD (computer aided design). Estas prcticas parten de un nivel elemental y se pretende que
puedan ser seguidas como complemento en un curso bsico de electrnica digital. Estas prcticas se han
desarrollado en el departamento de Tecnologa Electrnica 1 de la Universidad Rey Juan Carlos.
Estas prcticas consistirn en un grupo de ejercicios con los que aprenderemos a programar una FPGA
utilizando la herramienta gratuita de diseo electrnico digital ISE-WebPACK de Xilinx 2. En las prcticas de
este curso realizaremos diseos 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 3, que contiene una FPGA de Xilinx de modelo
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.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 en el laboratorio y hay algunos componentes que no estn en el mismo lugar,
aunque s todos los que se han sealado.

http://gtebim.es
Herramienta gratuita que se puede descargar en http://www.xilinx.com
3 http://www.digilentinc.com
1
2

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica


Conector
de expansin

Conector JTAG

FPGA

2. Encender un LED
Memoria
Flash

VGA

Alimentacin
Jumpers de
configuracin
PS/2
Display
7 segmentos

LED

Pulsadores

Interruptores

Figura 1.1: Placa Pegasus de Digilent


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 ...

2. 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 se 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. Por consiguiente, si de primeras probamos con un diseo complejo, en
caso de que no funcione correctamente 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 distintos pines de la FPGA, de los 140 pines que hay disponibles. La conexin de los LED se
muestra en la figura 2.1. 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.1: Conexin de los LED de la placa Pegasus


Viendo el esquema elctrico de la figura 2.1 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
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

2. Encender un LED

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 deberan 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.

2.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 9.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 9.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 2.2. En ella pondremos el nombre del
proyecto, que lo llamaremos led0, indicamos la ruta donde guardaremos el proyecto
(C:/practica/edi/tunombre). Respecto al nombre y a la ruta, no es conveniente trabajar desde un
dispositivo de memoria USB, ni tampoco incluir en la ruta o el nombre ni acentos ni ees, ni caracteres
extraos, lo ms conveniente es limitarse a caracteres alfanumricos, y usar el guin bajo en vez del espacio.
Para el ltimo recuadro de la ventana, donde pone Top-Level Source Type seleccionaremos Schematic, ya que
nuestro diseo lo haremos mediante esquemticos.

Figura 2.2: 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 2.4). 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 2.3.
Hay que observar los valores que tiene la FPGA de nuestra placa, ya que en algunas el tipo es XC2S200 y en
otras es XC2S50. Lo mismo sucede con la velocidad, en algunas es 5 y otras 6.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

tipo de dispositivo
encapsulado

XC2S200

2. Encender un LED

cdigo de fecha

PQ208
cdigo de lote

velocidad

5C

rango de operacin
C: comercial

Figura 2.3: 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). En el lenguaje de descripcin de hardware
preferido (Preferred Language) se deja el VHDL. Al terminar pinchamos en Next.

Mirar en la FPGA
Mirar en la FPGA

Figura 2.4: 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.
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 2.5. Posteriormente pinchamos en Next y en la siguiente ventana en Finish.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

2. Encender un LED

Figura 2.5: 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 2.6. Tambin se puede pinchando en Windowled0.sch

Seleccionar led0.sch

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


Ahora veremos el plano donde podremos dibujar el esquemtico. En la figura 2.7 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 2.7. Esta operacin no siempre es fcil de realizar y a
veces las subventanas se resisten a ser movidas. Otra opcin es pinchar en WindowTile Vertically. Luego, para
dejarlo como muestra la figura 2.7, habra que maximizar la subventana del plano donde se dibuja el
circuito, y seleccionar la pestaa de opciones y la pestaa de smbolos.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

2. Encender un LED

Plano donde dibujaremos el circuito

Opciones

Fuentes

Smbolos

Procesos

Figura 2.7: Apariencia de la herramienta para empezar a realizar el esquema del circuito
En la figura 2.7 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 2.8). 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. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

2. Encender un LED

Figura 2.8: 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
de la barra de herramientas. Vers que la ventana de opciones cambia, en ella puedes
en el icono
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 vertical, para ponerlo horizontal,
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. Para ello, 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 2.9: 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 2.10: Esquema final de nuestro circuito


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

Departamento de Tecnologa Electrnica

2. Encender un LED

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. Fjate que cuando no has guardado, el nombre del circuito que
est en la pestaa del esquemtico tiene un asterisco.

2.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 2.11). 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 2.11: 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 2.12).
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.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

10

Departamento de Tecnologa Electrnica

2. Encender un LED

Figura 2.12: Herramienta PACE para la asignacin de pines


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 (puede salir en amarillo si indicando que hay advertencias -warnings- que muchas
veces no son importantes). 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 2.13. Si es as, ya estamos en disposicin de programar la FPGA. Puede ser que aparezca
algn warning y que el proceso de sntesis tenga un smbolo amarillo triangular. Los warnings se pueden ver
en la ventana de design summary. De todos modos, en muchas ocasiones estas advertencias no son relevantes.

Figura 2.13: Aspecto de la subventana de procesos una vez que se ha sintetizado e implementado el diseo
correctamente. En la ventana de la derecha, en el proceso de sntesis ha habido advertencias (warnings) que no
siempre son importantes, y por eso tiene un smbolo triangular de color amarillo

2.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.1). Para no perder las caperuzas conctalos a un slo conector dejando el otro al
aire como se muestra a la derecha de la figura 2.14.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

11

Departamento de Tecnologa Electrnica


jumper
conectado

2. Encender un LED
jumper desconectado
sin perder su caperuza

jumper
desconectado
su caperuza
est perdida y
pisoteada por el
suelo del labo

Representacin:

Figura 2.14: Jumpers y su conexin


Cuando estos jumpers estn conectados, la FPGA se programa desde la memoria flash de la placa, en la que se
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. 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 perdera 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.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 VDD o con VCC (ste es el
nico caso en que pueden no coincidir exactamente, depende del conector).
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 esto 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 2.15).

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

12

Departamento de Tecnologa Electrnica

2. Encender un LED

Figura 2.15: 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 xc2s50) con el botn
derecho del ratn, nos saldr un men. Puede pasar que al pinchar no salga y que aparezca de nuevo la
ventana de la figura 2.15, eso es que se ha quedado el puntero del ratn enganchado; para evitarlo, pincha
con el botn izquierdo en cualquier parte de la ventana fuera de los smbolos de los chips y vuelve a
intentarlo. Ahora, en el men que aparece podemos asignar un fichero de configuracin diferente o
programar la FPGA (figura 2.16). 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).

Figura 2.16: Orden para programar la FPGA


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

13

Departamento de Tecnologa Electrnica

2. Encender un LED

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 2.17: Programacin realizada con xito


Ahora miramos la placa y debera haber tres LED encendidos:
LD8: que indica que la placa est encendida
LD9: que indica que se ha programado la FPGA
LD0: que es el 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.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

14

3. Puertas lgicas, interruptores y


pulsadores

Departamento de Tecnologa Electrnica

3. 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 3.1) 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.
PIN
89
88
87
86
84
83
82
81

4,7k

Spartan-II

3,3V

Spartan-II

3,3V

interruptor
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7

4,7k

4,7k

0,1F

PIN pulsador
59
BTN0
58
BTN1
57
BTN2
154 BTN3

Figura 3.1: 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.

3.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 2.7.
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 3.2 muestra ejemplos
de esta nomenclatura.
and2

AND de 2 entradas

and2b1

AND de 2 entradas con


una de ellas negada

and3b2

AND de 3 entradas con


dos de ellas negadas

Figura 3.2: 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 (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 3.3.

Figura 3.3: Implementacin de la puerta AND


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

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

OR,

y su salida la

15

3. Puertas lgicas, interruptores y


pulsadores

Departamento de Tecnologa Electrnica

Figura 3.4: Implementacin de la puerta OR


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

Figura 3.5: 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.

Figura 3.6: 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

, o bien tecleando CTRL+W. Una vez que hemos


implementan pinchando en AddWire, o bien con el icono
seleccionado este comando, veremos que en la ventana de opciones aparecen las opciones para situar los
cables. En ella seleccionamos la primera opcin: Use the Autorouter to add one o more line segments between the
points you indicate. Y posteriormente pinchamos al cable que est entre la salida del puerto BTN0 y la entrada
del inversor; sin soltar el botn del ratn, nos dirigimos a la entrada del buffer. Puede pasar que la
herramienta d un mensaje que diga: The pin 'I' is already connected to a net. Only one net is allowed to connect to
a pin. Con esto quiere decir que slo se puede conectar un cable a un pin. Pero lo que s se puede hacer es
conectarlo al cable que une el pin con la entrada del inversor. Puede ser que tengas poco espacio entre el pin
y la entrada del inversor. Para alargar ese cable, puedes seleccionar y arrastrar el pin de entrada a la
izquierda. Ahora ser ms fcil conectar la entrada del buffer con el cable.

Figura 3.7: Conexin final del buffer e inversor


Nuestro diseo final tiene 3 entradas (SW0,
siguiente aspecto:

SW1

BRN0)

y 4 salidas (LD0,

LD1, LD2

LD3).

Y deber tener el

Figura 3.8: Diseo final del ejercicio

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

16

Departamento de Tecnologa Electrnica

3. Puertas lgicas, interruptores y


pulsadores

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.

3.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 3.9). El men desplegable permite seleccionar el tipo de ficheros fuente 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.
Seleccin de fuentes para:
- Sntesis/Implementacin
- Simulacin comportamental
- Simulacin post-rutado

Figura 3.9: 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 qu 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 3.10, que es similar
a la que ya vimos en la figura 2.5.

Figura 3.10: Creacin de una fuente para la simulacin


Tal como se muestra en la figura 3.10, 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

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

17

Departamento de Tecnologa Electrnica

3. Puertas lgicas, interruptores y


pulsadores

"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 3.11). 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 internal clock). Adems, deseleccionamos la
casilla GSR (FPGA) y el resto de opciones las dejamos como estn y pinchamos en Finish.

Figura 3.11: Opciones de la temporizacin de la simulacin


Y as llegamos a una ventana como la de la figura 3.12 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.

Puertos
Puertos de
de entrada
entrada

Eje
Eje temporal
temporal

Puertos
Puertos de
de salida
salida

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

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

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

18

3. Puertas lgicas, interruptores y


pulsadores

Departamento de Tecnologa Electrnica

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. El ancho
de estos cuadrados se define en la ventana de la figura 3.11, 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 3.13 se muestran los valores que se quieren asignar a los puertos
de entrada y los intervalos de 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.
LD1: OR

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

tiempo
0-100ns
100-200
200-300
300-400

LD2: NOT
SW2 SW3 LD1
0
0
0
0
1
1
1
0
1
1
1
1

tiempo
0-200ns
200-400

BTN0 LD2 LD3


0
1
0
1
0
1

Figura 3.13: 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 3.13 obtendremos un cronograma como el mostrado en la figura 3.14.
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 4: UUT swt0(swt0.sch).

Figura 3.14: 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 Simulate Behavioral Model. Esto
dar la orden para llevar a cabo la simulacin, y finalmente obtendremos los resultados de la simulacin en
el cronograma (figura 3.15). Las seales se pueden haber descolocado y las volvemos a colocar en el mismo
orden. Ahora debemos comprobar que los valores a las salidas se corresponden con los valores que
esperamos (los de la figura 3.13).
Para comprobar el buen funcionamiento de LD0 vemos que est a '1' slo cuando SW0 y SW1 estn a '1'. 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 3.13.

UUT indica el componente que se est comprobando, es el acrnimo del ingls: Unit Under Test

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

19

Departamento de Tecnologa Electrnica

3. Puertas lgicas, interruptores y


pulsadores

Figura 3.15: Resultados de la simulacin


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

3.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 3.9). Debemos tambin
activar la ventana de procesos, que es donde le indicaremos a la herramienta que comandos de sntesis debe
ejecutar (recuerda la figura 2.7).
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 en funcin del estado de los interruptores y el pulsador 0.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

20

Departamento de Tecnologa Electrnica

4. Decodificador de 2 a 4

4. 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 102,
activar la salida 2, ya que 102 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 4.1, cuya tabla de verdad
tambin se muestra.
DECOD 2a4
A0

S0
S1

A1

S2
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 4.1: Decodificador de 2 a 4 y su tabla de verdad

4.1. Diseo del decodificador


Si nos fijamos en la tabla de verdad del decodificador (figura 4.1), 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
A0
); la salida S1 es el trmino mnimo 1 (m1= A1
A0), y de manera
salida S0 es el trmino mnimo 0 (m0= A1
similar para el resto.
Luego slo tendremos que aadir la habilitacin y obtendremos las salidas.
Empecemos a disear: primero creamos un nuevo proyecto llamado decod2a4 en el directorio
Recuerda no poner tildes ni ees, y mejor si no pones espacios. El proyecto debe
tener 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.

C:/practica/edi/tunombre.

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 4.2).

Figura 4.2: Inversores colocados a las entradas para formar los trminos mnimos
). El otro lado del cable lo
Ahora conectamos un cable a la salida de cada inversor (mediante el icono
dejamos al aire: pinchamos en un punto ms alejado a la derecha y pulsamos la tecla ESC. El extremo del
cable tendr un cuadradito rojo que indica que sin conectar (al aire).
Vamos a nombrar los terminales de cada cable que hemos dejado al aire. Seleccionamos AddNet Name
(tambin hay un icono
). Y en la ventana de opciones, en el apartado Name ponemos el nombre del cable.
Para el negado 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.
Llegados a este punto, deberamos tener:

Figura 4.3: Inversores con nombre a la salida

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

21

Departamento de Tecnologa Electrnica

4. Decodificador de 2 a 4

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 4.4: 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 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 4.5: Trminos mnimos del decodificador


Aade tambin los nombres de cada uno de los trminos mnimos (como se ve en la figura 4.5). Para facilitar
la tarea, puedes empezar por m0, y si seleccionas dentro de la ventana de opciones, en el apartado que indica
After naming the branch or net marcas la opcin: Increase the name; el ndice de trmino mnimo se
incrementar por s solo.
Ahora slo 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
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

22

Departamento de Tecnologa Electrnica

4. Decodificador de 2 a 4

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 4.6).
E Habilitacin
m0
E

S0

E='0' Salida inhabilitada


m0
E='0'

S0='0'

E='1' Salida habilitada


m0
E='1'

S0=m0

Figura 4.6: Puerta AND como habilitacin


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

Figura 4.7: Esquema de puertas del decodificador


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, 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.

4.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 3.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 3.11) indicamos que es un diseo combinacional y
deseleccionamos GSR (FPGA), que est dentro Global Signals. Para terminar pinchamos en Finish.
Introducimos en el cronograma los valores de las entradas y guardamos el fichero del banco de pruebas
Damos la orden de simular Simulate Behavioral Model.
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
4.8.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

23

Departamento de Tecnologa Electrnica

4. Decodificador de 2 a 4

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


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

Figura 4.9: 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.

4.3. Implementacin del diseo


Ahora pasamos a implementarlo en el FPGA, si no te acuerdas, repasa lo visto en el apartado 2.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 3.9).
Activa la ventana de procesos, que es donde le indicaremos a la herramienta que comandos de sntesis debe
ejecutar (recuerda la figura 2.7).
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

4.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 4.1. 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.
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 4.10) 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.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

24

Departamento de Tecnologa Electrnica

4. Decodificador de 2 a 4

Figura 4.10: 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 4.11.

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


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 4.12). Si nos gusta
pinchamos en Finish.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

25

Departamento de Tecnologa Electrnica

4. Decodificador de 2 a 4

Figura 4.12: Aspecto final del smbolo de nuestro decodificador


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

Esquema
Esquema en
en puertas
puertas

Smbolo
Smbolo

Figura 4.13: Smbolo del decodificador en el editor de esquemticos


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

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

26

Departamento de Tecnologa Electrnica

5. Decodificador de 3 a 8

5. Decodificador de 3 a 8
Hemos realizado el decodificador de 2 a 4, utilizando dos interruptores encendamos uno de los cuatro
primeros LED. Ahora vamos a construir un decodificador que encienda uno de los 8 LED, utilizaremos para
ello los tres primeros interruptores.
Aunque este ejercicio ya se ha explicado en clase, vamos a repasarlo un poco. En la figura 5.1 se muestra el
bloque final que queremos obtener y la tabla de verdad. La tabla de verdad es muy similar a la del
codificador de 2 a 4 (figura 4.1).
Podramos hacer el ejercicio de la misma manera que el decodificador de 2 a 4, sin embargo, si lo hacemos
uniendo dos decodificadores de 2 a 4 lograremos disearlo de manera mucho ms rpida y entendible. Es
difcil de entender el funcionamiento de un diseo grande en puertas, mientras que si lo hacemos con
bloques es ms claro.
S0

A0

S1
DECOD 3a8

A1
A2

E
0
1
1
1
1
1
1
1
1

S2
S3
S4
S5
S6

S7

A2
X
0
0
0
0
1
1
1
1

A1
X
0
0
1
1
0
0
1
1

A0
X
0
1
0
1
0
1
0
1

S7
0
0
0
0
0
0
0
0
1

S6
0
0
0
0
0
0
0
1
0

S5
0
0
0
0
0
0
1
0
0

S4
0
0
0
0
0
1
0
0
0

S3
0
0
0
0
1
0
0
0
0

S2
0
0
0
1
0
0
0
0
0

S1
0
0
1
0
0
0
0
0
0

S0
0
1
0
0
0
0
0
0
0

Figura 5.1: Esquema del decodificador de 3 a 8 y su tabla de verdad


Si analizamos la tabla de verdad y la dividimos en tres partes segn los valores de
podemos ver que:

Cuando E=0, el circuito est inactivo


Cuando E=1, y A2=0, las seales S7 a
decodificador de 2 a 4.
Cuando E=1, y A2=1, las seales S3 a
decodificador de 2 a 4.
E
0

A2

(figura 5.2),

S4

estn inactivas, y las seales

S3

S0

se comportan igual que el

S0

estn inactivas, y las seales

S7

S4

se comportan igual que el

A2 A1 A0
X X X

S7 S6 S5 S4 S3 S2 S1 S0
0 0 0 0 0 0 0 0
todas '0'

E
1
1
1
1

A2
0
0
0
0

A1
0
0
1
1

A0
0
1
0
1

S7
0
0
0
0

S6
0
0
0
0

S5
0
0
0
0

S4
0
0
0
0

todas '0'

misma
secuencia
E
1
1
1
1

A2
1
1
1
1

A1
0
0
1
1

A0
0
1
0
1

S7
0
0
0
1

S6
0
0
1
0

S5
0
1
0
0

S3
0
0
0
1

S2
0
0
1
0

S1
0
1
0
0

S0
1
0
0
0

A2 = '0'

igual que decod2a4


S4
1
0
0
0

S3
0
0
0
0

igual que decod2a4

S2
0
0
0
0

S1
0
0
0
0

S0
0
0
0
0

A2 = '1'

todas '0'

Figura 5.2: Tabla de verdad del decodificador de 3 a 8 dividida segn el valor de E y A2


Por tanto, podemos usar dos decodificadores de 2 a 4, uno para las seales S3 a S0, que se activar cuando
; y otro decodificador para las seales S7 a S4, que se activar cuando E=1 y A2=1
E=1 y A2=0 ; esto es E A2
(EA2). La salida S0 de este ltimo decodificador de 2 a 4 ir a la salida S4 del decodificador de 3 a 8, y as
sucesivamente con el resto de seales.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

27

Departamento de Tecnologa Electrnica

5. Decodificador de 3 a 8

Intenta realizarlo t mismo, y si no te sale puedes ver la solucin en la figura 5.5. A continuacin vamos a
disearlo.

5.1. Diseo del decodificador con bloques


Aunque lo podramos crear en el mismo proyecto que el anterior, vamos a crear un nuevo proyecto. Ya sabes
como se hace. Lo nombraremos decod3a8. Una vez que hemos indicado las caractersticas del proyecto
estaremos en la ventana principal, y pincharemos en ProyectAdd Copy of Source.... Con ello vamos a aadir
una copia del decodificador que ya hemos hecho a este nuevo proyecto. Vamos a hacer una copia para evitar
estropear el diseo original. Despus de ejecutar el comando aparecer una ventana que nos pedir el
nombre del fichero que queremos aadir. Vamos al directorio del anterior proyecto y sealamos el fichero
..\decod2a4\decod2a4.sch y pinchamos en Abrir. Nos surgir una ventana como la de la figura 5.3.

Figura 5.3: Fichero fuente que vamos a aadir


Despus de esto tendremos en nuestra ventana de fuentes (Sources) el componente decod2a4.
Al importar decod2a4.sch se ha importado su esquemtico, pero no el smbolo que habamos creado para l.
As que volvemos a crear el smbolo repitiendo los pasos del apartado 4.4.
Ahora crearemos una nueva fuente: pincha dos veces en el comando "Create New Source" de la ventana de
procesos. Seleccionamos que es de tipo Schematic y la llamamos decod3a8.
Como resultado tendremos el editor de esquemticos vaco (el plano de nuestro nuevo diseo), y veremos
que en la ventan de fuentes tenemos dos diseos: el decod2a4 que acabamos de aadir y el nuevo decod3a8
que vamos a disear.
Seleccionamos la pestaa de la ventana de smbolos, y vemos que en la seccin de categoras (Categories), la
primera de ellas corresponde a nuestro proyecto, y si la seleccionamos aparece el smbolo que hemos creado:
decod2a4. Esto se muestra en la figura 5.4.

Smbolos
Smbolos del
del proyecto
proyecto

Smbolo
Smbolo del
del decodificador
decodificador de
de 22 aa 44

Decodificador
Decodificador de
de 22 aa 44

Figura 5.4: Implementacin del decodificador de 2 a 4 en el nuevo decodificador

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

28

Departamento de Tecnologa Electrnica

5. Decodificador de 3 a 8

En el mapa del circuito aadimos dos referencias a decod2a4, que como ya hemos dicho, un decodificador es
para las 4 primeras salidas y el otro para el resto.
Ahora realizamos las conexiones entre los decodificadores decod2a4 y las entradas y salidas del nuevo
decodificador decod3a8. Incluyendo tambin las seales de habilitacin de cada uno de ellos, usando para
ello puertas AND. Nota que para la habilitacin del decodificador superior, la puerta AND debe tener la
entrada de A2 negada. El circuito final se muestra en la figura 5.5.

Figura 5.5: Esquema final del decodificador de 3 a 8


Fjate en lo rpido que lo has podido disear y lo simple del circuito, y compralo con lo que te hubiese
supuesto haberlo hecho todo en puertas lgicas.
Antes de pasar al siguiente paso, guarda el diseo (CTRL+S) y comprueba que el diseo es correcto
(ToolsCheck Schematic).
Si quieres puedes simularlo, siguiendo los pasos descritos en los apartados 3.2 y 4.2.
Ahora asigna los pines de la FPGA de manera similar al ejemplo anterior

Figura 5.6: Conexin de los puertos del diseo con los pines de la FPGA
Una vez implementado, comprueba que funciona correctamente y compralo con los valores de la tabla de
verdad y la simulacin.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

29

Departamento de Tecnologa Electrnica

6. Decodificador de 4 a 16

6. Decodificador de 4 a 16
Y cmo haramos un decodificador de 4 a 16 con decodificadores de 2 a 4? el proceso es muy similar al
anterior. La figura 6.1 muestra este decodificador y su tabla de verdad. sta se puede dividir en 4 partes, una
por decodificador.

A1

A1
X
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

A0 S15 S14 S13 S12 S11 S10 S9


X
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 1
0
0
0
0
0
0
1 0
1
0
0
0
0
1
0 0
0
0
0
0
1
0
0 0
1
0
0
1
0
0
0 0
0
0
1
0
0
0
0 0
0
1
0
0
0
0
0 0

S8
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0

S7
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0

S6
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0

S5
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0

S4
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0

S3
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0

S2
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0

S1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0

S0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

decod 4

A2
X
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

decod 3

A3
X
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

decod 2

A3

DECOD4a16

A2

E
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

decod 1

S0
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S13
S14
S15

A0

Figura 6.1: Bloque del decodificador de 4 a 16, y su tabla de verdad


En la tabla de verdad de la figura 6.1 vemos que las seales de salida se han agrupado de cuatro en cuatro.
En la figura 6.2 se han separado estos grupos, ms el caso en que E='0'. Podemos ver que para cada grupo se
puede utilizar un decodificador de 2 a 4 como el que ya hemos diseado. Todos los decodificadores tendrn
las mismas entradas A1 y A0. La nica diferencia est en las salidas a las que se conecta cada decodificador y
la habilitacin. Por ejemplo, el primer decodificador tendr como salidas S0, S1, S2 y S3 y slo estar
habilitado cuando A3='0' y A2='0'; el segundo decodificador estar habilitado cuando A3='0' y A2='1'. Y de
manera similar para el tercer y cuarto decodificador (como lo muestra la figura).
E
0

A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0


X X X X
0
0
0
0
0
0 0 0 0 0 0 0 0 0 0 0

E = '0':
Inhabilitado

todas '0'
E
1
1
1
1

A3
0
0
0
0

A2
0
0
0
0

A1
0
0
1
1

A0 S15 S14 S13 S12 S11 S10 S9


0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0

A3
0
0
0
0

A2
1
1
1
1

A1
0
0
1
1

A0 S15 S14 S13 S12 S11 S10 S9


0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0
0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 0

A3
1
1
1
1

A2
0
0
0
0

A1
0
0
1
1

A3 = '1'
A2 = '0'
E
1
1
1
1

A3
1
1
1
1

A2
1
1
1
1

A3 = '1'

misma A2 = '1'
secuencia

S6
0
0
0
0

S5
0
0
0
0

A1
0
0
1
1

S8
0
0
0
0

S7
0
0
0
1

S6
0
0
1
0

S5
0
1
0
0

S8
1
0
0
0

S7
0
0
0
0

S6
0
0
0
0

S5
0
0
0
0

S2
0
0
1
0

S1
0
1
0
0

S0
1
0
0
0

decod 0
activo cuando
A3 = '0'
A2 = '0'

S4
1
0
0
0

S3
0
0
0
0

S2
0
0
0
0

S1
0
0
0
0

S0
0
0
0
0

decod 1
activo cuando
A3 = '0'
A2 = '1'

todas '0'
S4
0
0
0
0

S3
0
0
0
0

S2
0
0
0
0

S1
0
0
0
0

S0
0
0
0
0

S1
0
0
0
0

S0
0
0
0
0

decod 2
activo cuando
A3 = '1'
A2 = '0'

todas '0'

igual que
decod2a4

A0 S15 S14 S13 S12 S11 S10 S9


0
0
0
0
1
0
0 0
1
0
0
1
0
0
0 0
0
0
1
0
0
0
0 0
0
1
0
0
0
0
0 0

igual que
decod2a4

S3
0
0
0
1

igual que
decod2a4

A0 S15 S14 S13 S12 S11 S10 S9


0
0
0
0
0
0
0 0
1
0
0
0
0
0
0 1
0
0
0
0
0
0
1 0
1
0
0
0
0
1
0 0

todas '0'

S4
0
0
0
0

igual que decod2a4


para las entradas A1 y A0

todas '0'

A3 = '0'
A2 = '1'
E
1
1
1
1

S7
0
0
0
0

todas '0'

A3 = '0'
A2 = '0'
E
1
1
1
1

S8
0
0
0
0

S8
0
0
0
0

S7
0
0
0
0

S6
0
0
0
0

S5
0
0
0
0

S4
0
0
0
0

S3
0
0
0
0

S2
0
0
0
0

decod 3
activo cuando
A3 = '1'
A2 = '1'

todas '0'

Figura 6.2: Tabla de verdad del decodificador de 4 a 16 dividida segn el valor de E y de A3 y A2


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

30

Departamento de Tecnologa Electrnica

6. Decodificador de 4 a 16

As que usaremos cuatro decodificadores de 2 a 4 para las 16 salidas. Adems necesitaremos crear la lgica
que se encargue de habilitar cada decodificador. Si nos fijamos en las seales A3 y A2 de la tabla de verdad, y
de cmo habilitan a cada decodificador, podemos extraer la tabla de verdad de la figura 6.3. En ella se ponen
las seales de habilitacin de cada decodificador (E3, E2, E1, E0) en funcin de la habilitacin general (E) y las
entradas A3 y A2. Podemos ver que la tabla de verdad se corresponde con la tabla de verdad de un
decodificador de 2 a 4 (figura 4.1), as que para las seales de habilitacin de los cuatro decodificadores
usaremos otro decodificador de 2 a 4.
Seales de habilitacin de los 4 decodificadores
E
0
1
1
1
1

A3
X
0
0
1
1

A2
X
0
1
0
1

E3
0
0
0
0
1

E2
0
0
0
1
0

E1
0
0
1
0
0

E0
0
1
0
0
0

Ningn decodificador habilitado


decodificador 0 habilitado
decodificador 1 habilitado
decodificador 2 habilitado
decodificador 3 habilitado

Figura 6.3: Tabla de verdad de las seales de habilitacin de los 4 decodificadores


Con estas indicaciones (adems de lo visto en clase) ya podemos disear el decodificador de 4 a 16.

6.1. Diseo del decodificador con bloques prediseados


Vamos a crear un nuevo proyecto en C:/practicas/edi/tunombre llamado sieteseg. Quizs te preguntes por
qu no lo llamamos decod4a16, esto es porque aunque en este ejercicio vamos a hacer el decodificador de 4 a
16, en el siguiente ejercicio y trabajando en el mismo proyecto vamos a usar el visualizador (display) de siete
segmentos.
Creamos una nueva fuente (ProjectNew Source) de tipo esquemtico (Schematic) llamada decod4a16. Para
crear el decodificador de 4 a 16 vamos a emplear decodificadores de 2 a 4, igual que hicimos en el ejercicio 5.
Sin embargo para este ejercicio, en vez de utilizar el decodificador que diseamos en el ejercicio 4
utilizaremos un decodificador disponible en la biblioteca de smbolos de Xilinx.
Si no tenemos en pantalla el plano para dibujar el circuito (el editor de esquemticos) pinchamos dos veces
en decod4a16.sch en la ventana de fuentes (Sources). Seleccionamos la ventana de smbolos y la de opciones
(recuerda la figura 2.7).
Ahora seleccionamos el decodificador de 2 a 4 disponible en la herramienta: en la ventana de smbolos en la
subventana de categoras (Categories) seleccionamos Decoder. Y en la subventana de abajo llamada Symbols
seleccionamos d2_4e. Este componente es un decodificador de 2 a 4 con una funcionalidad exactamente igual
a la del que ya realizamos en el ejercicio 4. Las caractersticas del componente seleccionado, incluyendo su
tabla de verdad, se pueden consultar pinchando el botn que dice Symbol Info.
Si te fijas, hay ms componentes, incluso hay un decodificador de 4 a 16, pero no lo usaremos, ya que en tal
caso, este ejercicio ya estara hecho.
Como vamos a necesitar 5 decodificadores, cuatro para las salidas y uno para la habilitacin, colocamos 4
componentes alineados verticalmente y el que decodifica las habilitaciones a la izquierda de ellos (figura
6.4).

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

31

Departamento de Tecnologa Electrnica

6. Decodificador de 4 a 16

Figura 6.4: Seleccin de los decodificadores de 2 a 4 disponibles en el ISE


Realizamos la conexiones entre ellos, como vimos en la figura 6.2, las entradas de los decodificadores de la
derecha son las mismas (A0 y A1) y a stos conectamos las salidas. Las entradas del decodificador que se
encarga de las habilitaciones son A2 y A3. El diseo final se muestra en la figura 6.5. Observa la seal de
habilitacin E, si sta es 0 hace que todas las salidas del decodificador de la izquierda valgan 0, y por tanto
inhabilita los 4 decodificadores de la derecha, haciendo que todas las salidas valgan 0. Si E='1' se habilitar
un nico decodificador dependiendo del valor de A2 y A3.

Figura 6.5: Diseo final del decodificador de 4 a 16


Una vez que lo hayas realizado, grbalo y comprueba que todo est bien conectado (ToolsCheck Schematic).
Date cuenta de lo rpido que se puede disear usando bloques y lo tedioso que hubiese sido realizar este
decodificador enteramente con puertas lgicas.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

32

Departamento de Tecnologa Electrnica

6. Decodificador de 4 a 16

Ahora crearemos el smbolo de este decodificador para poder


utilizarlo en el ejercicio siguiente. Recuerda el apartado 4.4, en
donde se explicaba la creacin de un smbolo (o bloque):

Pinchar en ToolsSymbol Wizard


Aparecer una ventana (figura 4.10) que nos preguntar para
qu componente vamos a crear un smbolo: seleccionamos
Using Schematic y quedar seleccionado el nico que hay
decod4a16.
La ventana de los pines la dejamos como est, ya que aunque
la disposicin de los pines parece desordenada, en la
columna Order estn bien, pinchamos en Next.
Y terminamos pinchando en Finish.

El resultado debe ser similar al de la figura 6.6.

Figura 6.6: Smbolo del decodificador


de 4 a 16

6.2. Comprobacin del diseo


En la placa slo tenemos 8 LED disponibles para usar, y sin embargo nuestro decodificador tiene 16 salidas.
As que no lo podemos probar fcilmente.
En el siguiente ejercicio lo podremos probar, pero antes podemos simularlo. Procedemos como en el
apartado 3.2, que lo recordaremos esquemticamente:

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_decod4a16
En la ventana de las opciones del cronograma (figura 3.11) indicamos que es un diseo combinacional y
deseleccionamos GSR (FPGA), que est dentro Global Signals. Para terminar pinchamos en Finish.

Cuando tengamos la ventana para incluir los cronogramas de las entradas, pinchamos en "Test BenchSet
End of Test Bench" y ponemos 3000 ns. Esto lo hacemos para realizar un banco de pruebas ms largo (vers
que se ampla el tiempo del banco de pruebas). Ahora introducimos las 16 posibles combinaciones para las
entradas A0, A2, A2 y A3, e incluimos unas cuantas ms para probar que la habilitacin E funciona bien. En la
figura 6.7 se muestra los valores a las entradas. Con lneas discontinuas se han sealado el intervalo de
tiempo en el cual una de las seales de salida se deben activar. En la parte inferior de la figura, entre las
lneas discontinuas, se muestra cul de las seales de salida es la que se debe activar. Observa tambin que al
principio y al final de la simulacin se ha puesto la seal de habilitacin a cero para ver si funciona bien.
Intenta entender el cronograma para que en ejercicios posteriores puedas hacerlo t solo.

inhabilitado

0 1

2 3 4 5

6 7 8 9 10 11 12 13 14 15 0 1

inhabilitado

Figura 6.7: Valores introducidos en el cronograma para la simulacin del decodificador de 4 a 16


Una vez introducidos los valores en el cronograma:

Guardamos el fichero del banco de pruebas


Habiendo seleccionando el fichero tb_decod4a16 en la ventana de fuentes, desde la ventana de procesos damos
la orden de simular: Simulate Behavioral Model (dentro de Xilinx ISE Simulator)
El resultado de la simulacin saldr slo para 1000 ns, como nuestro banco de pruebas lo queremos para 3000
ns, le indicaremos que simule el tiempo restante. Para ello ejecutamos dos veces el comando "SimulationRun
For Specified Time". El tiempo especificado por defecto para la simulacin son 1000 ns. Este tiempo se puede
modificar (figura 6.8) y adems, como se muestra en la figura, existe un botn para ejecutar la simulacin.
Finalmente comprobamos si los valores a las salidas son correctos.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

33

Departamento de Tecnologa Electrnica

6. Decodificador de 4 a 16

Tiempo de simulacin
Simular por el tiempo especificado

Figura 6.8: Comando para simular por un tiempo especificado


En la figura 6.9 se muestran los resultados de la simulacin, se puede observar cmo se van activando las
salidas consecutivamente mientras la seal de habilitacin (E) est a uno. Cuando sta vale 0, no hay ninguna
salida activa.

Figura 6.9: Resultado de la simulacin


En el siguiente ejercicio usaremos el decodificador para un diseo que implementaremos en la placa.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

34

7. Convertidor de hexadecimal a 7
segmentos

Departamento de Tecnologa Electrnica

7. Convertidor de hexadecimal a 7 segmentos


En los ejercicios de los decodificadores tenamos un nmero codificado en los interruptores de la placa y lo
decodificbamos mostrndolo en los LED. Ahora queremos mostrar un nmero hexadecimal (4 bits) en un
visualizador o display de siete segmentos. Antes de empezar a disear el circuito veamos cmo funcionan los
displays de siete segmentos.
Un display de siete segmentos permite iluminar 7 segmentos (y a veces
tambin el punto decimal) de manera independiente, de forma que se
pueden representar todos los nmeros y algunas letras y smbolos.

A
F

Los segmentos del display se nombran como muestra la figura 7.1. Segn
qu segmentos estn encendidos, se mostrarn diferentes nmeros. Por
ejemplo, para el nmero 1 debern estar encendidos los segmentos B y C.
Para el nmero 8 todos los segmentos debern estar encendidos.

DP

Figura 7.1: Display de 7


segmentos

A continuacin se muestra la codificacin de los 16 nmeros hexadecimales (figura 7.2), como podrs
apreciar, algunos nmeros admiten ms de una representacin, por ejemplo, el 6 podra no tener el
segmento A iluminado (pero se confundira con la B). El 9 podra tener el segmento D iluminado. La A, la C
y la E se podran representar en minsculas. Puedes ver muchas otras representaciones en
http://en.wikipedia.org/wiki/Seven-segment_display. Nosotros, usaremos la de la figura 7.2.

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

A
F
E

G
D

B
C

A
F

A
F
E

G
D

B
C

A
F

B
C

Figura 7.2: Codificacin de los segmentos para mostrar los 16 nmeros hexadecimales
Existen tambin otros visualizadores de 14 16 segmentos, para poder representar todos los caracteres
alfanumricos. Tambin se usan las matrices de puntos que tienen distintas resoluciones.
En nuestra placa, para activar el display de la derecha, debemos poner la seal AN_0='0'. El pin
correspondiente de la FPGA es el P60, como puedes ver en la placa encima de donde estn los displays. En la
placa tambin se muestran los pines correspondientes a cada segmento, para encender un segmento tenemos
que poner su pin correspondiente a cero. Funcionan por tanto con lgica negada. Cuando no quieres que se
encienda un display tendrs que poner un uno, por ejemplo en los pines de las seales AN_1, AN_2 y AN_3,
correspondientes a los otros tres displays. As, para representar el uno, tendras que poner los segmentos B y C
a cero y el resto a uno, poniendo tambin la seal AN_0=0.
Con esta informacin ya podemos hacer el diseo, ms adelante, en otros ejercicios, veremos las conexiones
elctricas y cmo encender varios displays.

7.1. Diseo del convertidor de hexadecimal a 7 segmentos


El objetivo es mostrar en un display el nmero hexadecimal codificado en los cuatro interruptores de la
derecha (SW0, SW1, SW2 y SW3), ya que con cuatro bits podemos formar 16 nmeros. Las entradas y salidas del
circuito que queremos disear estn representadas en la figura 7.3.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

35

7. Convertidor de hexadecimal a 7
segmentos

Departamento de Tecnologa Electrnica

HEX7SEG
SEG_A
SEG_B
SEG_C
SEG_D
SEG_E
SEG_F
SEG_G
SEG_DT
AN_0
AN_1
AN_2
AN_3

I0
Nmero codificado:

I1

A los interruptores:
SW0, SW1, SW2, SW3

I2
I3

Habilitacin:

Salida a los 7 segmentos

Punto decimal del display


Encendido de los displays
AN0: display de la derecha

Figura 7.3: Diagrama de entradas y salidas del convertidor hexadecimal a 7segmentos


Ya hemos visto en clase cmo se disea el circuito que convierte de BCD a 7 segmentos. Ahora tenemos que
modificar la tabla de verdad para que incluya las salidas de los nmeros del 10 (A16) al 15 (F16), ya que en
BCD para ellos ponamos X (condiciones indiferentes o "no importa"). En la figura 7.4 se ha puesto la parte
de la tabla de verdad, nota que las salidas van a nivel bajo y por esto, los ceros indican que se enciende el
segmento. No te confundas con la nomenclatura de los segmentos (columnas de la A a la G) con los nmeros
en hexadecimal (filas de la A a la F). En dicha tabla de verdad se han dejado en blanco los segmentos E, F y G
para que los deduzcas y evitar que simplemente copies todo lo que aqu se dice y no ests entendiendo nada.
Para implementar el circuito podramos realizar el mapa de Karnaugh para cada uno de los 7 segmentos y
obtener la funcin lgica. Este mtodo es perfectamente vlido y es necesario conocerlo, aunque es verdad
que puede darnos un poco de pereza apartar el ordenador y ponernos con boli y papel a realizar 7 mapas de
Karnaugh (uno para cada segmento).
segmentos

ojo esto son


nmeros en hex,
no son los
segmentos

n
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

I3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

I2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

I1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

I0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0

A
0
1
0
0
1
0
0
0
0
0
0
1
0
1
0
0

B
0
0
0
0
0
1
1
0
0
0
0
1
1
0
1
1

C
0
0
1
0
0
0
0
0
0
0
0
0
1
0
1
1

D
0
1
0
0
1
0
0
1
0
1
1
0
0
0
0
1

Figura 7.4: Tabla de verdad del convertidor hexadecimal a 7 segmentos (salidas a nivel bajo)
As que vamos a realizarlo por otro mtodo. Hemos visto en clase que mediante decodificadores se pueden
implementar funciones lgicas. Normalmente no es un mtodo muy eficiente en puertas, es decir, si
realizamos la funcin lgica a partir del mapa de Karnaugh suelen salir muchas menos puertas que
hacindolo con decodificadores. Esto se debe a que el decodificador obtiene todos los trminos mnimos,
sean o no necesarios para la ecuacin, y adems, al hacerlo con los trminos mnimos, se implementa la
ecuacin en la primera forma normal (1FN), sta suele ser de bastante mayor tamao que la ecuacin
obtenida por Karnaugh. Esto ltimo lo has podido comprobar si hiciste el primer ejercicio propuesto del
tema 3 5.
Sin embargo, cuando necesitamos obtener varias funciones lgicas a partir de un mismo grupo de entradas
(como es el caso) el uso de decodificadores no es tan descabellado, ya que un trmino mnimo puede ser
utilizado en varias salidas. Es decir, en nuestro caso necesitamos siete funciones lgicas, una para cada
segmento, y por tanto un trmino mnimo puede ser usado en varias funciones. Adems, ya tenemos el
decodificador implementado y encima disponemos de una FPGA con 50000 200000 puertas equivalentes,
por lo que excedernos en el nmero de puertas para un diseo pequeo como el nuestro no es problemtico.
5

Disponible en http://laimbio08.escet.urjc.es/assets/files/docencia/EDI/pbs3_02.pdf

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

36

7. Convertidor de hexadecimal a 7
segmentos

Departamento de Tecnologa Electrnica

Quizs ahora ests intentando recordar de clase cmo se diseaban funciones lgicas con decodificadores.
Bueno, es muy fcil, simplemente tenemos que unir con una puerta OR todos los trminos mnimos de la
funcin. Por ejemplo, la salida A del display es la OR de los trminos mnimos 1, 4, 11 y 13 (m1, m4, m11, m13).
Mira la figura 7.5, en ella se han tomado estas salidas para crear la funcin que implementa el segmento A.
Para la A tomamos las salidas 1, 4, 11 y 13
I3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

I2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

I1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

I0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0

A
0
1
0
0
1
0
0
0
0
0
0
1
0
1
0
0

I0
I1

m1

I2
I3
E

m4

A0
A1
A2
A3
E

S0
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S13
S14
S15

m11
m13

SEG_A

Figura 7.5: Implementacin de la funcin para activar el segmento A


Esto adems se puede entender de otra manera, cada salida del decodificador indica qu numero tenemos
codificado con los interruptores. El segmento A no lucir cuando tengamos un 1, un 4, un 11 (B16) un 13
(D16). De la figura 7.2 puedes ver que para estos nmeros el segmento A no luce, para el resto s.
Consecuentemente si la salida del decodificador S1 es igual a '1' (S1=1), S4=1 S11=1 S13=1, entonces el
segmento A no lucir. Dicho en lgebra de Boole: A=(S1 + S4 + S11 + S13). Ten en cuenta que el
decodificador de 7 segmentos luce con lgica negada, y por eso decimos "no lucir". Otra alternativa sera
haberlo hecho con lgica afirmada (sin negar). Entonces cada uno de los 7 segmentos estaran
complementados. Para obtener la salida negada se tomaran los trminos mnimos complementarios, y
habra que negar la OR (sera una NOR). La figura 7.6 muestra las dos formas equivalentes de realizar el
circuito para el segmento A.
Lgica afirmada:

Lgica negada:

nmeros que hacen "lucir" el segmento A

nmeros que hacen "No lucir" el segmento A


I3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

I2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

I1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

I0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0

A
0
1
0
0
1
0
0
0
0
0
0
1
0
1
0
0

m1
m4

SEGA

m1

m11
m13

m4

Los nmeros 1, 4, B y D
pondrn un 1 en la salida,
y por tanto, no lucir el
segmento A. El resto
pondr un 0 y lucir

1
m11
m13

B
11

A
F

A
F
E

G
D

B
C

D
13

A
F

B
C

A
F
E

G
D

B
C

I3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

I2
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

I1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

I0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0

A
1
0
1
1
0
1
1
1
1
1
1
0
1
0
1
1

m0
m2
m3
m5
m6
m7
m8
m9
m10
m12
m14
m15

m0
m2
m3
m5
m7
m8
m9
m10
m12
m14
m15

SEGA

Negar la salida para que los


nmeros que hacen lucir el
segmeno A pongan un cero

Figura 7.6: Formas equivalentes de realizar el circuito: a la izquierda con lgica negada. A la derecha, con lgica
afirmada y negando la salida pues el segmento luce cuando hay un cero
Para el resto de segmentos haremos lo mismo: uniremos mediante una puerta OR todos sus trminos
mnimos (tambin lo podramos hacer de la manera en que muestra en la derecha de la figura 7.6).
Empecemos a disearlo, nos mantenemos en el mismo proyecto que en el anterior. Primero, como venimos
de la simulacin, seleccionamos en la ventana de fuentes (Sources) la opcin de Synthesis Implementation.
Ahora creamos una nueva fuente de tipo esquemtico llamada hex7seg. Tenemos la ventana de opciones y de
smbolos activas.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

37

Departamento de Tecnologa Electrnica

7. Convertidor de hexadecimal a 7
segmentos

En la ventana de smbolos, en la subventana de categoras (Categories) escogemos la primera de ellas que hace
referencia a nuestro proyecto (C:/practicas/edi/...). Y en la ventana de smbolos estar el decodificador de
4 a 16 que creamos en el ejercicio anterior. Incluimos una referencia a este smbolo en nuestro nuevo diseo,
y realizamos las conexiones del decodificador con las salidas al display segn la tabla de verdad de la figura
7.4 y el ejemplo de la figura 7.5. Conecta tambin las 4 entradas del decodificador, llmalas I0, I1, I2, I3. Y
la habilitacin E.
Quizs veas que si sigues conectando cables a las siete puertas OR que tienes que incluir, se va enmaraar
todo el circuito. Para evitar esto, una mejor opcin es nombrar los cables, ya que si dos cables tienen el
mismo nombre, aunque no estn unidos se consideran como el mismo cable. Vemoslo para el segmento B.
Segn la tabla de verdad de la figura 7.4, el segmento B no luce para los nmeros 5, 6, B, C, E y F (m5, m6,
m11, m12, m14 y m15), por tanto necesitamos una puerta OR de 6 entradas. La situamos en el plano y le
conectamos ya la salida SEG_B (para no olvidarnos luego de qu salida se trata). Ver figura 7.7.
Ahora, a la primera entrada de la puerta OR le conectamos un cable corto. Esto es necesario porque los
cables son los que reciben el nombre y no las entradas de las puertas o componentes. Y por el mismo motivo,
a la salida S5 del decodificador le conectamos otro cable corto (ver figura 7.8). Vers que el final de ambos
cables estn en rojo, esto es porque estn desconectados.
S0
S1
S2
S3
S4
S5
S6
S7
S8

SEG_B

S9
S10
S11
S12
S13
S14
S15

Figura 7.7: Paso 1, ponemos la puerta OR de 6


entradas

Figura 7.8: Paso 2, conectamos un cable pequeo a la


salida S5 del decodificador y a una entrada de la
puerta OR

Ahora pinchamos en "AddNet Name" y en la ventana de opciones rellenamos en el apartado Name el nombre
m5, ya que vamos a poner el trmino mnimo m5. A continuacin pinchamos en el esquemtico cerca de los
cables que hemos puesto (figura 7.9).
Por ltimo, repetimos la operacin con el resto de las entradas de la puerta OR (figura 7.10).
Al poner un nombre a un cable que ya existe. Por ejemplo, en la figura 7.9, si nombramos a una pata de la OR
como m5, estamos conectando esa pata al cable m5 que ya existe y que es una salida del decodificador. En caso
de que nos hayamos equivocado de trmino mnimo, y nombramos una pata de la OR con un trmino
mnimo equivocado, tendremos que borrar el cable y volverle a conectar uno nuevo, porque si
renombramos, estaremos renombrando tanto ese cable que est en la pata de la OR como el cable de la salida
del decodificador. De todos modos, si intentsemos renombrar el cable sin borrarlo, seguramente aparecer
una advertencia que indica que ese otro nombre ya existe, pues corresponde a otra salida del decodificador.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

38

Departamento de Tecnologa Electrnica

7. Convertidor de hexadecimal a 7
segmentos

Figura 7.9: Paso 3, nombramos ambos cables con el


mismo nombre
Figura 7.10: Paso 4, repetimos la operacin con el
resto de entradas
As que tienes dos mtodos para realizar las conexiones del circuito: unir cables o nombrarlos, puedes
combinarlos o usar el que ms te guste, aunque para este ejemplo, si conectas todos los cables va a resultar
un circuito muy poco claro, y difcil para hacer modificaciones. El resto de las salidas de los segmentos debes
realizarlo t solo.
Una vez que tengas todas las salidas de los segmentos conectadas, debes conectar la seal AN_0 recuerda
que esta seal es un pin que va al display de la derecha. Cuando AN_0=0 el display lucir (si tiene algn
segmento encendido) cuando AN0=1 el display estar apagado independientemente de que tengas los
segmentos encendidos.
Lo que vamos a hacer es encender el display cuando el circuito
est habilitado (E). Como la seal de habilitacin es a nivel alto y
la seal AN_0 es a nivel bajo, tendrs que conectarlas con un
inversor. Es fcil, pero si no se te ocurre cmo hacerlo observa la
figura 7.11.
Por ltimo conectars el resto de encendidos de displays a 1
(AN_1=AN_2=AN_3=1), para que no luzcan. Recuerda del ejercicio 2
(encender un LED) cmo se conectaba una salida a un uno
lgico. Si no se te ocurre cmo hacerlo puedes mirar la figura
7.11. Tambin debers incluir el puerto del punto decimal, que
hemos llamado SEG_DT (figura 7.3). El punto decimal funciona
igual que el resto de los segmentos, y como no lo queremos
encender lo conectaremos a alimentacin (Vcc), exactamente
igual que el las seales (AN_1, AN_2, AN_3)
En este punto deberas tener todo el circuito diseado. Grbalo
y comprueba que el esquemtico est bien conectado
(ToolsCheck Schematic). Si el diseo est bien pasaremos a
implementarlo en la FPGA.

Figura 7.11: Detalle de la conexin de las


seales AN_0 y AN_1

7.2. Implementacin
Esta vez, en vez de simular el circuito vamos a implementarlo directamente, ya que la funcionalidad del
circuito es muy fcilmente comprobable en la placa, pues slo tenemos que ver si el display luce bien o no.
Lo primero que haremos es seleccionar la ventana de procesos y la de fuentes. En la ventana de fuentes vers
una imagen similar a la de la figura 7.12. En ella puedes apreciar que de los dos esquemticos que tenemos,
el convertidor de hexadecimal a 7 segmentos est por encima del decodificador. El convertidor debe de tener
el smbolo
, que significa que es el diseo de ms alta jerarqua. Si no estuviese tendras que pinchar con
el botn derecho del ratn encima de l y seleccionar "Set as Top Module".
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

39

Departamento de Tecnologa Electrnica

Convertidor HEX a 7SEG


diseo de mayor jerarqua

7. Convertidor de hexadecimal a 7
segmentos

El decodificador es un
componente del convertidor

: Smbolo que indica el


componente de mayor jerarqua

Figura 7.12: Representacin de la jerarqua en la ventana de fuentes


Ahora vamos a asignar los pines del circuito, en los ejercicios anteriores lo hemos hecho mediante la
herramienta PACE (figura 2.11 del apartado 2.2). Dentro de la ventanas de procesos seleccionbamos el
comando "User ConstraintsAssign Package Pins". Sin embargo a veces hay un error y salen unos puertos que
no son los que tienes en tu diseo. En la figura 7.13 se muestran los pines que salan al hacer este ejercicio
(probado incluso desde dos ordenadores distintos), sin embargo, si hemos hecho el diseo bien, nos deberan
de salir los pines de la figura 7.3.

Figura 7.13: Ventana de puertos errnea de la herramienta PACE


Si te salen los pines correctamente, puedes seguir usando la herramienta PACE, si no, y te sale algo parecido
a la figura 7.13, entonces cierra la herramienta PACE y lo haremos por otra alternativa.
Esta alternativa es editar directamente el fichero de restricciones. Este fichero tiene la extensin .UCF. Y lo
puedes editar con cualquier editor de texto o desde la propia herramienta ISE. En la ventana de procesos,
dentro de "User Constraints", dos comandos por debajo del que acabamos de usar para arrancar el PACE est
el comando: "Edit Constraints (Text)", pincha dos veces en l y te saldr un editor de texto en la ventana grande
de la derecha (ver figura 7.14).

Aqu se escriben
las restricciones

Edit Constraints (Text)


Fichero
Fichero de
de restricciones
restricciones .ucf
.ucf
Figura 7.14: Edicin de las restricciones en texto
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

40

Departamento de Tecnologa Electrnica

7. Convertidor de hexadecimal a 7
segmentos

Ahora tenemos que escribir los puertos en el fichero UCF, que en realidad es lo que hace la herramienta
PACE. El texto que tenemos que escribir se muestra en el cdigo 7.1. El formato de estos ficheros es muy
sencillo:

Los comentarios se consideran a partir del signo #


Cada puerto de nuestro diseo se conecta con la lnea:
NET "Nombre_del_Puerto" LOC = "Nombre_del_Pin"

Con estas indicaciones, y tras identificar los pines en la placa, ya la podras hacer t solo. Sin embargo, por
ser la primera vez, a continuacin se muestra el contenido del fichero. An as, intenta entender el
significado, ya que para las siguientes ocasiones tendrs que escribirlo t solo.
#Numero codificado en los interruptores SW0, SW1, SW2, SW3
NET "I0" LOC = "P89" ;
NET "I1" LOC = "P88" ;
NET "I2" LOC = "P87" ;
NET "I3" LOC = "P86" ;
#Enable en el SW7
NET "E" LOC = "P81"
#Encendido de los
NET "AN_0" LOC =
NET "AN_1" LOC =
NET "AN_2" LOC =
NET "AN_3" LOC =
#7 segmentos
NET "SEG_A"
NET "SEG_B"
NET "SEG_C"
NET "SEG_D"
NET "SEG_E"
NET "SEG_F"
NET "SEG_G"

LOC
LOC
LOC
LOC
LOC
LOC
LOC

displays
"P60" ;
"P69" ;
"P71" ;
"P75" ;
=
=
=
=
=
=
=

"P74"
"P70"
"P67"
"P62"
"P61"
"P73"
"P68"

#Punto decimal
NET "SEG_DT" LOC = "P63"

;
;
;
;
;
;
;
;

Cdigo 7.1: Conexin de los puertos del diseo con los pines de la FPGA
Debes estar atento a que los nombres que hemos puesto en el fichero UCF coincidan con los nombres de los
puertos de tu diseo. El cdigo 7.1 est hecho para los nombres de la figura 7.3. Si por descuido has puesto
otros nombres en el diseo, o bien cambias los nombres del diseo, o cambias el UCF.
Guarda el fichero UCF una vez que lo hayas terminado.
Sintetiza el diseo, y posteriormente implemntalo. Esto ese haca desde la ventana de procesos, "SynthesizeXST", "Implement Design". Observa si hay algn error, sobre todo despus de la implementacin. Si te has
equivocado al nombrar los puertos te saldr un mensaje diciendo qu puerto falta, si es as, corrige el UCF o
el esquemtico y repite el proceso.
Finalmente pincha dos veces en "Generate Programming File" y luego en "Configure Device (iMPACT)" para
programar la FPGA, si no te acuerdas de estos pasos repasa el apartado 2.3.
Ahora comprueba que se visualizan correctamente los nmeros segn estn los interruptores del cero al tres.
Si ves que algn nmero no se visualiza correctamente, identifica qu segmento est mal y revisa el
esquemtico. Comprueba tambin que la habilitacin funciona. Quizs crea que no funciona nada, y lo que
sucede es que tienes el circuito deshabilitado (SW7='0').

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

41

Departamento de Tecnologa Electrnica

8. Codificadores

8. Codificadores
En esta prctica realizaremos varios codificadores. Primero haremos un codificador de 4 a 2. En un principio
lo haremos sin prioridad y luego incluiremos un mdulo que establezca las prioridades. Posteriormente, en
el captulo 9 utilizaremos varios codificadores para realizar uno de 8 a 3.

8.1. Codificador de 4 a 2 sin prioridad


Un codificador devuelve en forma codificada la entrada que tiene activa. En esta prctica el codificador
tendr 4 entradas y devolver en formato binario la entrada que est activa.
En un principio realizaremos la versin ms sencilla. Utilizaremos los cuatro pulsadores como entradas y los
dos primeros LED para mostrar la salida codificada en binario. El esquema del circuito que queremos
realizar se muestra en la figura 8.1. En la tabla se indica qu salidas se activa. Por ejemplo, cuando la entrada
activa es la I0 los dos LED permanecern apagados, ya que mostrarn un cero en binario (002). Cuando est
la entrada I1 activa, se encender el LED0 mostrando un uno en binario (012). De anloga sucede con los dos
casos restantes.
CODIF
BTN0
BTN1
BTN2
BTN3

I0
I1
I2
I3

S0
S1

entrada
activa
I0
I1
I2
I3

LED0
LED1

salidas
S1 S0
0 0
0 1
1 0
1 1

S0 se enciende cuando
I1 est activa o (OR)
cuando I3 est activa

I1

S0

I2
I3

S1 se enciende cuando
I2 est activa o (OR)
cuando I3 est activa

S1

Figura 8.1: Entradas y salidas del codificador, tabla de verdad y obtencin del esquema en puertas lgicas
La realizacin de este circuito es sencilla, y simplemente tienes que implementar el esquema de puertas
mostrado a la derecha de la figura 8.1, e indicar los pines a los que van conectados. Las conexiones con los
pulsadores y LED se muestra a la izquierda de la figura 8.1.
As que crea un nuevo proyecto llamado codif4a2, una fuente del mismo nombre, conecta los pines
correspondiente y bjalo a la FPGA. Como puedes ver, la entrada I0 no est conectada en el esquema de
puertas, por lo tanto, no hace falta que la crees ni que le asignes pines.
Ahora debes comprobar que funciona bien. Qu debe suceder? Est mostrado para algunos casos en la
figura 8.2.
Entrada activa
(pulsador)
LEDs
encendidos y
codificacin

ninguna
LD1
00

BTN1

BTN0
LD1

LD0

LD1

LD0

00

01

BTN2
LD1

LD0
10

BTN3

LD0

LD1

BTN1 y BTN2
LD1

LD0

11

LD0

11

Figura 8.2: Salidas del circuito codificador segn las entradas


Cuando pulsamos el pulsador BTN0 no se enciende ningn LED, y est bien ya que est mostrando un cero:
002, y por tanto, los dos tienen que estar apagados. Sin embargo, vemos que el resultado es el mismo de
cuando no hay ningn botn pulsado. As que con este circuito, no podemos distinguir entre el caso en que
no hay ningn botn pulsado y el caso en que el botn cero (BTN0) est pulsado.
Por otro lado, cuando pulsamos varios botones a la vez ocurren situaciones imprevistas. Por ejemplo, como
se muestra en la derecha de la figura 8.2, cuando se pulsan los botones uno y dos (BTN1 y BTN2), se encienden
los dos LED, mostrando por tanto que es el pulsador 3 (BTN3) el que est encendido. Esto es porque en el
planteamiento inicial no hemos considerado que se puedan pulsar dos botones simultneamente.
As que tenemos que solucionar dos cosas:

Definir las prioridades para que slo est una lnea activa
Diferenciar cundo est la lnea del BTN0 activa de cuando no hay ninguna lnea activa.

8.2. Codificador de 4 a 2 con prioridad, lnea activa y habilitacin


As que ampliaremos el codificador de modo que con una seal de salida (A) indiquemos si hay algn botn
pulsado. As podremos distinguir el botn cero con la situacin en la que no hay ningn botn pulsado. Para
ello basta con incluir una puerta OR con todas las entradas, ya que cuando cualquiera de las entradas est
activa (sea '1') la salida ser '1'. La figura 8.3 muestra cmo quedara este circuito.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

42

Departamento de Tecnologa Electrnica

salidas
S1 S0
0 0
0 0
0 1
1 0
1 1

entrada
activa
-I0
I1
I2
I3

8. Codificadores

I1
Diferencia entre
pulsar I0 y no
pulsar nada

A
0
1
1
1
1

S0

I2
I3

A se enciende cuando
cualquier entrada
est activa:
I0 + I1 + I2 + I3

S1

I0

Figura 8.3: Esquema del codificador que incluye la seal A, que indica si hay algn lnea de entrada activa
Si quieres puedes bajar a la placa este circuito, poniendo la seal A como el LED 7 o bien continuar
realizando las modificaciones que queremos realizar. Llama al proyecto codif4a2.
Ahora queremos incluir un mdulo que determine las
prioridades, de manera que, aunque dos botones estn
pulsados, slo una lnea de entrada del decodificador
est activa. Pondremos la prioridad ms alta para el
bit ms significativo, de modo que si I2 e I1 estuviesen
pulsados, el codificador mostrase un 102 y no un 112
como estaba haciendo hasta ahora (recuerda el caso de
la derecha de la figura 8.2). El esquema que queremos
implementar se muestra en la figura 8.4

PRIOR
BTN0
BTN1
BTN2
BTN3

I0
I1
I2
I3

CODIF
P0
P1
P2
P3

puede haber ms de
una que valga 1

P0
P1
P2
P3

S0
S1

S0
SA

como mximo slo habr


una seal que valga 1

Figura 8.4: Bloque de prioridades previo al codificador

Cmo hacemos un mdulo que establezca las prioridades? Podemos usar las puertas AND ya que sabemos
que si una de las entradas de estas puertas es cero, la salida ser cero. Mientras que si es uno, la salida ser lo
que la otra entrada valga. As la seal prioritaria pasar directamente y la seales menos prioritarias
dependern del valor de la prioritaria. En la figura 8.5 se muestra un esquema que establece la prioridad de
I3 sobre I2. Cuando I3='1' se pone un cero en la salida P2, mientras que si I3='0' la seal P2 valdr lo que
valga I2.
Si I3='1' entonces P2='0'
I2

I3

'0'

'0'

'1'

Si I3='1' entonces P2=I2


I2

P2

I2

P3

I3

P2

'1'

"no deja pasar I2"

'0'

'0'

P3

"deja pasar I2"

Figura 8.5: Prioridad de I3 sobre I2


As que se puede aplicar la misma estrategia para el resto de seales, quedando como muestra la figura 8.6.
En la derecha de la figura se muestra la tabla de verdad del circuito.
I0

I1

I2

I3

P0

P0 slo podr valer '1'


cuando no sean '1' ni
I3, ni I2, ni I1

P1

P1 slo podr valer '1'


cuando no sean '1' ni
I3, ni I2

P2

P2 podr valer '1'


cuando I3 no sea '1'

P3

P3 siempre podr valer '1'


(segn lo que valga I3)

I3
0
0
0
0
1

I2
0
0
0
1
X

I1
0
0
1
X
X

I0
0
1
X
X
X

P3
0
0
0
0
1

P2
0
0
0
1
0

P1
0
0
1
0
0

P0
0
1
0
0
0

independientemente de lo que valga I0,


P0 = '0' porque I3='1'

Figura 8.6: Circuito para establecer prioridades y su tabla de verdad


Para simplificar la tabla de verdad se han puesto X en las seales de entrada de la tabla (I0, I1, I2). En las
tablas de verdad, las X en las entradas tienen un significado distinto que las X en las salidas. Una X en una
entrada significa que tanto si esa entrada vale '0' '1', el valor a la salida ser el mismo. Con esto me ahorro
dibujar una tabla mucho mayor. En este caso, en vez de dibujar una tabla de 16 casos (4 entradas 24= 16),
dibujo una tabla con 5 casos. Esto es gracias a las X de las entradas, pero el circuito ser el mismo dibuje la
tabla con X o sin ellas. Sin embargo, una X a la salida significa que puedo simplificar el circuito, esto es, para
ese caso yo podr poner un '1' un '0' segn me convenga ms. Es decir, me da libertad para realizar un
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

43

Departamento de Tecnologa Electrnica

8. Codificadores

circuito ms sencillo debido a que ese caso nunca se va a dar. Esta libertad no la tengo con las
entradas.

en las

Para terminar nos quedara unir los mdulos tal como se muestra en la figura 8.4, sin embargo, antes vamos
a incluir la seal de habilitacin (Enable). Cuando la seal de habilitacin vale cero (Enable='0') hace que
todas las salidas valgan '0'. Si est habilitado, el circuito funciona normalmente. Adems, los codificadores
con habilitacin incluyen una nueva seal de salida (EO: enable out), que nos permitir conectar varios
codificadores y extender su capacidad. Esta seal nos indica si el codificador est habilitado pero no hay
ninguna seal de entrada activa, nos diferencia de cuando el codificador no est habilitado. El bloque que
queremos realizar se muestra en la figura 8.7
CODIF
BTN0
BTN1
BTN2
BTN3

I0
I1
I2
I3

SW7

EI

EO

LED7

S0
S1

LED0
LED1

LED6

EI
0
1
1
1
1
1

I3
X
0
0
0
0
1

I2
X
0
0
0
1
X

I1
X
0
0
1
X
X

I0
X
0
1
X
X
X

S1
0
0
0
0
1
1

S0
0
0
0
1
0
1

A EO
0 0
0 1
1 0
1 0
1 0
1 0

Figura 8.7: Bloque y tabla de verdad del codificador con prioridad y habilitacin
Como vemos de la tabla de verdad de la figura 8.7, la salida EO vale '1' cuando
alturas, esta condicin nos debera ser fcil de implementar en puertas lgicas.

A0='0'

EI='1'.

A estas

El circuito final nos quedar como muestra la figura 8.8.


PRIOR

EO

I0

P0

I1

P1

S0
I2

P2
S1

I3

P3

EI

Figura 8.8: Esquema en puertas del codificador con prioridad y habilitacin


Implementa este diseo en la FPGA, poniendo los pines que se muestran en el bloque de la izquierda de la
figura 8.7 y comprueba que funciona correctamente.

8.3. Codificador de 4 a 2 con conversin a 7 segmentos


Por ltimo se deja como ejercicio conectar el codificador que acabamos de disear (figura 8.8) con el
conversor a siete segmentos que hemos realizado en el captulo 7. As, adems de ver el nmero resultante
codificado con los LED, lo veremos en el display de siete segmentos.
Para ello, primero crea el smbolo del codificador que acabas de crear (el de la figura 8.8). Recuerda que se
haca con el comando: ToolsSymbol Wizard (se explic en el apartado 4.4).
Ahora vamos a aadir el conversor a 7 segmentos que realizamos en el captulo 7. Para ello, ejecutamos
"ProyectAdd Copy of Source..." y vamos al directorio donde hicimos el conversor, que debera ser
"c:/practicas/edi/tunombre/sieteseg/" y all seleccionas los ficheros: "hex7seg.sch" y "decod4a16.sch".
Ahora creamos un smbolo del esquemtico hex7seg.shc, para ello ejecutamos ToolsSymbol Wizard y en la
siguiente ventana, en el apartado Using Schematic seleccionamos el mdulo hex7seg. Esto es importante
porque si no estaramos haciendo el smbolo de otro mdulo. En la siguiente ventana podemos ordenar la
entradas y salidas, o dejarlas as y tener cuidado de no equivocarnos cuando hagamos las conexiones. Para
ordenarlas tenemos que pinchar en la columna que indica Order y en ella indicar seal por seal, el orden
que le asignamos (como puedes ver no es muy cmo el mtodo de ordenamiento).
Ahora crea una nueva fuente "Proyect New Source" de tipo esquemtico llamada codif4a2_7seg en la que
pondremos tanto el codificador de la figura 8.8 como el conversor a 7 segmentos. En la ventana de smbolos
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

44

Departamento de Tecnologa Electrnica

8. Codificadores

seleccionamos la categora de nuestro proyecto (la 2 fila donde sale la ruta de nuestro proyecto). En la
subventana de Symbols estarn los tres smbolos de nuestro proyecto: codif4a2, decod4a16 y hex7seg. El
smbolo decod4a16 est dentro del hex7seg y por eso aparece. Nosotros usaremos el codif4a2 y el hex7seg. La
conexin de los circuitos se hara como muestra la figura 8.9. Como el codificador es de 4 a 2, tiene dos
salidas para indicar el nmero (S0 y S1), el resto de entradas del conversor a 7 segmentos (I2 e I3) irn a
tierra (a cero), para que los nmero que muestre sean del 0 al 3. Si estuviesen las dos a '1', mostrara los
nmeros del 12 a 15. Y si no las pusieses a ningn valor, tendras un valor indeterminado en las entradas del
decodificador, y quin sabe que nmero te saldra. Esto es: Las entradas siempre deben tener un valor
determinado, no se deben dejar "al aire".

Figura 8.9: Esquema del circuito final


Antes de implementar el circuito en la FPGA debes de crear el fichero UCF, que es el fichero de restricciones,
donde se indican las conexiones de los puertos del esquema (
figura 8.9) con los pines de la FPGA.
Para no tener que hacer de nuevo todo el fichero de restricciones, puedes abrir el que ya tenas del conversor
de 7 segmentos (cdigo 7.1) y copiar y pegar en el que vas a crear.
Una vez que lo tengas en la placa, comprueba que funciona, que se se encienden los LED y el display de 7
segmentos. Y que tambin funcionan correctamente las salidas A y EO (Enable Out), que usaremos en el
siguiente ejercicio.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

45

9. Extensin de la capacidad de un
codificador

Departamento de Tecnologa Electrnica

9. Extensin de la capacidad de un codificador


En este ejercicio usaremos el codificador de 4 a 2 que hemos realizado en la prctica anterior (captulo 8) y lo
ampliaremos para hacer un codificador de 8 a 3. El resultado lo visualizaremos con los LED y con el display
de siete segmentos.

9.1. Codificador de 8 a 3 a partir de codificadores de 4 a 2


En la figura 9.1 se muestra el esquema y las conexiones con los pines. A la derecha de la figura se muestra la
tabla de verdad. Esta tabla de verdad se ha dividido para hacer poder realizar el codificador en funcin de
codificadores de 4 a 2.
SW4
SW5
SW6
SW7
BTN0
BTN1
BTN2
BTN3

I0
I1
I2
I3
I4
I5
I6
I7

SW0

EI

CODIF

EO

LED7

S0
S1
S2

LED0
LED1
LED2

LED6

EI
0
1
1
1
1
1
1
1
1
1

I7
X
0
0
0
0
0
0
0
0
1

I6
X
0
0
0
0
0
0
0
1
X

I5
X
0
0
0
0
0
0
1
X
X

I4
X
0
0
0
0
0
1
X
X
X

I3
X
0
0
0
0
1
X
X
X
X

I2
X
0
0
0
1
X
X
X
X
X

I1
X
0
0
1
X
X
X
X
X
X

I0
X
0
1
X
X
X
X
X
X
X

S2
0
0
0
0
0
0
1
1
1
1

S1
0
0
0
0
1
1
0
0
1
1

S0
0
0
0
1
0
1
0
1
0
1

A EO
0 0
0 1
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0

Figura 9.1: Entradas y salidas del codificador, y su tabla de verdad


La extensin de un codificador se realiza como se muestra en la figura 9.2. En la extensin, la S0 del
codificador de 8 a 3 (codif8a3) se forma con la OR de las S0 de los codificadores de 4 a 2. Lo mismo ocurre con
la S1. Los codificadores de 4 a 2 se han llamado P_CODIF y G_CODIF, siendo el primero el que recibe los bits
menos significativos (P de pequeo), y el segundo los ms significativos (G de grande). Para obtener la seal
S2 basta con tomar la seal A (activo) del codificador de los bits ms significativos (G_CODIF). La A del
codificador de 8 a 3 se obtiene realizando la OR de las seales de Activo de los codificadores de 4 a 2, ya que
estar activo si cualquiera de ellos est activo.
CODIF8a3
P_CODIF
SW4
SW5
SW6
SW7

I0
I1
I2
I3

S0
S1
A

EI

S0
S1

G_CODIF
BTN0
BTN1
BTN2
BTN3
SW0

I4
I5
I6
I7
EI

I0
I1
I2
I3
EI

LED7

EO

I0
I1
I2
I3

EO

S2

S0
S1
A

LED0
LED1

LED2

LED6

Figura 9.2: Extensin de un codificador


Para facilitar la comprensin del diseo, la figura 9.3 incluye la tabla de verdad del codificador de 8 a 3
incluyendo las seales internas que entran y salen en los codificadores de 4 a 2. Como se puede apreciar,
cuando alguna de las seales de I4 a I7 est activa, el codificador P_CODIF estar deshabilitado, y la salida S2
se pondr a 1. Cuando ninguna seal de I4 a I7 est activa, se habilita el codificador P_CODIF y la salida S2
estar inactiva.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

46

9. Extensin de la capacidad de un
codificador

Departamento de Tecnologa Electrnica

Seales internas de
los codificadores
de 4 a 2

ninguna entrada de
G_CODIF activa
habilita a P_CODIF
alguna entrada de
G_CODIF activa
deshabilita a P_CODIF

ENTRADAS
G_CODIF
P_CODIF
EI
EI
0
1
1
1
1
1
1
1
1
1

I3
I7
X
0
0
0
0
0
0
0
0
1

I2
I6
X
0
0
0
0
0
0
0
1
X

I1
I5
X
0
0
0
0
0
0
1
X
X

I0
I4
X
0
0
0
0
0
1
X
X
X

EI I3
I3
0 X
1 0
1 0
1 0
1 0
1 1
0 X
0 X
0 X
0 X

I2
I2
X
0
0
0
1
X
X
X
X
X

I1
I1
X
0
0
1
X
X
X
X
X
X

SALIDAS
P_CODIF

G_CODIF
I0
I0
X
0
1
X
X
X
X
X
X
X

S1 S0 A EO
0
0
0
0
0
0
0
0
1
1

0
0
0
0
0
0
0
1
0
1

0
0
0
0
0
0
1
1
1
1

La salida EO del codificador


G_CODIF entra como
habilitacin (EI) del P_CODIF

0
1
1
1
1
1
0
0
0
0

CODIF8a3

S1 S0 A EO
0
0
0
0
1
1
0
0
0
0

0
0
0
1
0
1
0
0
0
0

0
0
1
1
1
1
0
0
0
0

0
1
0
0
0
0
0
0
0
0

S2
0
0
0
0
0
0
1
1
1
1

S1
0
0
0
0
1
1
0
0
1
1

S0
0
0
0
1
0
1
0
1
0
1

A EO
0 0
0 1
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0

Seales externas
(puertos) del
codificador de 8 a 3

S1 y S2 del CODIF8a3
lo proporciona P_CODIF
S1 y S2 del CODIF8a3
lo proporciona G_CODIF

P_CODIF
deshabilitado

Figura 9.3: Tabla de verdad del codificador de 8 a 3 con las seales internas
Ahora implementa en la placa el diseo de la figura 9.3:

Crea un nuevo proyecto llamado CODIF8a3


Aade una copia del codificador de 4 a 2 que creaste en la prctica anterior (captulo 8): "ProyectAdd Copy of
Source..." y busca el "c:/practicas/edi/tunombre/codif4a2/codif4a2.sch"
Crea un smbolo de este codificador: ToolsSymbol Wizard
Crea una nueva fuente de tipo esquemtico llamada codif8a3 (ProyectNew Source)
Realiza el circuito de la figura 9.2
Crea el fichero UCF con los pines que la figura 9.2 indica
Baja el circuito a la FPGA
Comprueba que funciona correctamente

9.2. Inclusin del convertidor a siete segmentos


Ahora puedes repetir el paso que realizaste en el apartado 8.3 pero con el codificador de 8 a 3. De la misma
manera tendrs que aadir el convertidor a siete segmentos y crear un smbolo para ste y para el
codificador de 8 a 3. El esquema final se muestra en la figura 9.4, que es muy parecido al que habamos
hecho anteriormente (figura 8.9). La mayor diferencia es que ahora la entrada I2 del convertidor a siete
segmentos est conectada con la salida S2 del codificador de 8 a 3.

Figura 9.4: Esquema del circuito final

9.3. Codificador mayores


Se deja como ejercicio realizar un codificador de 12 entradas a 4 salidas a partir de codificadores de 4 a 2.
Para ello las 12 entradas sern los 4 pulsadores y los 8 interruptores (no uses un interruptor como
habilitacin sino que lo dejas a '1' permanentemente). Normalmente estos codificadores son de 16 a 4, pero lo
haremos de 12 a 4 porque no tenemos ms pulsadores ni interruptores en la placa.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

47

Departamento de Tecnologa Electrnica

10. Comparadores

10. Comparadores
Ya hemos aprendido a realizar varios diseos: puertas lgicas, decodificadores, codificadores y un
convertidor de hexadecimal a siete segmentos. Ahora vamos a hacer un comparador, primero lo haremos de
un slo bit y luego, con comparadores de un bit construiremos uno de dos bits.

10.1. Comparador de un bit


Lo primero que haremos es comparar dos nmeros de un bit. Realizar esta comparacin es fcil,
simplemente tenemos que construir la tabla de verdad y obtener las ecuaciones lgicas. En la figura 10.1 se
muestra esta tabla de verdad y la obtencin de sus ecuaciones lgicas. Se ha llamado AM a la seal que indica
que A es mayor (A>B) y BM a la seal que indica que B es mayor (A<B).
A
0
0
1
1

B
0
1
0
1

A=B

A>B

A<B

IGUAL

AM
0
0
1
0

BM
0
1
0
0

1
0
0
1

COMPA1
BM = m1 = AB

A
B

IGUAL
AM
BM

AM = m2 = AB
IGUAL=(AB)+(AB)=AB

Figura 10.1: Tabla de verdad, ecuaciones lgicas, y entradas y salidas del comparador de un bit
El diseo de este circuito es bien fcil, slo son tres puertas, dos puertos de entrada y tres de salida (figura
10.1). Cierra el proyecto anterior, abre uno nuevo llamado compa y crea un nuevo fichero llamado compa1.
Una vez que tengas el plano del circuito, aade las puertas lgicas, recuerda que tienes puertas AND con
A B y A
B (estas se llaman and2b1 y tienen una bolita de
una entrada negada para implementar la funcin
negacin en una de sus entradas). Tambin tienes funciones XNOR para implementar la salida IGUAL.
Pon los puertos con los mismos nombres de la figura 10.1. Cuando tengas el circuito listo gurdalo (CRTL+S)
y comprueba el esquemtico (ToolsCheck Schematic).
Si el diseo est bien pasaremos a implementarlo en la FPGA.
Ahora asignamos los pines, ya sabes como se hace, o bien con el fichero UCF o
con la herramienta PACE. Los vas a asignar como muestra la tabla 10.1:
Recuerda que en los pines tienes que poner el que indica en la placa, por
ejemplo para SW0 pondrs P89.
Y por fin implementa el comparador y comprueba que funciona bien.

SW0

SW1

AM

LD0

IGUAL

LD1

BM

LD2

Tabla 10.1: Tabla de


asignacin de seales

10.2. Comparador de dos bits


Un comparador de un solo bit es bastante fcil ya que slo tenemos 4 posibles combinaciones. Para uno de
dos bits hay que pensrselo un poco ms. El bloque que queremos implementar se muestra en la figura 10.2.
A partir de dos seales de 2 bits, queremos saber si son iguales, o si una es mayor que la otra. Como son
seales de dos bits tenemos que saber cul es el bit ms significativo. Recuerda que no es lo mismo 102 que
012. A pesar de que tienen el mismo nmero de unos y ceros, el orden en que estn situados determina la
diferencia.
Por lo tanto tenemos que diferenciar cul es el bit ms significativo. Para eso podemos representar el circuito
como el bloque de la izquierda de la figura 10.2. En donde se muestran uno por uno todos los bits (o cables)
de cada seal.
Sin embargo, para evitar tener que poner un cable para cada bit, se puede representar como un bus. Esta
representacin se muestra a la derecha de la figura 10.2. Para este ejemplo no se nota mucho la diferencia,
pero imagnate que quieras hacer un comparador de 32 bits.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

48

Departamento de Tecnologa Electrnica

10. Comparadores

COMPA2
bit ms
significativo

bit ms
significativo

COMPA2

A0

A(1:0)

A1

IGUAL
AM
BM

B0
B1

B(1:0)

IGUAL
AM
BM

ancho del bus

Figura 10.2: Diagramas de entradas y salidas del comparador de dos bits. A la izquierda con cables simple, a
la.derecha con buses.
El comparador de 2 bits lo podramos hacer igual que el cuarto ejercicio de los propuestos del tema 3. Como
tenemos cuatro variables es un nmero adecuado para hacerlo por Karnaugh. Sin embargo, ya que tenemos
el comparador de 1 bit, lo utilizaremos para hacerlo modularmente.
La tabla de verdad del circuito se muestra en la tabla 10.2.
A1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

A0
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

B1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

B0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

IGUAL

1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1

AM
0
0
0
0
1
0
0
0
1
1
0
0
1
1
1
0

BM
0
1
1
1
0
0
1
1
0
0
0
1
0
0
0
0

Tabla 10.2: Tabla de de verdad del comparador de dos bits


Para comprender mejor el funcionamiento del comparador, reordenaremos la tabla de verdad por los bits
ms significativos. Ya que el bit ms significativo "manda" sobre el menos significativo, esto se aprecia mejor
en la tabla de la figura 10.3.
MSB
A1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

B1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

LSB
A0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

B0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

IGUAL

1
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1

AM
0
0
1
0
0
0
0
0
1
1
1
1
0
0
1
0

BM
0
1
0
0
1
1
1
1
0
0
0
0
0
1
0
0

A1=B1

comprobar
el LSB

A1<B1

Igual=0
AM=0
BM=1

A1>B1

Igual=0
AM=1
BM=0

A1=B1

comprobar
el LSB

Figura 10.3: Tabla de verdad del comparador de dos bits ordenada desde los bits ms significativos a los menos
Fjate en la tabla de verdad de la figura 10.3:

Cuando A1<B1 entonces A es menor que B: IGUAL=0 ; AM=0 ; BM = 1


Cuando A1>B1 entonces A es mayor que B: IGUAL=0 ; AM=1 ; BM = 0

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

49

Departamento de Tecnologa Electrnica

10. Comparadores

Cuando A1=B1 entonces comprobamos el bit cero:

Si A0<B0 entonces A es menor que B:

IGUAL=0 ; AM=0 ; BM = 1

Si A0>B0 entonces A es mayor que B:

IGUAL=0 ; AM=1 ; BM = 0

Si A0=B0 entonces A es igual que B:

IGUAL=1 ; AM=0 ; BM = 0

De estos puntos podemos extraer que:


A es igual a B (IGUAL=1) cuando:
A1=B1 y A0=B0
A es mayor que B (AM=1) cuando
A1>B1

O cuando (A1=B1) y A0>B0

A es menor que B (BM=1) cuando


A1<B1

O cuando (A1=B1) y A0<B0

Date cuenta que en estos puntos slo estamos haciendo comparaciones bit a bit. Esto es, podemos hacer
comparaciones individuales. Y podemos traducir estas sentencias a algebra de Boole y puertas lgicas. La
figura 10.4 muestra la construccin del comparador de dos bits para las seales IGUAL y AM. Para no complicar
el esquema, no se ha dibujado el diagrama de puertas para la seal BM, pero es similar al de la seal AM.
Iguales

Si (A1=B1) y (A0=B0)
IGUAL_1=1

COMPA1
A0
B0

IGUAL_0
AM_0

IGUAL_0=1

IGUAL= IGUAL_1 IGUAL_0


IGUAL

BM_0

COMPA1
A1
B1

IGUAL_1
AM

AM_1
BM_1

A>B Si (A1>B1) [(A1=B1) Y (A0>B0)]


AM_1=1

IGUAL_1=1

AM_0=1

AM = AM_1 + (IGUAL_1 AM_0)

Figura 10.4: Comparador de dos bits hecho con comparadores de un bit (falta el A<B)

10.2.1. Diseo del comparador


Ahora tienes que disear el comparador. Puedes crearlo en el mismo proyecto. Ya sabes los pasos,
esquemticamente son:

Crear un smbolo para el comparador de un bit


Crear un nuevo esquemtico de nombre compa2 (no lo llames comp2 porque ya existe
ese componente en la biblioteca de Xilinx y puede llevar a error) que contenga un
diseo similar al de la figura 10.4, incluyendo el circuito de la seal de salida BM
Al terminar el diseo, guardarlo y comprobar el circuito
Opcionalmente puedes simularlo
Y para implementarlo, asignarle los pines de entrada y salida, que sern los
mostrados en la tabla 10.3.
Sintetizar, Implementar y programar la FPGA

A0

SW0

A1

SW1

B0

SW2

B1

SW3

AM

LD0

IGUAL

LD1

BM

LD2

Tabla 10.3:
Asignacin de seales

Una vez que lo hayas implementado en la FPGA, comprueba en la placa que el circuito funciona bien. Presta
atencin al comportamiento de las salidas en funcin de los cambios en las entradas. Fjate cmo el bit ms
significativo "manda" sobre el menos significativo.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

50

Departamento de Tecnologa Electrnica

11. Comparadores en cascada

11. Comparadores en cascada


El mecanismo para hacer un comparador de ms bits es el mismo, por ejemplo, si a partir del comparador de
dos bits quisisemos realizar un comparador de 4 bits, los conectaramos de manera similar a la figura 10.4
aunque en este caso los bloques comparadores que usamos seran de dos bits en vez de uno. El circuito final
nos quedara como el de la figura 11.1.
bits 1 y 0

COMPA2

IGUAL_10
AM_10

A0
A1

IGUAL

BM_10

B0
B1
COMPA2
A2
A3

IGUAL_32

B2
B3

BM_32

AM

AM_32

BM
bits 3 y 2

Figura 11.1: Comparador de 4 bits hecho con comparadores de dos bits


Por lo tanto, siguiendo este esquema podramos construir cualquier comparador del nmero de entradas
que quisisemos. Sin embargo, la lgica de comparacin que une los dos comparadores es un poco
incmoda y sera ms adecuado poder conectar los comparadores directamente, sin tener que aadir esas
puertas. Lo que queremos se muestra en la figura 11.2.
COMP2_CAS
A0_MSB
A1_MSB
Comparaciones de
los bits menos
significativos (LSB)

IGUAL
AM
BM

IGUAL_LSB
AM_LSB
BM_LSB
B0_MSB
B1_MSB

Figura 11.2: Comparador de dos bits que se puede poner en cascada


El bloque (COMP2_CAS) de la figura 11.2, adems de los dos bits correspondientes que quiere comparar, recibe
las entradas de la comparacin de los bits menos significativos. Por tanto, los comparadores se pueden
conectar directamente, como se muestra en la figura 11.3. Fjate el valor de las entradas de comparacin del
comparador de los bits menos significativos: cuando no hay ms bits que comparar, se ponen como si fuesen
iguales (IGUAL_LSB='1').
Comparador de
los bits menos
significativos

A2
A3

COMP2_CAS
A0
A1
'1'
'0'
'0'

B0
B1

Comparador de
los bits ms
significativos

COMP2_CAS

A0_MSB
A1_MSB

A0_MSB
A1_MSB

IGUAL_LSB
IGUAL
AM_LSB
AM
BM_LSB
BM

IGUAL_LSB
AM_LSB
BM_LSB

B0_MSB
B1_MSB

B0_MSB
B1_MSB

IGUAL
AM
BM

IGUAL
AM
BM

B2
B3

Figura 11.3: Comparador de 4 bits conectando dos comparadores de dos bits en cascada
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

51

Departamento de Tecnologa Electrnica

11. Comparadores en cascada

Cmo podramos hacer un comparador para que se pueda conectar en cascada? Simplemente tenemos que
quitar el comparador de los bits menos significativos de la figura 11.1 y hacer que lo que eran sus salidas
sean ahora las entradas del bloque. Esto se muestra en la figura 11.4, compralo con el de la figura 11.1.
Entradas de las
comparaciones de los bits
menos significativos (LSB)

IGUAL_LSB
AM_LSB

IGUAL

BM_LSB
Bits ms
significativos:

COMPA2

A0_MSB
A1_MSB

IGUAL

B0_MSB
B1_MSB

BM

AM

AM
BM

Figura 11.4: Comparador de dos bits que se puede conectar en cascada


Para implementar el comparador de dos bits de la figura 11.2 y 11.4 crearemos un nuevo proyecto comp2_cas.
A este proyecto vamos a aadirle el fichero de los comparadores ya hemos creado comp1.sch y comp2.sch
Para ello ejecutamos "ProyectAdd Copy of Source" y nos movemos por las carpetas en busca de los ficheros
(C:/practicas/EDI/tunombre/compa/.) . Cuando los encontremos le damos a Abrir. Ahora crea un nuevo
smbolo para compa2. Haz que las seales A0 y A1 estn juntas en la figura del smbolo.
Puede ser que en la configuracin de tu navegador de Windows no lo tengas configurado de manera que se
puedan ver las extensiones de los ficheros, y por tanto te sea difcil encontrarlo. Si esto te ocurre, abre un
explorador de archivos de Windows, ejecuta "HerramientasOpciones de Carpeta ..." y dentro de la ventana que
te sale selecciona la pestaa Ver. En ella, casi al final, qutale la marca a "Ocultar las extensiones de archivo para
tipos de archivo conocido". Y luego pincha en aceptar.
Y ya empezaremos a crear el comparador de dos bits conectable en cascada. Para ello creamos una nueva
fuente llamada comp2_cas.sch. En el editor de esquemticos le aadimos el smbolo del comparador de dos
bits, y realizamos el circuito de la figura 11.4. Cuando terminemos, grabamos, y comprobamos el
esquemtico (ToolsCheck Syntax) y haz que compruebe jerrquicamente (ToolsCheck Syntax). Creamos el
smbolo de este esquemtico. Ordena los puertos como estn en la figura 11.2.
Y ahora crea un nueva fuente llamada comp4_cas.sch, que implementar el comparador de 4 bits mostrado
en la figura 11.3. Sin embargo, para este circuito vamos a aprender a usar buses. Un bus es un cable que
representa un conjunto de cables, y con esto hacemos el esquema del diseo ms claro.
Lo primero que haremos es incluir en nuestro diseo dos referencias al comparador de dos bits en cascada
que acabamos de realizar. Encima y debajo de l ponemos dos cables. Al cable de arriba lo llamaremos
A(3:0) y el de abajo B(3:0). Recuerda que para nombrar un cable ejecutbamos "AddNet Name" y tenamos
que poner el nombre en la ventaja de opciones. Fjate que despus de poner el nombre el cable se muestra
ms grueso. La figura 11.5 muestra esta primera parte del diseo.

Figura 11.5: Inicio del diseo con comparadores en cascada y buses


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

52

Departamento de Tecnologa Electrnica

11. Comparadores en cascada

Ahora queremos conectar cada una de las lneas de los buses a las entradas del comparador. Para ello
empezamos aadiendo un conector al bus con el comando AddBus Tap. Al seleccionar ste comando, en la
ventana de opciones podemos elegir la orientacin del terminal triangular. ste tiene que ir en el lado del
bus, as que para el bus A tendras que seleccionar Top, mientras que para el bus B seleccionaras Bottom. El
diseo debera quedar como muestra la figura 11.6.

Figura 11.6: Buses con los conectores


Ahora vamos a unir cada conector del bus con las entradas de los comparadores. Ya sabemos cmo se hace
esto (con el comando AddWire). Y a continuacin nombraremos cada cable para as identificar a qu bit del
bus se refiere. Los bits individuales del bus se nombran con el nombre del bus y entre parntesis el ndice. En
nuestro caso, para A(3:0) sern A(3), A(2), A(1) y A(0).
Usamos el comando AddNet Name. Para poner el nombre ms cmodamente podemos empezar por el A(0),
y seleccionar la opcin Increase the name. Con esto, automticamente despus de nombrar a A(0) el nombre
que se pondra sera A(1), evitndonos tener que cambiarlo manualmente. La figura 11.7 muestra dnde se
seleccionan estas opciones y el esquemtico resultante. Debes fijarte bien en qu elementos del bus conectas
con las entradas de los comparadores y asegurarte de que entiendes lo que estas haciendo.

Nombre
Nombre

Increase
Increase the
the name
name

Figura 11.7:Nombre de los cables de los buses

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

53

Departamento de Tecnologa Electrnica

11. Comparadores en cascada

Ahora conectamos los buses a los puertos de entrada de nuestro diseo. Esto se hace igual que hemos hecho
hasta ahora. Como lo conectamos al bus, que ya tiene nombre, el puerto de entrada adquiere el mismo
nombre que el bus.
Por ltimo, realizamos las interconexiones entre los comparadores, les conectamos los puertos de salida, y
los valores de las entradas, igual que se muestra en la figura 11.3 y en la 11.8.

Figura 11.8:Diseo final del comparador de 4 bits


Guardamos el diseo, comprobamos
(ToolsHierarchical Check).

el

esquemtico

(ToolsCheck

Schematic)

la

jerarqua

Si lo deseas, puedes simular el circuito o bien implementarlo directamente.


Asignamos los pines con la herramienta PACE: en la ventana de procesos: "User ConstraintsAssign Package
Pines". Los 4 interruptores de la derecha sern para el bus A (SW3, SW2, SW1, SW0), los cuatro interruptores de
la izquierda para B. Y usaremos los mismo LED que en el comparador anterior.
A(0)

SW0

B(0)

SW4

IGUAL

LD1

A(1)

SW1

B(1)

SW5

AM

LD0

A(2)

SW2

B(2)

SW6

BM

LD2

A(3)

SW3

B(3)

SW7

Tabla 11.1: Conexiones de los puertos con los pines de la FPGA


En caso de que prefieras editar el fichero .UCF a mano, los buses se escriben as:
NET "A<0>"
NET "A<1>"

LOC = "P89"
LOC = "P88"

;
;

Cdigo 11.1: Ejemplo de conexin de pines con elementos de un bus


Y ahora ya implementa el circuito en la FPGA, los pasos supongo que ya los sabes.
Comprueba que el circuito compara correctamente.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

54

Departamento de Tecnologa Electrnica

12. El multiplexor

12. El multiplexor
El diseo que acabamos de realizar est bien pero ahora nos gustara que el circuito no slo indique con los
LED qu nmero es mayor, sino que tambin nos muestre el nmero mayor por el display de siete
segmentos.
A partir de ahora se van a dar las especificaciones del sistema que queremos realizar, de modo que sean
suficientes para disear el circuito. Posteriormente se darn algunas explicaciones de cmo se puede realizar.
Intenta realizar el diseo sin mirar la solucin o al menos pensarlo. Luego, si no te sale, o si lo quieres
comprobar, consulta la solucin.
Habitualmente, la empresa de ingeniera o el ingeniero tiene que realizar el diseo de un sistema a partir de
unas especificaciones que le da el cliente o su jefe. No siempre el cliente tiene las cosas claras o sabe explicar
lo que quiere. Por tanto, la tarea de realizar las especificaciones dura varias sesiones en las que las dos partes
se ponen de acuerdo en las prestaciones del diseo, el coste, el tiempo en que el producto va a estar
disponible, ...

12.1. Especificaciones
Comparador de dos nmeros de 4 bits. El circuito debe comparar dos nmeros de 4 bits (A y B) que estarn
codificados por medio de los interruptores de la placa. El circuito indicar a travs de tres LED el resultado
de la comparacin:

Si A>B lucir el led LD0 de la placa, en otro caso permanecer apagado


Si A=B entonces LD1 se encender, en otro caso permanecer apagado
Si A<B entonces LD2 se encender, en otro caso permanecer apagado

Adems, el circuito mostrar por un display de siete segmentos el nmero mayor. En caso de que sea A el
nmero mayor, lo mostrar por el display de la derecha (AN0), en caso de que A sea menor lo mostrar por el
display de la izquierda (AN3), y en caso de que sean iguales se mostrar por los dos displays anteriores (el de la
izquierda y el de la derecha: AN0 y AN3).
Los 4 interruptores de la derecha correspondern con el nmero A, de modo que:
A(0) ser el interruptor SW0
A(1) ser el interruptor SW1
A(2) ser el interruptor SW2
A(3) ser el interruptor SW3

Los 4 interruptores de la izquierda correspondern con el nmero B, de modo que:


B(0) ser el interruptor SW4
B(1) ser el interruptor SW5
B(2) ser el interruptor SW6
B(3) ser el interruptor SW7

Con esta informacin se debe disear el circuito con bloques e implementarlo en la FPGA. Aunque muchos
de los bloques ya estn hechos y no volvamos a repetir cmo se hacen, debers saber cmo se realizan en
puertas.

12.2. Diagrama de bloques del circuito


Realmente el diseo no es mucho ms complicado que el comparador de 4 bits anterior, nicamente
debemos aadir la visualizacin del nmero mayor por el display de siete segmentos. La comparacin de los
nmeros debe seleccionar qu nmero se mostrar en los displays. Los bloques que realizan un seleccin son
los multiplexores. En este caso necesitamos seleccionar entre dos nmeros: A y B, y por lo tanto necesitamos
un multiplexor de 2 entradas (y una seal de seleccin). La seal que va a seleccionar ser la que indica si
A>B, la que habamos llamado AM en el comparador de la figura 11.3. El multiplexor de dos entradas de datos
y su esquema en puertas se muestra en la figura 12.1.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

55

Departamento de Tecnologa Electrnica

MUX
A

12. El multiplexor

AM

Si AM='1', por la salida S tendremos A


Si AM='0', por la salida S tendremos B

AM

Figura 12.1: Multiplexor de dos entradas de datos y una de seleccin


En nuestro caso las entradas de dato del multiplexor tendrn ms de un bit, por lo tanto tendramos que usar
una variante de este multiplexor con entradas de tipo bus. Por ejemplo, un multiplexor de dos bits se
realizara como muestra la figura 12.2. En la figura se puede observar que se usa un multiplexor de un bit de
ancho para cada bit y que todos los multiplexores tienen la misma seal de seleccin.
A(1:0)

A(1)

A(1)

A(0)

MUX2_2b
A(1:0)
B(1:0)

2
2

B(1)

equivalente
0

S(1)

AM

S(1:0)

S(1:0)

1
B(1:0) 2

AM

A(0)

B(1)

B(0)

B(0)

S(0)

AM

AM

Figura 12.2: Multiplexor de dos entradas de datos de dos bits de ancho


Al realizar un diseo, normalmente no hay una nica solucin para un circuito, sin embargo hay algunas
que son ms ventajosas que otras. Unas pueden tener menor nmero de puertas, otras podrn ser ms
complicadas o ser ms rpidas (tienen menos retardos).
Por ejemplo, una opcin valida para nuestro diseo sera hacerlo como muestra la figura 12.3. En este diseo
se convierten los nmeros A y B a siete segmentos, dichas seales convertidas se han llamado A_7SEG y B_7SEG
respectivamente. Estas seales pasan por un multiplexor que las va a seleccionar segn el valor de AM (segn
si A>B). Este valor ser el que salga por el display. Por otro lado, se muestran tambin las seales AN_0 y AN_3,
que harn que se encienda uno de los dos displays o los dos a la vez si son iguales. El display de la derecha
(AN_0) se encender cuando A>B (AM='1') cuando A=B (IGUAL='1'). El display de la izquierda (AN_3) se
encender cuando A<B (BM='1') cuando A=B (IGUAL='1').Fjate que hay una puerta NOR debido a que las
seales AN funcionan con lgica negada.
HEX7SEG

A(3:0)

SEG(6:0)

A_7SEG
7

HEX7SEG
SEG(6:0)
B(3:0)

SEG_A
SEG_B
SEG_C
SEG_D
SEG_E
SEG_F
SEG_G

MUX

I(3:0)

B_7SEG

I(3:0)

COMP4

A(3:0)

AM
IGUAL
B(3:0)
BM

AN_0
AN_3

Figura 12.3: Primera propuesta para el diseo


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

56

Departamento de Tecnologa Electrnica

12. El multiplexor

Otra alternativa para realizar el circuito es la mostrada en la figura 12.4. Fjate que en ella no slo hay un
menor nmero de componentes (slo hay un convertidor de hex a 7 segmentos) sino que adems las
entradas del multiplexor utilizado tienen 4 elementos en vez de siete, lo que hace que sea bastante menor.
As que esta alternativa es ms sencilla y ser la que implementemos. Seguramente haya otras alternativas y
alguna de ellas se te ha podido ocurrir a ti.
HEX7SEG

MUX
A(3:0)
B(3:0)

I(3:0)

COMP4

SEG(6:0)

SEG_A
SEG_B
SEG_C
SEG_D
SEG_E
SEG_F
SEG_G

A(3:0)

AM
IGUAL
B(3:0)
BM

AN_0
AN_3

Figura 12.4: Alternativa para el diseo

12.3. Diseo
Del circuito de la figura 12.4 ya hemos realizado todos los bloques excepto el multiplexor.
Creamos un nuevo proyecto llamado mux7seg. Ahora vamos a aadir el convertidor de 7 segmentos que
hicimos en el ejercicio Y aadimos una copia de la fuente del circuito que hicimos en el ejercicio 7, el
convertidor de hexadecimal a siete segmentos (el proyecto se llamaba hex7seg). Para ello tenemos copiamos
y aadimos al proyecto el decodificador y el convertidor:
(ProyectAdd Copy of Source...) y seleccionamos los ficheros decod4a16.sch y hex7seg.sch
Vamos a realizar alguna modificacin al convertidor para luego crear un mdulo: seleccionamos todas las
salidas AN que habamos creado y las eliminamos. Pues ahora las vamos a gobernar desde fuera del
convertidor. La seal SEG_DT la podemos dejar. Una vez que lo hayamos hecho, guardamos y comprobamos
el esquemtico (ToolsCheck Schematic y tambin ToolsHierachical Check).
Si todo sale bien, ahora creamos un smbolo de este diseo: (ToolsSymbol Wizard) y seleccionamos el
Ordenamos los puertos si no estuviesen ordenados.

hex7seg.

A continuacin vamos a crear un multiplexor de 2 entradas de dato y una de seleccin, con 4 bits en cada
entrada de dato. Creamos una nueva fuente llamada mux2_4bit. Podramos crear el multiplexor con puertas
como se muestra en la figura 12.1 (con la diferencia que ahora cada lnea de datos tiene 4 bits) sin embargo
para tardar menos vamos a usar los multiplexores de dos entradas de 1 bit que tiene el ISE: ventana de
smbolos, selecciona la categora Mux, y dentro de los smbolos selecciona el m2_1. El multiplexor diseado
debera quedar parecido a como lo muestra 12.5. Hemos llamado a las entradas D0 y D1, que se refieren al
dato que se selecciona cuando SEL vale 0, y cuando SEL vale 1, respectivamente.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

57

Departamento de Tecnologa Electrnica

12. El multiplexor

Figura 12.5: Multiplexor de 2 datos de 4 bits cada dato (una seal de seleccin)
Guarda el diseo, comprueba el esquemtico y crea un smbolo de este multiplexor para poder usarlo en el
diseo de ms alto nivel: el que va a reunir a todos, como el de la figura 12.4.
Creamos el diseo de ms alto nivel de nuestro circuito, que ser como el de la figura 12.4. Aadimos nueva
fuente llamada mux7seg.sch.
Necesitamos un comparador, o bien usamos el comparador que hemos creado en la prctica 11 (ya sabes
cmo se importa) o bien podemos usar el comparador de la biblioteca de Xilinx. Si coges el de Xilinx, dentro
de la ventana de opciones, en la categora Comparator, escoge el compm4. Este comparador es de 4 bits, y tiene
como salidas GT (A mayor) y LT (A menor). Nos falta el igual, pero lo podemos obtener fcilmente, ya que
cundo A y B sern iguales? pues cuando ni A sea mayor que B ni A sea menor que B. Y esto que acabamos
GT
LT . Otra manera de decirlo es que A y B son
de decir en lgebra de Boole se traduce como: IGUAL =
GT+LT . Fjate que las dos
iguales cuando no ocurre que A sea mayor que B, o que A sea menor que B: IGUAL =
expresiones son equivalentes por el teorema de De Morgan. An as, si te las, puedes hacer la tabla de
verdad.

El diseo final del circuito podra quedarte como lo muestra la figura 12.6. Fjate que entre otros, tambin se
han aadido los puertos que van a los LED (AM, BM, IGUAL) Asegrate que entiendes todo.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

58

Departamento de Tecnologa Electrnica

12. El multiplexor

Figura 12.6: Diseo final del circuito


Una vez que lo termines, guarda el diseo, comprueba el esquemtico, y asigna los pines. La especificacin de los pines
la tenas en el apartado 12.1. Seguramente no salga el PACE y la tengas que hacer editando el UCF. Intenta hacerlo sin
mirar, an as, a continuacin se incluye el fichero UCF para los puertos de la figura.
# ----------- Datos: A y B -------------------NET "A<0>" LOC = "P89" ;
NET "A<1>" LOC = "P88" ;
NET "A<2>" LOC = "P87" ;
NET "A<3>" LOC = "P86" ;
NET "B<0>" LOC = "P84" ;
NET "B<1>" LOC = "P83" ;
NET "B<2>" LOC = "P82" ;
NET "B<3>" LOC = "P81" ;
# ---------------- LEDS ----------------------NET "AM" LOC = "P46" ;
NET "BM" LOC = "P44" ;
NET "IGUAL" LOC = "P45" ;
# ----------- Encendido de los displays ------NET "AN_0" LOC = "P60" ;
NET "AN_1" LOC = "P69" ;
NET "AN_2" LOC = "P71" ;
NET "AN_3" LOC = "P75" ;
# ----------- 7 segmentos --------------------NET "SEG_A" LOC = "P74" ;
NET "SEG_B" LOC = "P70" ;
NET "SEG_C" LOC = "P67" ;
NET "SEG_D" LOC = "P62" ;
NET "SEG_E" LOC = "P61" ;
NET "SEG_F" LOC = "P73" ;
NET "SEG_G" LOC = "P68" ;
# ----------- Punto decimal ------------------NET "SEG_DT" LOC = "P63" ;

Cdigo 2: Contenido del fichero UCF


Finalmente implementa el diseo en la FPGA y comprueba que todo funciona como se ha especificado. Si es
as, enhorabuena, este ha sido un diseo de cierta complejidad.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

59

Departamento de Tecnologa Electrnica

13. El sumador

13. El sumador
En clase se ha explicado el sumador, y en este ejercicio simplemente aplicaremos la teora para realizarlo. As
que las especificaciones van a ser muy sencillas. Despus de leer las especificaciones puedes intentar hacerlo
t slo o ir al apartado siguiente donde se explica el diseo del sumador.

13.1. Especificaciones
Sumador de dos nmeros de 4 bits. El circuito debe sumar dos nmeros sin signo de 4 bits (A y B) que estarn
codificados por medio de los interruptores de la placa. El circuito mostrar en el display de la derecha el
resultado de la suma y en caso de que haya desbordamiento encender el LED de la izquierda (LD7), adems
encender el punto decimal del display cuando haya desbordamiento.
La correspondencia de los interruptores con los nmeros A y B es la misma que la del ejercicio 12 (apartado
12.1). Esto es, los cuatro de la derecha se corresponden con la seal A y los cuatro de la izquierda con B.
Adems el sumador recibir el acarreo de entrada por medio del pulsador de la derecha (BTN0).
Opcionalmente tambin se podr sacar el resultado codificado en binario por los cuatro LED de la derecha
(de LD0 a LD3).

13.2. Diseo
Empezaremos realizando el diseo de un sumador de 1 bit, para luego ir juntando estos sumadores de un
bit. Realizando lo que se llama un sumador en paralelo con acarreo en serie (tambin llamado en cascada).
Si queremos sumar dos nmeros de un bit, podemos realizar un semisumador (HA: half adder), con el que
obtenemos el resultado de la suma (S) y el acarreo (C). En la figura 13.1 se muestra la tabla de verdad de la
suma y el acarreo, y el circuito que lo implementa. La obtencin de este circuito a partir de la tabla de verdad
ya te debera ser fcil si has estudiado el tema 3: lgebra de Boole y funciones lgicas.
HA

A
0
0
1
1

B
0
1
0
1

S
0
1
1
0

C
0
0
0
1

Figura 13.1: Tabla de verdad y circuito que implementa el semisumador


Crearemos un proyecto llamado sumador. En el proyecto creamos una fuente llamada ha.sch y en ella
realizamos el circuito de la figura 13.1. Lo guardamos, lo comprobamos (Tools Check Schematic) y creamos
un smbolo (Tools Symbol Wizard).
Acabamos de realizar un semi-sumador, y se llama as porque no hemos incluido el acarreo de entrada. Al
incluir este formamos un sumador completo (full-adder: FA). En el sumador completo tenemos la seal CI
que se corresponde con el acarreo de entrada, y el acarreo de salida se llama ahora CO. La figura 13.2 muestra
la tabla de verdad del sumador completo y cmo se forma ste con semisumadores. Tambin se poda haber
realizado resolviendo las ecuaciones lgicas de S y CO mediante mapas de Karnaugh.
A
0
0
0
0
1
1
1
1

B
0
0
1
1
0
0
1
1

CI
0
1
0
1
0
1
0
1

S
0
1
1
0
1
0
0
1

CO
0
0
0
1
0
1
1
1

HA
S

CI
HA
A

CO

Figura 13.2: Sumador completo a partir de semisumadores


Creamos una nueva fuente llamada fa.sch para realizar el sumador completo. Puedes realizarlo igual que la
13.2, usando los semisumadores que ya hemos realizado, o puedes hacerlo por Karnaugh, como t prefieras.
Cuando hayas terminado, lo grabas, compruebas el esquemtico (ToolsCheck Schematic) y creas un smbolo
para el sumador completo.
Si tienes alguna duda o quieres comprobar el diseo puedes simularlo o implementarlo en la placa (ya sabes
cmo se hace). Si no continuamos realizando el sumador de 4 bits.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

60

Departamento de Tecnologa Electrnica

13. El sumador

Una vez que tenemos un sumador completo de 1 bit, la realizacin de un sumador de 4 bits es bastante fcil.
Simplemente tenemos que conectar los acarreos consecutivamente del bit menos significativo al ms
significativo. Y conectar las entradas de A y B en paralelo, en sus sumadores correspondientes. El diseo se
muestra en la figura 13.3.
bits ms
significativos
(MSB)

A3

B3

A
CO
Acarreo de salida
(o desbordamiento)

CO

CI

C2

A2

B2

CO

CI

C1

A1

B1

CO

CI

C0

A0

B0

CO

CI

S3

S2

S1

S0

bits menos
significativos
(LSB)

CI
Acarreo de
entrada a cero

Figura 13.3: Sumador de 4 bits a partir de sumadores completos


Para disear el sumador de 4 bits creamos una nueva fuente llamada sum4bits.sch. En ella incluimos los
bloques FA que acabamos de realizar. Los podemos colocar verticalmente, como muestra la figura 13.4 bien
rotarlos y voltearlos (rotate & mirror). Al contrario que como sale en la figura 13.3, el acarreo de entrada CI, lo
vamos a poner como puerto de entrada (figura 13.4), para as poder conectar varios mdulos en cascada, o
en nuestro caso introducirlo cuando apretemos el pulsador BTN0.

Figura 13.4: Esquemtico del sumador de 4 bits


Guardamos el esquemtico y lo comprobamos (ToolsCheck Schematic y ToolsHierarchical Check). Y
creamos un smbolo del diseo (ToolsSymbol Wizard) de manera que el orden de los puertos quede como
muestra la figura 13.5.
4

CI
A(3:0)
B(3:0)

S(3:0)
CO

SUM4BITS

Figura 13.5: Bloque del sumador de 4 bits


Ya tenemos el sumador hecho, aunque todava nos queda la parte de visualizacin del resultado. Antes de
realizar la parte de la visualizacin, puedes simular el circuito para comprobar que est bien, o incluso
implementarlo, haciendo que los cuatro LED de la derecha se correspondan con la salida del sumador (te
recomiendo que lo hagas).
Ahora vamos a implementar el circuito completo, incluyendo la parte de visualizacin. Para esto tenemos
que aadir al proyecto el convertidor a siete segmentos que hemos realizado en ejercicio 7 y que luego
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

61

Departamento de Tecnologa Electrnica

13. El sumador

modificamos en el ejercicio 12. Los pasos para importarlo estaban descritos en el apartado 12.3, pero los
recordamos:

Aadir una copia de algunas las fuentes de los circuitos que hicimos en el ejercicio12 (el proyecto se llamaba
mux7seg). Estos son el decodificador de 4 a 16: decod4a16.sch y el bloque que lo contena, el convertidor a 7
segmentos: hex7seg.sch. Para ello ejecutamos el comando ProyectAdd Copy of Source... y seleccionamos los
ficheros decod4a16.sch y hex7seg.sch
El convertidor vamos a modificarlo un poco, vamos a eliminar el puerto SEG_DT en ese diseo la tenamos
siempre a uno, ahora la quitamos completamente. Guardamos el diseo, y comprobamos el esquemtico
(ToolsCheck Schematic y tambin ToolsHierachical Check).
Por ltimo creamos un smbolo del convertidor (ToolsSymbol Wizard) y seleccionamos el hex7seg. Asegrate
que los puertos estn ordenados.

Ahora creamos una nueva fuente llamada top_sumador.sch que va a contener el sumador y el convertidor de
hexadecimal a 7 segmentos. La hemos nombrado con el prefijo top para indicar que es el diseo que contiene
al resto de componentes del circuito.
Ya deberas poder terminar el diseo t solo, an as, a continuacin se muestra una implementacin posible
(figura 13.6). Si no has sabido hacerla por ti mismo intenta entender todo el circuito propuesto.

Figura 13.6: Esquemtico del sumador de 4 bits con el convertidor a 7 segmentos


Cuando termines de disearlo haz lo de siempre: grabar, comprobar, asignar los pines con PACE o editando
el UCF (puedes copiar y modificar los UCF que has creado en diseos anteriores), y por ltimo, sintetizar e
implementar en la FPGA. En caso de que hayas implementado la versin anterior (la que no mostraba nada
por el display), ten cuidado de no programar la FPGA con el fichero sum4bits.bit, sino que la debers
programar con el nuevo fichero: top_sumador.bit.
Al terminar comprueba que funciona bien, fjate en los LED y en lo que muestra el display y verifica que se
trata del mismo nmero. Comprueba tambin que la suma est bien, y si funciona el acarreo de entrada: el
pulsador de la derecha (BTN0). Y tambin el acarreo de salida (desbordamiento) que se debera mostrar con el
LED de la izquierda y con el punto decimal. Aprovecha tambin para repasar los conceptos tericos del tema
2 (Sistemas de numeracin y codificacin): nmeros en binario y cmo se realiza la suma.
Si has logrado realizar este circuito por ti mismo te ests convirtiendo en un buen diseador de circuitos
digitales.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

62

Departamento de Tecnologa Electrnica

14. Sumador/restador

14. Sumador/restador
Queremos hacer un circuito que reste, para ello podramos hacer un circuito restador de un bit a partir de la
tabla de verdad de la resta. Esto se hara de manera similar a como se hace el semi-sumador y el sumador
completo (ver figuras 13.1 y 13.2). Y aunque esto es un buen ejercicio que conviene que sepas hacer, en esta
prctica vamos a aprovechar los conocimientos de representacin numrica que vimos en el tema 2. En aquel
tema vimos que usando el complemento a 2 (Ca2) podamos realizar una resta sumando. As que nos
ahorramos realizar un nuevo bloque restador y lo que haremos ser calcular el complemento a dos del
sustraendo y sumarlo al minuendo.

14.1. Especificaciones
Sumador/restador de dos nmeros de 4 bits. El circuito debe sumar o restar dos nmeros codificados en
complemento a 2 con 4 bits (OPA y OPB) y cuyos valores estarn determinados por la posicin de los
interruptores de la placa. El circuito mostrar en el display de la derecha el resultado de la suma o la resta.
Los operandos vendrn dados por los interruptores. El minuendo (o uno de los sumandos: OPA) se codificar
mediante los 4 interruptores de la derecha (de SW0 a SW3), y el sustraendo (o el otro sumando: OPB) con los
cuatro interruptores de la izquierda (de SW4 a SW7). Recuerda que los nmeros vienen codificados en
complemento a 2.
EL pulsador BTN0 indicar qu operacin se realiza. Cuando est pulsador se har la resta, mientras que
cuando no est pulsado se efectuar la suma.
El resultado de la operacin (suma o resta) se mostrar por el primer display de 7 segmentos. El resultado se
deber mostrar en el display en signo magnitud (para que lo podamos entender los humanos). Para mostrar
el signo negativo se utilizar el punto decimal, es decir, si el punto decimal est luciendo significa que el
resultado es el nmero mostrado pero negativo.
En caso de que haya desbordamiento (overflow) el display mostrar la letra E.
Adems los cuatro LED de la derecha (de LD0 a LD3) mostrarn el resultado directo (en complemento a 2).
El resultado se dar por el display de siete segmentos de la derecha. Se usar LD7 para el acarreo de salida y
para el desbordamiento en la resta. El pulsador BTN0 se usar para indicar que se realiza la suma o la
resta. Cuando BTN0 est pulsado se mostrar la suma, cuando no est pulsado se mostrar la resta.
LD6

14.2. Diagrama de bloques


Primero vamos a realizar el bloque sumador/restador y posteriormente estudiaremos cmo implementamos
la parte de la visualizacin por el display. Esto es comn en el diseo de circuitos digitales, cuando un
problema es grande es conveniente dividirlo y abordar cada una de sus partes de manera separada.
Posteriormente se une cada uno de los bloques. Incluso, para diseos muy grandes, cada parte la realizan
personas o grupos diferentes y luego otros se encargan de unirlo todo y de comprobar que funciona bien.
As que lo primero que hacemos es un esquema preliminar que seguramente no sea definitivo y que al ir
realizando cada bloque puede que necesitemos realizar alguna modificacin. El esquema mostrado en la
figura 14.1 puede ser un ejemplo de esto. En l hay un bloque que se encarga de realizar las operaciones de
suma o resta, y otro bloque de mostrar el resultado de la operacin en el display de siete segmentos.
OPA(3:0)

OPB(3:0)

Indica si se
suma o se resta

SUMADOR/RESTADOR

SUMA: RES_SUM='1'
RESTA: RES_SUM='0'

RES_SUM

+ , RESUL(3:0)
acarreo
desbordamiento

LEDS

C
OV

VISUALIZACION

A
F

B
C

Figura 14.1: Esquema inicial del sumador restador con visualizacin


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

63

Departamento de Tecnologa Electrnica

14. Sumador/restador

En los siguientes subapartados iremos refinando el diseo.

14.2.1. Bloque sumador/restador


Conceptualmente, lo que tenemos que hacer es seleccionar la entrada del sustraendo o segundo sumando
(OPB), de modo que cuando tengamos que restar, la entrada B del sumador tenga el complemento a 2 de OPB;
mientras que cuando tengamos que sumar, entre directamente el nmero OPB. Esto se muestra en la figura
14.2, en donde tenemos el mdulo CA2 que transforma la seal OPB en su complemento a dos. Y tenemos un
multiplexor que selecciona la seal B complementada o no, segn si hay que restar o sumar: si RES_SUM=0 se
resta, si RES_SUM=1 es suma.
SUM4BITS
CI

S(3:0)

S(3:0)

OPA(3:0)

A(3:0)

CO

Ca2(B)

CA2
4

OPB(3:0)

B(3:0)

RES_SUM

Figura 14.2: Esquema inicial del mdulo sumador/restador (sin visualizacin)


Se podra realizar el diseo as, sin embargo los diseadores digitales han tendido siempre a minimizar el
nmero de bloques y puertas del diseo. En este caso se puede hacer una versin ms compacta. Esto
ocurra sobre todo hace unos aos, cuando tenan que hacer el diseo en componentes discretos o con
dispositivos programables con poco espacio. Ahora esto no es tan crtico, an as, a continuacin veremos
cmo hacer el circuito ms compacto.
El complemento a dos de un nmero se realiza complementando cada bit y aadindole 1 al resultado. Y
podramos realizarlo como se muestra en la figura 14.3, utilizando el sumador de cuatro bits para aadir 1.
tambin se poda poner el
acarreo de entrada a cero
y poner un uno en A(0)

Acarreo de entrada = '1' :


sumamos 1

SUM4BITS

VCC

CI

El otro sumando
vale '0'

A(3:0)

Ca2(B)
El resultado es el
complemento a 2 de B

S(3:0)

S(3:0)
CO

OPB(3:0)

B(3:0)

complementar
cada bit

Figura 14.3: Circuito que calcula el complemento a 2 de un nmero de cuatro bits


Pero si nos fijamos en las figuras 14.2 y 14.3, vemos que ambas utilizan un sumador de 4 bits, y que, por un
lado la figura 14.2 no utiliza el acarreo de entrada CI (est a tierra), mientras que la figura 14.3 no utiliza la
entrada A. As que podemos utilizar el mismo sumador para las dos operaciones. Cuando queramos hacer la
resta, por la entrada B del sumador entrar el complemento de cada bit de OPB, y pondremos el acarreo de
entrada a 1 (CI='1'). Cuando queramos hacer la suma, por B entrar directamente la seal OPB, y pondremos
el acarreo de entrada a 0 (CI='0'). Entonces el circuito quedara como muestra la figura 14.4.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

64

Departamento de Tecnologa Electrnica


SUMA: RES_SUM='1' CI='0'
RESTA: RES_SUM='0' CI='1'

14. Sumador/restador

SUM4BITS
CI

S(3:0)

OPA(3:0)

A(3:0)
0

4
4

OPB(3:0)

S(3:0)

CO

B(3:0)

RES_SUM

Figura 14.4: Otra versin del circuito sumador/restador (sin visualizacin)


Pero esto todava no es el circuito final, ya que los inversores y el multiplexor an se pueden sustituir por
algo ms pequeo. Con el multiplexor estamos eligiendo la seal OPB complementada o no segn el valor de
RES_SUM. Esto es equivalente a utilizar una XNOR, ya que segn el valor de una entrada deja pasar la otra tal
cual o complementada (ver figura 14.5).
equivalente a XNOR

Sel
0
0
1
1

0
S
1

B
0
1
0
1

S
1
0
0
1

Sel=0 S=B

B
Sel

Sel=1 S=B

Sel

Figura 14.5: Equivalencia entre el circuito con multiplexor y el circuito con puerta XNOR
Quiz te sorprenda que se utilice una XNOR y no una XOR, ya que eso es lo que vimos en teora. Esto se
debe a que la seal de sumar/restar (RES_SUM) est complementada. En este ejercicio se suma cuando
RES_SUM=1, mientras que en la teora se suma cuando vale cero. Es por esto que sale una XNOR, ya que la
XNOR es equivalente a una XOR con una de las entradas negadas. Esta entrada negada es la seal RES_SUM.
En la figura 14.6 se muestra esta equivalencia.
equivalente

B
Sel

B
Sel

equivalente

B
Sel

Figura 14.6: Equivalencia entre puertas XNOR y XOR


As que cambiamos los multiplexores e inversores por las puertas XOR, y nos queda el circuito de la figura
14.7.
SUMA: RES_SUM='1' CI='0'
RESTA: RES_SUM='0' CI='1'

SUM4BITS
CI

RES_SUM
OPA(3:0)

A(3:0)

S(3:0)

S(3:0)
CO

OPB(0)
OPB(1)
4

B(3:0)

OPB(2)
OPB(3)

Figura 14.7: Penltima versin del circuito sumador/restador (sin visualizacin)


Bueno, quizs podamos pensar que la figura 14.7 corresponde el diseo definitivo, pero no es as, ya que
tenemos que ocuparnos del acarreo de salida y el desbordamiento. El acarreo de salida se deja como est,
para as poder conectar varios sumadores/restadores en cascada.
Pero el desbordamiento hay que analizarlo. Como estamos trabajando en complemento a dos, el
desbordamiento funciona de manera diferente. Cundo se desbordaba la suma en complemento a dos?
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

65

Departamento de Tecnologa Electrnica

14. Sumador/restador

cuando los sumandos tienen el mismo signo y el resultado tenga el signo contrario. Si no te acuerdas de esto
repasa los ejercicios propuestos del tema 2. De todos modos en la figura 14.8 se muestra un ejemplo para
refrescarte la memoria.
ste es OPB y por ser suma
coincide con B

suma
0011+0101

3
+5
8

0011
+0101
1000

00110101 0011+Ca2(0101)
Ca2(0101)=1011
ste es B
310
0011
-510
+1011
Es representable
-210
1110

No es representable
en Ca2 de 4 bits
distintos

al estar en Ca2
representa a

ste es OPB

resta

en Ca2 de 4 bits

iguales

-210
signos diferentes: no hay desbordamiento

-8

Cambio de signodesbordamiento

Figura 14.8: Desbordamiento en sumas en complemento a dos


As que lo que tenemos que hacer es comprobar el cambio de signo entre los operandos y el resultado,
siempre que los operandos tengan el mismo signo. Para ello podramos hacer la tabla de verdad y calcular la
funcin lgica del desbordamiento (overflow). Eso ya sabes como se hace (figura 14.9).
A3
0
0
0
0
1
1
1
1

B3
0
0
1
1
0
0
1
1

S3
0
1
0
1
0
1
0
1

OV
0
1
0
0
0
0
1
0

A(3)
B(3)
S(3)

OV

Figura 14.9: Tabla de verdad y circuito que calcula el desbordamiento en complemento a 2


Por ltimo, decir que el desbordamiento todava se puede calcular de manera ms simplificada, haciendo la
XOR del acarreo de salida, con el penltimo acarreo. Esto se muestra en la figura 14.10, en la que se ha
dibujado el sumador/restador con los bloques sumadores de un bit.
B3

B2

A3

A2

CO

CO

DE

CI

C2

B0

B1

A1

CO

CI

C1

A0

CO

CI

C0

CO

CI

S3

S2

S1

S0

RES_SUM

Desbordamiento

Figura 14.10: Otra alternativa para calcular el desbordamiento en complemento a 2

14.2.2. Bloque de visualizacin


El bloque de visualizacin recibe un nmero en complemento a 2 de cuatro bits, una seal de
desbordamiento (OV), y debe mostrar en un display de 7 segmentos el nmero resultante en signo y
magnitud. En caso de que el nmero fuese negativo, mostrar el correspondiente nmero positivo y el signo
menos se indicar encendiendo el punto decimal del display. Cuando haya desbordamiento se mostrar la
letra E.
Lo primero que podemos hacer es analizar el rango de datos que vamos a mostrar. Como son nmeros en
complemento a dos de 4 bits, el menor nmero ser -8 y el mayor 7. As que para estos nmeros nuestro
convertidos de 7 segmentos funciona, adems podemos mostrar la letra E, sin que se preste a confusin, ya
que el nmero 14 en hexadecimal (E: 11102) nunca se mostrar (por ser el rango menor).
Tenemos tres casos:

Siempre que OV='1' entonces mostraremos la letra E

Si OV='0' y S(3)='0', significar que tenemos un nmero positivo, por lo tanto lo mostramos tal cual
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

66

Departamento de Tecnologa Electrnica

14. Sumador/restador

y S(3)='1', significar que tenemos un nmero negativo, y por lo tanto tendremos que calcular su
complemento a 2 y encender el punto decimal.

Si OV='0'

Cuando tenemos condiciones de tipo "Si.... entonces", stas se pueden implementar fcilmente con un
multiplexor. En la figura 14.11 se muestra esta "traduccin".
S(3:0)

Ca2

S(3)
El nmero 14
muestra la E

1
4

1110
1

OV

0
4
A

HEX7SEG
I(3:0)

SEG(6:0)

S(3)

B
C

SEG_DT

Figura 14.11: Diagrama de bloques del mdulo de visualizacin


En esta figura ya tenemos hechos los multiplexores y el convertidor a 7 segmentos (HEX7SEG). Nos faltara por
hacer el mdulo que se encarga de calcular el complemento a dos de la seal S(3:0), ste ya lo vimos en la
figura 14.3.
Antes de comenzar a disear, acurdate que la representacin en complemento a 2 no era simtrica, y por
tanto, haba un nmero negativo ms que positivo. En nuestro ejemplo, para cuatro bits, existe el -8 pero no
el +8. Por tanto, si se calcula el complemento a 2 de -8 (S=1000) resulta el mismo nmero (1000). Qu
sucedera en este caso? Qu pasa si queremos representar el nmero -8? Si pones los valores en el circuito
para este caso (ver figura 14.12), obtenemos el -8 en el display a pesar de que el complemento a dos no se
puede calcular. Pero como la representacin sale bien, lo realizaremos as.
1000

S(3:0)

Ca2

1000

1000
S(3) 1

1110

1000
OV

0
4
A

HEX7SEG

1000

I(3:0)
Se muestra un 8

SEG(6:0)

S(3)

SEG_DT

B
C

encender el punto:
signo

Figura 14.12: Diagrama de bloques y valores para cuando el resultado sea -8


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

67

Departamento de Tecnologa Electrnica

14. Sumador/restador

14.3. Diseo
Creamos un nuevo proyecto llamado
(el sumador)

addsub.

Aadimos una copia de las siguientes fuentes del ejercicio 13

decod4_16.sch
hex7seg.sch
ha.sch
fa.sch
sum4bits.sch

Y del ejercicio del multiplexor (ejercicio 12), aadimos una copia de:
mux2_4bit.sch

Crea un smbolo para el sumador, convertidor de siete segmentos y el multiplexor de dos entradas con 4 bits.
Primero vamos a crear el bloque sumador/restador (recuerda la figura 14.1 y el apartado 14.2.1). Para ello,
vamos a crear un nuevo fichero de tipo esquemtico para crear el bloque sumador/restador, lo llamamos
addsub.sch y en l implementamos el diseo de la figura 14.7 con el aadido de la parte del desbordamiento
(figura 14.9). Aunque el resultado final se muestra en la figura 14.13, intenta no copiarlo, sino hacerlo t solo,
y si acaso comprobarlo luego. Al terminar crea un smbolo.

Figura 14.13: Esquemtico del sumador/restador de 4 bits


Ahora procederemos a crear el bloque de visualizacin (recuerda la figura 14.1 y el apartado 14.2.2). Antes
de hacer la unidad de visualizacin, tenemos que crear el bloque que calcula el complemento a dos de un
nmero de 4 bits (mira este bloque en la figura 14.11). Creamos una nueva fuente llamada ca2.sch, y en ella
creamos el diseo de la figura 14.3. En la figura 14.14 se muestra el esquemtico de este diseo, de l tendrs
que crear un smbolo.

Figura 14.14: Esquemtico del circuito Ca2 que calcula el complemento a 2 de un nmero
Ahora creamos un nuevo fichero para la unidad de visualizacin, lo vamos a llamar visualiza.sch. En l
implementamos el circuito de la figura 14.11, resultando el esquemtico mostrado en la figura 14.15. Al
terminar, comprueba el esquemtico y crea un smbolo de este circuito.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

68

Departamento de Tecnologa Electrnica

14. Sumador/restador

Figura 14.15: Esquemtico del circuito Visualiza, que se encarga de mostrar el resultado por el display de siete
segmentos
Y ya slo falta crear la unidad de ms alto nivel llamada top_addsub.sch, que se encargar de unir los
bloques sumador/restador y visualiza. El diagrama de bloques se mostr en la figura 14.1 y su realizacin en
el ISE se muestra a continuacin (figura 14.16).

Figura 14.16: Esquemtico de la unidad de ms alto nivel del diseo


En la figura 14.16 estn tambin los puertos AN_0, AN_1, AN_2 y
displays que iban a lucir (en este caso slo el de la derecha).

AN_3

que eran con los que se controlaban los

Como siempre, una vez que lo hayas terminado, guardas el diseo, lo compruebas, y asignas los pines.
Luego lo implementas en la FPGA.

14.4. Comprobacin del diseo


Buf, este ha sido un diseo con cierta complejidad, as que enhorabuena si has llegado hasta aqu! De todos
modos, an no est todo hecho. Ahora hay que comprobar que el diseo funciona bien. Esto adems nos
valdr para repasar los nmeros en complemento a 2, y sus sumas y restas.
Podemos seguir este esquema para comprobar primero que el display representa bien los nmeros, y luego
las operaciones.

Ponemos todos los interruptores a 0: debe salir un 0 en el display. Ya que estamos haciendo 0-0=0. Todos los
LED van a estar apagados excepto LD7, que estar luciendo. ste es el acarreo de salida, pero como estamos
restando, no se utiliza. Si pulsamos BTN0, veremos que se apaga, ya que al pulsar estamos sumando 0+0.
Recuerda que los cuatro interruptores de la derecha (seal OPA: de SW0 a SW3) codifican el minuendo si estamos
en la resta (BTN0 sin pulsar), as que mantenemos los cuatro interruptores del sustraendo (OPB: de SW4 a SW7) a
cero, y vamos codificando todos los nmeros de OPA. As que:

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

69

Departamento de Tecnologa Electrnica

14. Sumador/restador

Si SW7=SW6=SW5=SW4=SW3=SW2=SW1='0' y SW0='1'. Estamos codificando OPA="0001" y OPB="0000". As


que estamos haciendo 1-0=1. Por tanto el display mostrar un 1, as como los LEDs. Recuerda que LD7,
cambia segn sea resta o suma. El punto decimal deber estar apagado, ya que en nuestro sistema, el
punto representa el signo negativo.

Si SW7=SW6=SW5=SW4=SW3=SW2=SW0='0' y SW1='1'. Estamos codificando OPA="0010" y OPB="0000". As que


estamos haciendo 2-0=2. Por tanto el display mostrar un 2, as como los LEDs.

Si SW7=SW6=SW5=SW4=SW3=SW2='0' y SW1=SW0='1'. Estamos codificando OPA="0011" y OPB="0000". As que


estamos haciendo 3-0=3. Por tanto el display mostrar un 3, as como los LEDs.

Continuamos probando todas las combinaciones de OPA, hasta que SW7=SW6=SW5=SW4=SW3='0' y


SW2=SW1=SW0='1'. Estamos codificando OPA="0111" y OPB="0000". As que estamos haciendo 7-0=7. Por
tanto el display mostrar un 7, as como los LEDs.

Ahora toca codificar hacer que OPA="1000" y OPB="0000". Como las entradas estn en complemento a
dos. estamos haciendo -8-0=-8. Por tanto el display mostrar un -8, con el punto decimal encendido, ya
que representa el signo negativo.

Continuamos variando SW0, SW1 y SW2, de modo que consigamos todos los nmeros negativos desde
-8 hasta -1. Por ejemplo si OPA="1011" y OPB="0000", estamos haciendo -5-0=-5. Por tanto el display
mostrar un -5, con el punto decimal encendido, ya que representa el signo negativo.

Ahora vamos a mantener OPA="0000" y variaremos OPB.

Si OPA="0000" y OPB="0001", y no pulsamos BTN0 (BTN0='0'), entonces estamos haciendo 0-1=-1. Y por
tanto tendremos un -1 en el display (el signo menos lo indica el punto decimal). Los cuatro LED de la
derecha lucirn, ya que -1 en complemento a dos es "1111".

Si pulsamos
apagarn.

Podemos continuar haciendo esto hasta OPB="0111" entonces estamos haciendo 0-7=-7. Y por tanto
tendremos un -7 en el display (el signo menos lo indica el punto decimal). En los cuatro LED de la
derecha vendr codificado el nmero "1001", ya que -1 en complemento a dos es 1111.

Si pulsamos BTN0 se mostrar un +7, ya que estamos haciendo 0+7=1. En los 4 LED de la derecha se
codificar 7, esto es "0111".

Pero cuando hacemos que OPB="1000" entonces aparece E. Por qu? estamos haciendo 0-(-8)=+8. Y en
complemento a dos con 4 bits, el +8 no se puede representar. Fjate que luce LD6, que representa el
desbordamiento de la resta.

Sin embargo, si pulsamos BTN0, estamos haciendo 0+(-8)=-8, lo que s se puede representar, y debe
salir el 8, con el punto decimal. Fjate tambin que se apaga LD6.

El resto de combinaciones de OPB son representables, por ejemplo, si OPB="1001" entonces estamos
haciendo 0-(-7)=7, que s se puede representar, y debe salir un 7 en el display, sin punto decimal, y en
los LED de la derecha "0111", y LD6 apagado.

Pulsando BTN0 obtenemos -7, ya que hacemos 0+(-7)=-7.

BTN0

se mostrar un +1, ya que estamos haciendo 0+1=1. Los 4 LED de la derecha se

Ahora prueba cualquier otra combinacin de nmeros, entiende qu estas representando y qu operacin
haces, y comprueba que est bien.

Si, has comprobado que sale todo bien, ya sabes hacer una pequea calculadora! aunque sea un poco
rudimentaria y con slo dos operaciones.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

70

Departamento de Tecnologa Electrnica

15. Unidad aritmtico lgica

15. Unidad aritmtico lgica


Una unidad aritmtico lgica (UAL, pero ms conocida como ALU por sus siglas en ingls) es un circuito
que permite realizar operaciones aritmticas y lgicas entre los operandos de las entradas. La ALU suele
constar de unos bloques que realizan las operaciones aritmticas y lgicas, y de un multiplexor que escoge
las salidas de esos bloques segn la operacin seleccionada.
Muchas de las operaciones aritmticas ya las hemos visto: suma, resta, comparacin, ... Y las operaciones
lgicas suelen ser aplicar unas operaciones a nivel de bits, por ejemplo, invertir todos los bits, realizar la
operacin AND entre cada bit de los operandos. A veces tambin se incluyen operaciones de desplazamiento
y rotacin, esto es, los bits de un operando se desplazan o se ruedan. Por ejemplo, si tuviese el operando
OPA="0010" y lo desplazo a la izquierda obtendra "0100".

15.1. Especificaciones
Realizar una unidad aritmtico lgica con dos operandos de 4 bits (OPA y OPB) y 4 operaciones.
Los operandos vendrn dados por los interruptores. El operando OPA se codificar mediante los 4
interruptores de la derecha (de SW0 a SW3), y el operando OPB con los cuatro interruptores de la izquierda (de
SW4 a SW7).
Las operaciones que se realizarn son: suma, multiplicacin por 2, mayor y la operacin lgica
realizar una operacin se deben de pulsar uno de los 4 pulsadores:

AND.

Para

BTN0: realiza la suma S=OPA+OPB


BTN1: multiplica por 2 el operando OPA. S=2xOPA
BTN2: devuelve el nmero mayor entre OPA y OPB
BTN3: aplica la funcin lgica AND entre los bits de OPA y OPB

En caso de que se pulsen dos o ms pulsadores al mismo tiempo, tendr prioridad el pulsador que est ms
a la derecha en la placa. Por ejemplo si se pulsan BTN1 y BTN3 al mismo tiempo, el resultado ser la
multiplicacin por 2 (BTN1) y no la funcin lgica AND.
Para el caso de la operacin suma, multiplicacin y mayor, se considera que los operandos OPA y OPB estn
codificados en binario puro (sin signo). Para la operacin lgica AND, no es necesario considerar ninguna
codificacin.
El resultado de la operacin se mostrar por los cuatro LED de la derecha (de LD0 a LD3), adems se mostrar
por el display de la derecha.
Segn qu operacin se est realizando LD7 mostrar:

En la suma: el acarreo de salida


En la multiplicacin: el desbordamiento
En la operacin "mayor que": se mantendr apagado
En la operacin lgica AND, se mantendr apagado

Cuando no haya ningn botn pulsado, todos los LED permanecern apagados, y tambin el display.

15.2. Diagrama de bloques


Como es un diseo grande, vamos a ir construyndolo poco a poco.
Primero sabemos que tenemos que realizar cuatro operaciones, por lo tanto necesitaremos un circuito para
cada una de las operaciones. Luego veremos cmo implementamos cada una de estas operaciones (algunas
ya las hemos hecho), pero por ahora los consideramos como bloques. A veces a esto se le llaman cajas
negras: sabemos qu entradas y salidas dan, pero no sabemos que hay en su interior. En la figura 15.1 se
muestran estos cuatro bloques que se encargarn de realizar las cuatro operaciones que tenemos que hacer.
En estos bloques vemos que todos menos el multiplicador tienen dos entradas (OPA y OPB). Y que el sumador
y el multiplicador tienen una seal ms de salida, la de acarreo de salida para el sumador y la del
desbordamiento overflow para el multiplicador.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

71

Departamento de Tecnologa Electrnica


OPA(3:0)

OPA(3:0) OPB(3:0)

OPA(3:0)

15. Unidad aritmtico lgica


OPA(3:0) OPB(3:0)

OPB(3:0)

MULT2
4

CO

OV

MAYOR

R_MULT(3:0)

R_SUM(3:0)

AND

R_MAY(3:0)

R_AND(3:0)

Figura 15.1: Los cuatro bloques que harn las operaciones de la ALU
Segn que operacin hayamos escogido, debemos seleccionar el resultado de uno de los bloques que
realizan las operaciones. Por ejemplo, si queremos sumar debemos seleccionar la seal R_SUM (figura 15.1).
Como ya sabes, la seleccin se suele implementar mediante multiplexores, y es lo que hacemos en la figura
15.2. Segn la operacin seleccionada OPER, escogemos el resultado de uno de los bloques. Y quizs te
preguntes quin determina los cdigos de operacin? por qu cuando OPER="11" cogemos la suma y no la
AND? Es una buena pregunta, hemos escogidos stos igual que podamos haber escogido otros ya que el
enunciado no nos lo especificaba. Lo que s es importante es cogerlos seguidos, esto es, ya que hay una
prioridad para las operaciones, conviene que estn ordenadas segn esa prioridad. As que podamos haber
escogido este orden, o el inverso (OPER="00" para la suma, OPER="01" para la multiplicacin, OPER="10" para el
mayor, y OPER"11" para la AND).
OPA(3:0)

OPA(3:0) OPB(3:0)

OPA(3:0)

OPB(3:0)

+
CO

OPA(3:0) OPB(3:0)

MULT2
4

OV

R_SUM

MAYOR

AND

R_MAY

R_MULT

R_AND

OPER(1:0)

11

10

01
4

Cdigos de operacin
00
: AND
01
: MAYOR
10
: MULT
11
: SUMA

00

R_(3:0)

Figura 15.2: Seleccin de la operacin a realizar


En las operaciones lo nico que nos importa es que cuando apretemos un botn se seleccione la operacin
adecuada, pero la persona que use la ALU no va a saber, ni le interesa, cmo est codificada internamente
esa operacin (esto es, cunto vale OPER).
El siguiente paso es establecer la correspondencia entre los botones pulsados y el cdigo de operacin. Fjate,
tenemos cuatro pulsadores y queremos 2 salidas OPER que van a codificar la operacin seleccionada. Cuando
pulsemos BTN0 queremos que OPER sea igual a "11" (suma); cuando pulsemos BTN1 y no est pulsado BTN0
queremos que OPER="10" (multiplicacin). Y as con el resto, entonces qu bloque me implementa esto? pues
un codificador con prioridad (recuerda el captulo 8).
Las entradas y salidas de un codificador con prioridad de 4 a 2 se muestran en la figura 15.3. En esta figura
tambin se muestra la tabla de verdad.
CODIF
BTN3
BTN2
BTN1
BTN0

I0
I1
I2
I3
EI

EO
S0
S1

OPER(0)
OPER(1)

OP_ACT

EI
0
1
1
1
1
1

I3
X
0
0
0
0
1

I2
X
0
0
0
1
X

I1
X
0
0
1
X
X

I0
X
0
1
X
X
X

S1
0
0
0
0
1
1

S0
0
0
0
1
0
1

A EO
0 0
0 1
1 0
1 0
1 0
1 0

Figura 15.3: Entradas y salidas de un codificador con prioridad de 4 a 2, y su tabla de verdad


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

72

Departamento de Tecnologa Electrnica

15. Unidad aritmtico lgica

Tenemos que conectar BTN0 a la entrada de mayor prioridad (I3), y BTN3 a la de menor prioridad (I0). Si te
fijas en la tabla de verdad, cuando I3=1, la salida del codificador vale S="11", por lo tanto, es justo el cdigo
de operacin de la suma (figura 15.2). Por tanto, las salidas del codificador van directamente a la seleccin
del multiplexor (OPER). Si hubisemos tomado el cdigo de la suma como OPER="00", simplemente
tendramos que invertir la salida del codificador. As que, incluyendo el codificador para los pulsadores de
entrada, el circuito queda como muestra la figura 15.4.
OPA(3:0)

OPA(3:0) OPB(3:0)

OPA(3:0)

CODIF
BTN3
BTN2
BTN1
BTN0
'1'

I0
I1
I2
I3

MULT2
4

CO

R_SUM

OV

MAYOR

AND

R_MAY

R_MULT

R_AND

EO
S0
S1

OPER(1:0)

OP_ACT

11

10

01
4

EI

OPB(3:0)

Cdigos de operacin
00
: AND
01
: MAYOR
10
: MULT
11
: SUMA

OPA(3:0) OPB(3:0)

00

R_(3:0)

Figura 15.4: Codificacin de las entradas de seleccin de la operacin


Ya casi est el diagrama de bloques del circuito completo, nos falta la representacin del resultado.
Simplemente aadimos el bloque del convertidos a 7 segmentos (figura 15.5). Cuando no hay ningn
pulsador apretado, se desconecta el display y por eso se conecta la salida A (activo) del codificador, a pin AN_0
que controla el display de la derecha. Recuerda que se conecta invertida debido a que AN_0 es activa a nivel
bajo.
Adems hemos puesto una habilitacin al multiplexor, para que cuando no haya ningn botn pulsado, el
multiplexor no saque ningn resultado.
OPA(3:0)

OPA(3:0) OPB(3:0)

OPA(3:0)

CODIF
BTN3
BTN2
BTN1
BTN0
'1'

I0
I1
I2
I3

EI

MULT2
4

R_SUM

OV

MAYOR

CO

R_AND

OPER(1:0)

SEL
EN

OP_ACT

11

10

01
4

00

R(3:0)
A

AN_0
OV

AND

R_MAY

R_MULT

EO
S0
S1

+
CO

OPA(3:0) OPB(3:0)

OPB(3:0)

Cdigos de operacin
00
: AND
01
: MAYOR
10
: MULT
11
: SUMA

HEX7SEG

I(3:0)

0
LD7

SEG(6:0)

B
C

LEDS

OPER(0)
OPER(1)

Figura 15.5: Diagrama de bloques del circuito


Fjate en la seal LD7 y asegrate que entiendes por qu es as, si no lo entiendes, quizs te ayude la siguiente
figura:

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

73

Departamento de Tecnologa Electrnica

'0'

'0'

Ya que es '0' en los dos casos


Cuando OPER(1)= '0' LD7='0'
'0'

OPER(0)

0
1

LD7

OV

OV

CO

CO

OPER(0)

15. Unidad aritmtico lgica

OV

CO

LD7

OPER(0)
OPER(1)

OPER(0)

OPER(1)

LD7

OPER(1)

Figura 15.6: Simplificacin del multiplexor para LD7

15.3. Diseo
Muchos de los bloques de la figura 15.5 ya los tenemos hechos, lo que nos permitir ahorrar tiempo.
Creamos un nuevo proyecto llamado alu. Aadimos una copia (ProyectAdd Copy of Source) de las
siguientes fuentes del ejercicio 13 (el sumador)
decod4_16.sch
hex7seg.sch
ha.sch
fa.sch
sum4bits.sch

Y del ejercicio del multiplexor (ejercicio 12), aadimos una copia de:
mux2_4bit.sch

Crea un smbolo del conversor a siete segmentos (hex7seg.sch), el sumador de 4 bits (sum4bits.sch) y el
multiplexor (mux2_4bit.sch). Haz tambin que las seales tengan un orden razonable (sobre todo en el
convertidor de 7 segmentos). Para obtener el mismo orden que ya as obtenido en otras prcticas puedes
seguir los siguientes pasos:

Abre el hex7seg.sch
Ejecuta ToolsSymbol Wizard.
Selecciona Using Schematic : hex7seg y ms abajo selecciona Use Reference Symbol, all pincha en Browse y busca
en el directorio del sumador el fichero hex7seg.sym para que coja el mismo smbolo y con el mismo orden.
Repite esto para el sumador y el multiplexor.

Ya tenemos el sumador, el convertidor de siete segmentos y el multiplexor de dos entradas con 4 bits.
Tambin podramos coger el comparador que hemos realizado en la prctica 11, sin embargo para ste
usaremos el smbolo que proporciona el ISE.
A continuacin vamos a ir haciendo cada uno de los bloques que nos faltan de la figura 15.5.

15.3.1. Multiplicador por 2


Tenemos que multiplicar el operando OPA por 2. Si te acuerdas del tema 2, (sistemas de numeracin y
codificacin), la multiplicacin por 2 en binario era similar a la multiplicacin por 10 en decimal.
Simplemente hay que desplazar los nmeros hacia la izquierda. Y en el bit menos significativo se pone un
cero. Si hubiese un uno en el bit ms significativo habra que indicar que ha habido desbordamiento.
Este circuito por lo tanto es muy sencillo, se muestra en la figura 15.7, en donde tambin se han incluido
varios ejemplos para demostrar el funcionamiento.
Multiplicador x2

Ejemplos:

A3 A 2 A1 A0
0

6: 01102

5: 01012

9: 10012

x2

x2

x2

12: 11002

10: 10102

18:100102
overflow
no cabe en 4 bits

OV S3 S2 S1 S0

Figura 15.7: Circuito multiplicador por 2


Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

74

Departamento de Tecnologa Electrnica

15. Unidad aritmtico lgica

Para hacer este circuito creamos una nueva fuente llamada mult2.sch y creamos este sencillo circuito.
Recuerda que en el ISE no es posible conectar seales ni puertos con distinto nombre, as que tendremos que
poner un buffer, como ya hemos hecho alguna vez. Realizamos el circuito con buses, quedando como
muestra la figura 15.8.

Figura 15.8: Esquemtico del multiplicador por 2


Guardamos el circuito, lo comprobamos y creamos un smbolo.

15.3.2. Circuito comparador, "mayor"


Para este circuito crea una nueva fuente llamada mayor.sch.
Este circuito ya lo deberas saber hacer, ya que es casi igual que el dibujado en las figuras 12.4 y 12.6 (del la
prctica del multiplexor). As que no lo vamos a explicar mucho, simplemente representaremos el
esquemtico por si tienes alguna duda. Si no lo tienes muy desordenado, puedes incluso copiar el circuito
del la figura 12.6, y adaptarlo al que tenemos que realizar ahora (esto ya sabes que tiene algn riesgo). El
esquemtico se muestra en la figura 15.9.

Figura 15.9: Esquemtico del bloque comparador (mayor)

15.3.3. Circuito operacin lgica AND


Bueno, con este circuito no deberas de tener ningn problema. Simplemente hay que realizar la operacin
lgica AND, entre los operadores. Se realiza bit a bit, esto es, R(0)=OPA(0) AND OPB(0); R(1)=OPA(1) AND
OPB(1); ...; R(i)=OPA(i) AND OPB(i)

Creamos una nueva fuente llamada and_4bit.sch y realizamos el circuito de la figura 15.10.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

75

Departamento de Tecnologa Electrnica

15. Unidad aritmtico lgica

Figura 15.10: Esquemtico del bloque que realiza la AND lgica


Al terminar, como siempre, guardamos, comprobamos el esquemtico y creamos un smbolo.

15.3.4. Multiplexor de 4 entradas datos con habilitacin


Ahora queremos realizar un multiplexor de cuatro entradas de datos y por tanto, dos de seleccin. Cada
dato tiene cuatro bits. Adems, incluiremos una seal de habilitacin para que no saque ningn dato en el
caso de que no se haya seleccionado ninguna operacin.
Tenemos tres opciones para realizar el multiplexor (bueno, ms, pero aqu propondremos stas):

La primera consistira en realizar el multiplexor completamente con puertas lgicas, tal como se ha explicado
en clase. sta no lo vamos a hacer, aunque deberas saber cmo se hace.
La segunda ltima alternativa propuesta sera hacer el multiplexor con la ayuda del decodificador de 2 a 4.
La ltima opcin sera construir el multiplexor de 4 entradas de datos a partir de tres multiplexores de dos
entradas de datos. Como ste ya lo tenemos, nos sera fcil. Tendramos que aadir la seal de habilitacin

Vamos a realizarlo segn esta ltima forma. La formacin del multiplexor a partir de los multiplexores
pequeos se muestra en la figura 15.11.
R_AND

R_MAY

R_MULT

R_SUM

00
01
10

R_MAY

0
1

R(3:0)

OPER(0)

11
2

OPER(1:0)

R_AND

R_MULT

R_SUM

R(3:0)

0
1

EN

EN
OPER(0)
OPER(1)

Figura 15.11: Construccin de un multiplexor con habilitacin de 4 entradas de datos a partir de multiplexores de dos
entradas de datos
Al final del multiplexor se le ha aadido la habilitacin, una para cada bit. Para poner las seales de
seleccin en los multiplexores pequeos tenemos que analizar qu grupos de seales selecciona cada bit. Por
ejemplo, cuando OPER(1)='0' se selecciona a R_AND o a R_MAY, mientras que cuando OPER(1)='1' se selecciona
a R_MULT o a R_SUM. Quizs te ayude la siguiente figura.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

76

Departamento de Tecnologa Electrnica

15. Unidad aritmtico lgica

Si OPER(1)='0' , entonces OPER(0)


selecciona entre R_AND y R_MAY

R_AND

R_MAY

R_MULT
R_SUM

00
01

10

R_MAY

R(3:0)

habilitacin

OPER(0)

11

OPER(1:0)

R_AND

R_MULT

R_SUM

R(3:0)

0
1

EN

EN
OPER(0)
Si OPER(1)='1' , entonces OPER(0)
selecciona entre R_MULT y R_SUM

OPER(1)

Figura 15.12: Seales de seleccin en los multiplexores pequeos


As que creamos una nueva fuente llamada mux4d_4b_e.sch (indica que tiene 4 datos, de 4 bits y
habilitacin). El esquemtico del circuito se muestra a continuacin (figura 15.13). Llama a los puertos de
entrada con un nombre genrico (D00, D01, D10, D11), para que puedas utilizarlo en otras ocasiones y
entender a qu puerto se corresponden ya que si los llamases R_AND, R_MAY,... si lo utilizas en otro diseo
no sabrs qu entrada de seleccin los activa, ni el significado de esos nombres.

Figura 15.13: Esquemtico del multiplexor de 4 datos con habilitacin


Como siempre, para terminar, guarda el diseo, comprubalo y crea su smbolo poniendo un orden
adecuado a las entradas.

15.3.5. Codificador con prioridad de 4 entradas


El codificador con prioridad ya lo hemos visto en el captulo 8 y su tabla de verdad se mostr en la figura
15.3. Como sabes consta de dos bloques, uno que establece las prioridades de modo que slo una seal
pueda estar activa y otro que codifica.
Puedes, o bien usar el codificador que ya creaste, o crear una nueva fuente llamada codif4a2prior.sch para
crear el codificador de 4 entradas con prioridad y habilitacin. En la figura 15.14 se muestra el codificador,
en donde tambin estn los puertos de salida EN_OUT y A (Activo).

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

77

Departamento de Tecnologa Electrnica

15. Unidad aritmtico lgica

Figura 15.14: Esquemtico del codificador de 4 entradas con prioridad y habilitacin


Guarda el diseo, comprubalo y crea su smbolo poniendo un orden adecuado a las entradas.

15.3.6. Componente de mayor jerarqua


Ya tenemos todos los componentes necesarios para implementar el circuito (figura 15.5). As que vamos a
crear el diseo que los integra.
Creamos un fichero llamado top_alu.sch, y realizamos el diseo de la figura 15.5. La solucin se muestra a
continuacin (figura 15.15). Luego guarda el diseo y comprubalo.

Figura 15.15: Esquemtico final de la ALU

15.4. Implementacin y comprobacin


Ya slo falta crear el fichero UCF con los puertos, implementar el diseo en la FPGA y comprobar que
funciona bien. Este ha sido un diseo bastante completo.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

78

Departamento de Tecnologa Electrnica

16. Elementos de memoria

16. Elementos de memoria


En esta prctica vamos a usar elementos de memoria, en concreto un biestable activado por flanco. As que
adems necesitaremos una seal de reloj para el biestable. Para ello utilizaremos la seal de reloj de la placa
Pegasus. Esta seal va a 50MHz, y entra por el pin 77 de la FPGA. Puedes localizar el reloj de la placa a la
izquierda de los displays de 7 segmentos, y all se indica la frecuencia del reloj y el pin que recibe la seal de
reloj. Este primer ejercicio secuencial va a ser muy sencillo.

16.1. Especificaciones
Disear un circuito que al apretar el pulsador BTN0 encienda LD0 y que cuando se deje de pulsar mantenga
encendido el LED. Para apagar el LED debemos de pulsar BTN1.

16.2. Diseo
Este circuito se podra realizar con un latch S-R, pero como no hay latches de este tipo en la biblioteca de
Xilinx, usaremos un biestable J-K activado por flanco de subida.
Creamos un nuevo proyecto llamado led_on.sch. Y creamos una
fuente con el mismo nombre. En la ventana de smbolos escogemos
la categora Flip_Flop, y escogemos el smbolo fjkc. Que se
corresponde con un biestable J-K, con clear asncrono. La seal
clear (CLR) funciona a nivel alto, es decir con un '1' lgico se pone
el biestable a cero.
El funcionamiento del biestable J-K ya lo conoces: un uno en la
entrada J pone a uno el biestable; un uno en la entrada K lo pone a
cero; si las dos entradas estn a cero se mantiene el valor mientras
que si las dos estn a uno, invierte el valor guardado.
Por tanto, el esquemtico ser como el mostrado en la figura 16.1.
Cuando lo tengas, guarda el diseo para implementarlo.

Figura 16.1: Esquemtico del circuito que


enciende y apaga el LED

16.3. Implementacin
Cuando los circuitos tienen seal de reloj hay que especificar quin es la seal de reloj y su frecuencia. Para
ello ejecutamos el comando "Create Timming Constraints", que se encuentra en la ventana de procesos, en el
apartado "User Constraints". Nos saldr una ventana como la de la figura 16.2.

Figura 16.2: Editor de restricciones del ISE


En dicha ventana seleccionamos la pestaa Global. Y donde pone Clock Net Name, debe salir nuestra seal de
reloj: Clk.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

79

Departamento de Tecnologa Electrnica

16. Elementos de memoria

En ella hay un hueco para poner el periodo. Como nuestro reloj es de 50MHz, su periodo es 1/50MHz = 20
ns. Ya que 1MHz= 106 Hz. Y por otro lado: 1 ns = 10-9 ns. As que en dicho hueco ponemos el nmero 20, y la
herramienta se encarga de poner los nanosegundos y el tiempo que el reloj est a nivel alto (50% por
defecto), lo dejamos como est, guardamos y cerramos el Xilinx Constraints Editor.

Figura 16.3: Especificacin del periodo de reloj en el editor de restricciones del ISE
Ahora tenemos que asignar los pines, con la herramienta PACE no siempre sale bien, as que lo hacemos
editndolo a mano.
Al abrir el fichero UCF vemos que ya tiene algo escrito. Esto lo ha escrito el Xilinx Constraints Editor, ya que
en el fichero UCF tambin se guarda la informacin de la seal de reloj.
Aunque ya sabes cmo se rellena el fichero UCF, ya que hay algunas novedades, a continuacin se muestra
cmo debe quedar.
NET "CLK" TNM_NET = "CLK";
TIMESPEC "TS_CLK" = PERIOD "CLK" 20 ns HIGH 50 %;
NET "LED0" LOC = "P46" ;
NET "BTN0" LOC = "P59" ;
NET "BTN1" LOC = "P58" ;
NET "CLK" LOC = "P77" ;

Cdigo 16.1: Especificacin del periodo de reloj en el editor de restricciones del ISE
Guarda el fichero, e implementa el circuito en la placa. Y comprueba que funciona.
Esto que acabamos de realizar no se puede hacer con un circuito combinacional, necesitaramos mantener el
dedo pulsado para que la luz se mantenga encendida. Con este circuito hemos logrado memorizar cul fue
la ltima tecla pulsada, la de encender o apagar.
Como curiosidad, decir que hemos usado un biestable J-K, y por tanto si pulsamos las teclas de encendido y
apagado se debera de cambiar el estado en que estaba, pero date cuenta que es prcticamente imposible
pulsar ambas teclas a la vez. Y lo que es ms, ten en cuenta que el reloj va a 50MHz (50 millones de ciclos en
un segundo), por tanto, si mantienes pulsadas ambas teclas durante un segundo, lo que suceder es que el
LED se apagar y encender 25 millones de veces. Nuestros ojos (y nuestro cerebro) no son capaces de
percibir este parpadeo y por lo tanto, lo que percibimos es que el LED luce menos (la mitad).

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

80

Departamento de Tecnologa Electrnica

17. Interruptor con pulsador

17. Interruptor con pulsador


En esta prctica queremos hacer una variacin del circuito del captulo anterior. Ahora, en vez de encender
el LED con un pulsador y apagarlo con otro distinto, queremos encenderlo y apagarlo con el mismo
pulsador de modo que si est encendido lo apaguemos, y si est apagado lo encendamos.

17.1. Ideas
Se nos pueden ocurrir varias ideas para implementar el circuito. Antes de seguir leyendo intenta pensar
cmo lo haras t.

17.1.1. Conectando el pulsador a la entrada del biestable T


En principio podemos pensar en el biestable T, ya que cuando T='1'
cambiar el valor del biestable, y por tanto, se apagar o se encender
segn como estuviese anteriormente.

FTC
BTN0

Podemos realizar el circuito mostrado en la figura 17.1. Escogemos el


biestable T con seal de clear asncrono (CLR). Este biestable est en la
categora Flip_Flop y se llama FTC.
Ponemos el clear a cero para que nunca se active (tambin se podra haber
puesto conectado con otro pulsador para activarlo a voluntad).

CLK

LED0

CLR

Figura 17.1: Primera versin del


circuito

La seal de reloj de la placa se conecta a la seal de reloj del biestable y la entrada T del biestable se conecta
al pulsador que queremos que funcione como interruptor.
Prueba a implementar el circuito en la placa. Recuerda del captulo 16 cmo se define el reloj (figura 16.3) y
mira a ver qu sucede....
Si implementas el circuito vers que unas veces funciona y otras veces se queda en el mismo estado, y que
durante el tiempo en que mantienes presionado el pulsador, el LED luce un poco, pero no tan intensamente.
Antes de seguir leyendo, intenta pensar por qu se comporta as.
Lo que ocurre es que somos mucho ms lentos que el reloj de la placa. Este reloj va a 50MHz, por lo tanto, en
un segundo tiene 50 millones de flancos de subida. Y suponiendo que presionamos el pulsador durante un
segundo, el biestable va a oscilar entre '0' y '1' unas 50 millones de veces. En el momento en que soltemos
el pulsador, el valor que se fije depender en qu valor tenga el biestable en ese preciso instante. Instante que
dura menos de una millonsima de segunda (20 ns). Por lo tanto se puede decir que es aleatorio, con la
misma probabilidad de que se quede encendido o apagado.
En la figura 17.2 se muestra un cronograma del funcionamiento del circuito. Se puede observar que cuando
se presiona el pulsador (BTN0='1') , la salida del biestable oscila. Al terminar de pulsar, el biestable
permanecer en el ltimo valor. En el caso del ejemplo de la figura, el LED se ha quedado apagado.
'0' Q guarda valor

'1' cambio en Q
BTN0-T
CLK
50 MHz
LED0-Q

Oscilar hasta que soltemos el pulsador

Valor final depende del


estado al soltar el pulsador

Figura 17.2: Cronograma del circuito de la figura 17.1

17.1.2. Conectando el pulsador al reloj del biestable T


Para evitar que el biestable est cambiando continuamente de valor mientras se mantiene el pulsador
presionado, se podra pensar en utilizar la seal del pulsador como reloj, ya que esta seal slo tiene un
flanco de subida. Y es en los flancos de subida cuando pueden cambiar de valor estos biestables. Antes de
seguir, puntualizaremos que este ejemplo muestra lo QUE NO SE DEBE HACER, ya que para crear
diseos sncronos y seguros, la seal de reloj del circuito es la nica que debe entrar en las entradas de
reloj de los biestables. Slo diseadores experimentados deberan arriesgarse a realizar circuitos asncronos.
En la figura 17.3 se muestra el circuito que se propone. La entrada T del biestable est siempre a '1', por lo
tanto, siempre que se reciba un flanco de subida de BTN0 cambiar el valor del biestable.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

81

Departamento de Tecnologa Electrnica

Vcc
Atencin:
Circuito MAL DISEADO

17. Interruptor con pulsador

FTC
T

No se debe poner en la entrada


de reloj una seal distinta a la
seal de reloj del circuito

BTN0

LED0

CLR

Figura 17.3: Segunda versin del circuito, que no se debe realizar


Si pruebas este circuito en la placa, quizs veas que tiene un comportamiento extrao. De todos modos,
aunque funcionase bien, tenemos que buscar otra solucin que cumpla las normas de diseo sncrono de
manera que slo la seal de reloj se conecte a las entradas de reloj de los biestables.

17.2. Circuito detector de flanco


En este curso no aprendemos a crear circuitos secuenciales con funcionalidad definida, a excepcin de
biestables sencillos, registros y contadores. Sin embargo, s aprendemos a analizarlos e identificar su
funcionalidad.
As que observa el circuito de la figura 17.4 e intenta descubrir su funcionalidad. Fjate que los dos biestables
de la izquierda son del tipo D y el de la derecha es del tipo T. Los biestables tienen dibujado dentro un
smbolo que indica que son activos por flanco de subida.
F
FD
BTN0

FD
D

FTC
T

LED0

CLR
Clk

Figura 17.4: Circuito detector de flanco e interruptor


Suponiendo que en el tiempo inicial los tres biestables estn a cero (Q='0'), obtn el cronograma de las
seales B, C, F y LED0 para las entradas mostradas en la figura 17.5.
clk

Clk
BTN0
B
C
F
LED0

Figura 17.5: Obtn el cronograma de las seales para el circuito de la figura 17.4
Te deber salir que por cada pulso largo de BTN0, el circuito lo transforma en un pulso de nico ciclo de reloj:
la se seal F . Este pulso de F hace que el biestable T cambie slo una vez por cada pulso de BTN0.
Si no sabes cmo obtener el cronograma, puedes simular el circuito, o bien, en el apartado 17.3 se muestra la
solucin. Es muy importante que entiendas cmo se obtiene, ya que en el examen suelen caer problemas de
este tipo, normalmente algo ms complejos.
Implementa el circuito en la placa. Seguramente veas que funciona correctamente. Sin embargo, si ests
usando la placa Basys, puedes apreciar que no funciona del todo bien. Eso es porque al presionar el pulsador
se producen rebotes que forman varios pulsos. La placa Pegasus tiene condensadores en las entradas de los
pulsadores para evitar esos rebotes (recuerda la figura de la derecha de la figura 3.1). La placa Basys no los
tienes, y para evitar esos rebotes tendras que poner un contador que elimine los pulsos que se produzcan
durante un tiempo despus de recibir un pulso, que puede ser de unos 200 ms.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

82

Departamento de Tecnologa Electrnica

17. Interruptor con pulsador

17.3. Solucin al cronograma


A continuacin se muestra la solucin al cronograma de la figura 17.4. Fjate que la seal B es la misma que
la seal BTN0 pero retrasada al siguiente flanco de reloj. La seal C es igual que B pero retrasada exactamente
un ciclo de reloj. Y que la seal F slo ser igual a 1 cuando B='1' y C='0', esto slo ocurrir despus del
flanco de reloj de subida de BTN0.
clk

Clk
BTN0
B
C
F
LED0

Figura 17.6: Solucin al cronograma de las seales para el circuito de la figura 17.4

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

83

Departamento de Tecnologa Electrnica

18. Parpadeo de un LED

18. Parpadeo de un LED


Ahora vamos a hacer que un LED parpadee (se encienda y se apague intermitentemente) l solo. As de
simple.

18.1. Especificaciones
Hacer que LD0 parpadee a una frecuencia de dos segundos. Esto es, permanecer encendido durante un
segundo y apagado durante el segundo siguiente, y as sucesivamente. La frecuencia del reloj de la placa es
de 50MHz.

18.2. Diseo
Lo que tenemos que hacer es un divisor de frecuencia y esto se hace con contadores. El reloj de la placa
Pegasus va a 50MHz. Como 1MHz = 106 Hz entonces el reloj tiene 50 millones de ciclos en un segundo.
Nosotros queremos obtener una seal que vaya a 1 Hz, esto es, que tenga un periodo de un segundo. Esta
seal ser la que har cambiar cada segundo el valor del LED, por lo que el LED tendr una frecuencia de 0,5
Hz (2 segundos de periodo).
El esquema de lo que queremos hacer se muestra en la figura 18.1: tenemos una seal de reloj que realiza 50
millones de ciclos por segundo. Por tanto, nosotros dividiremos la frecuencia contando hasta 50 millones, ya
que entonces habr pasado un segundo. Al final de la cuenta, el circuito pondr durante un slo ciclo de
reloj su salida a uno, y el resto del tiempo a cero. Pasado otro segundo (despus de volver a contar otros 50
millones), volver a poner la salida a uno. Esta salida, ir a un biestable T que cambiar de estado cada
segundo (cada vez que se termina la cuenta) y por tanto apagar o encender el LED cada segundo, que es
nuestro objetivo. Evidentemente, la seales de entrada y salida no estn a escala.
(no est a escala)
T=1 s

T=20 ns

T=20 ns

DivFrec
Clk

Clk1Hz

Clear

50 Mz

Biestable T

1 Hz

Q
Clk

LED
Cada segundo le
llega un '1' y
entonces cambiar
de estado (se
encender y apagar)

Figura 18.1: Esquema del circuito

en
tra

da =

20

ns

Contar 50 millones puede parecernos demasiado, pero lo podemos hacer poco a poco. Primero vamos a
contar 5, para dejar los 20 ns del reloj en un nmero redondo. Ya que si contamos 5 ciclos de 20ns,
obtendremos una seal con periodo de 100ns.

conta5
'1'
CLK

CE

CONT5

T100NS

4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0

50 MHz

Clk
T100NS

CLEAR
50MHz

CLK

10 MHz
10MHz

Tsalida=100ns
5x20ns

Figura 18.2: Bloque que cuenta hasta 5, con sus entradas y salidas
Creamos un nuevo proyecto llamado segundero en C:\practicas\edi\tunombre. Recuerda: sin espacios, ees,
tildes, ..... Dentro del proyecto creamos una nueva fuente para realizar este contador llamada conta5.sch.
Dentro de la ventana de smbolos, vamos a la categora de contadores (counter) y all escogemos el contador
cb4cle. Esto es un Contador Binario de 4 bits, con Clear asncrono, carga paralelo de dato (Load) y
habilitacin (Enable). Fjate que se han marcado en maysculas y negrita las letras que hacen formar el
nombre del contador.
Cmo hacer para contar 5 ciclos de reloj. La figura 18.3 muestra el esquemtico. En l, las salidas Q0 a Q3
llevan la cuenta. Cada vez que hay un flanco de subida del reloj CLK, el contador incrementa su cuenta, ya
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

84

Departamento de Tecnologa Electrnica

18. Parpadeo de un LED

que el count enable (CE) est siempre a uno. Por otro lado hay una seal de carga de dato (L: Load), esta seal
se pone a uno cuando la salida Q2 est a uno. Esto ocurre cuando se llega a 4, pues en el resto de los casos (de
0 a 3) la salida Q2 permanece a cero. La secuencia de la cuenta se muestra en la figura 18.5.

Figura 18.3: Esquemtico del contador de cinco


ciclos de reloj

Figura 18.4: Otra versin del esquemtico del contador de


cinco ciclos de reloj (ms genrica)

Como se ve en la figura 18.2, al llegar a 4


debemos de inicializar el contador. La puesta a
cero la haremos siempre sncrona. Y por tanto,
activaremos la seal de carga L para introducir
un cero (inicializar sncronamente) en el
contador. Aunque existe un CLEAR asncrono que
inicializa el contador, por ser asncrono, nosotros
no lo usaremos para contar (s lo podramos
utilizar para inicializar el circuito, al arrancar la
primera vez, por ejemplo, pero no para contar).

Q3 Q2
0 0
0 0
0 0
0 0
0 1
0 0
0 0
0 0
0 0
0 1
0 0
0 0
.....

Q1
0
0
1
1
0
0
0
1
1
0
0
0

Q0 Cuenta
0
0
1
1
0
2
1
3
0
4
Iniciar la cuenta
0
0
cuando Q2=1 entonces
1
1
hacemos CONT5=1
0
2
1
3
0
4
Iniciar la cuenta
0
0
1
1

Figura 18.5: Secuencia del contador


En la figura 18.4 se muestra un contador de 5 ms genrico que el de la figura 18.3, ya que la entrada CE no
est fija a uno. Por lo tanto, permite conectar el contador a otra cuenta anterior. El fin de cuenta: CONT5, ser
cuando Q2='1' y CE='1', como en nuestro caso CE es siempre uno, los circuitos son equivalentes.
Al terminar este diseo, gurdalo y crea un smbolo. Es bastante recomendable que lo simules para que
veas el funcionamiento del contador.
Ahora, a la salida de conta5 tenemos una seal de 10MHz (100ns). Utilizaremos esta seal, y contaremos 10
ciclos de esta seal. A la salida de nuestro nuevo contador tendremos una seal de 1MHz (1000ns=1s).
El esquema que queremos realizar se muestra a continuacin.

f=50MHz
T=20ns

conta5
1
Clk

Aqu contamos
ciclos de T100NS
no de reloj, y por eso
es la entrada de CE

f=10MHz
T=100ns

CE
Clk

f=1MHz
T=1s=1000ns

conta10
T100NS

T100NS

CLEAR

Divisor de frecuencia x5

CE
Clk

T1US

T1US

Hemos conseguido
divididir la frecuencia
por 50=5x10

CLEAR

Divisor de frecuencia x10

Figura 18.6: Dos contadores en cascada para dividir la frecuencia por 10


Ahora la situacin es distinta, ya que antes tenamos la entrada CE permanentemente a uno, ahora esta
entrada estar un ciclo de reloj a uno, y cuatro ciclos de reloj a cero (ver figura 18.2). La inicializacin del
contador se realiza cuando la cuenta sea 9 y adems la entrada CE sea uno. Si no se esperase a que CE=1,
entonces la cuenta de 9 durara tan slo un ciclo de reloj. En la figura 18.7 se muestra este cronograma.
Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

85

Departamento de Tecnologa Electrnica

18. Parpadeo de un LED

4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0
CLK
50 MHz
T100NS
10 MHz

T1US
1 MHz

Se inicializa cuando la
cuenta sea 9 y CE=1

Figura 18.7: Cronograma del contador de 10


As pues, creamos una nueva fuente llamada conta10.sch y la hacemos parecida a la anterior, con la
diferencia que la entrada CE no la ponemos a uno, ya que ir conectada a la salida del contador de 5.
Adems, ahora el fin de cuenta se determinar al llegar a 9 y no a 4, e incluye la seal CE para que espere a la
siguiente orden de cuenta para cambiar de valor.

Figura 18.8: Esquemtico del contador de 10


Al terminar, guardamos el diseo, lo comprobamos y creamos su smbolo. Igualmente sera conveniente
simularlo.
Si conectamos estos dos bloques como se muestra en la figura 18.6 tendremos la seal T1US cuya frecuencia
es de 1MHz. Todava tenemos que dividir la frecuencia entre un milln (106), para lograr la frecuencia de 1
Hz (1 ciclo por segundo).
Aunque hay maneras ms eficientes para realizarlo, ahora simplemente conectaremos en cascada 6 divisores
de frecuencia como el de la figura 18.8. Y en el ltimo conectamos un biestable T para que encienda y apague
el LED. Por ejemplo, podamos haber creado un divisor por 1000 y haber conectado dos de ellos, en vez de
usar estos seis.
Creamos una nueva fuente que ser la que contenga los contadores que acabamos de crear, la llamaremos
blink.sch (blink significa parpadeo en ingls) El diseo se muestra en la figura 18.9.

Figura 18.9: Esquemtico del diseo del parpadeo de un LED


Ahora, implementa el circuito y comprueba con un reloj que ms o menos funciona bien. Ten en cuenta que
durante un segundo el LED deber estar luciendo y en el siguiente segundo estar apagado.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

86

Departamento de Tecnologa Electrnica

19. Reloj digital

19. Reloj digital


Ahora vamos a hacer un pequeo reloj digital. Lo haremos con segundos y minutos, ya que si lo hacemos
con minutos y horas no nos va a dar tiempo para comprobarlo en clase.
Esta prctica constar de dos partes, primero haremos un segundero de 0 a 9, con el que usaremos solamente
un display de 7 segmentos. Y luego haremos el reloj completo.

19.1. Especificaciones

La primera parte consistir en hacer un segundero digital que vaya de 0 a 9 y se muestre por el primer display
de 7 segmentos. El punto decimal parpadear cada segundo. Esto es, que en un segundo se apague y se
encienda. Por tanto, tendr un periodo de un segundo.
La segunda parte ser hacer un reloj, los dos displays de la derecha se mostrarn los 60 segundos de un
minuto: ir por tanto de 0 a 59. Los dos displays de la derecha mostrarn los 60 minutos de una hora. Por
tanto, tambin ir de 0 a 59. Adems, el punto decimal del medio parpadear cada segundo. Esto es, que en
un segundo se apague y se encienda. Por tanto, tendr un periodo de un segundo.

19.2. Contador de 10 segundos


Para hacer este circuito partiremos de lo que tenemos anteriormente. Para ello, creamos un nuevo proyecto
llamado displ_segund.
Importamos ficheros de tipo .sch de la prctica anterior conta5.sch, conta10.sch y de la prctica del
sumador (o cualquier otra que lo use) coge las fuentes decod4_16.sch y hex7seg.sch. Ya sabes cmo se hacer,
recuerda usar la instruccin ProjectAdd Copy of Source para que se copie en tu proyecto y no modifique lo
que has hecho antes.
El diagrama bloques inicial (que puede sufrir modificaciones) se muestra en la figura 19.1. En ste,
realizaremos un primer bloque segundero que nos dar dos seales de frecuencias 1 segundo y medio
segundo (esta ltima, para el parpadeo del punto del display). Luego, un bloque que contar diez cuentas de
la seal del segundero. Este bloque en realidad lo haremos en el propio bloque de mayor jerarqua.
Vcc

contador10

segundero
CE
Clk
CLEAR

Q0
Q1
Q2
Q3

T500MS
T1S

CE

HEX7SEG
I0
I1
I2
I3

SEG(6:0)

B
C

Clk
CLEAR

Figura 19.1: Diagrama de bloques inicial

19.2.1. Bloque segundero


Para hacer este bloque usaremos parte de lo que hicimos en la prctica anterior. Copia el fichero blink.sch
del anterior proyecto y cpialo en el directorio de tu nuevo proyecto, y cmbialo de nombre: segundero.sch.
Y adelo al proyecto: ProjectAdd Source (no hace falta que sea copia porque ya lo hemos copiado
nosotros).
Abre el esquemtico segundero.sch y vamos a modificarlo. Lo que vamos a hacer es un bloque que nos
devuelva una seal de periodo un segundo y otro de medio segundo. Cmo lo haras? intenta hacerlo t, o
al menos pensarlo un poco.
Realmente, lo que queremos hacer es un divisor de frecuencia con dos salidas, una que divide 50 millones de
veces y otra 25. Con esta informacin deberas poder hacerlo t slo.
Para hacerlo, podramos quitar el ltimo contador de diez, y poner un contador de cinco y otro de dos.
Dando la cuenta final lo mismo (5x2=10), pero a la salida del contador de 5 tendramos cuentas de medio
segundo (periodo T=500ms=0,5s). La figura 19.2 muestra cmo se hara este circuito.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

87

Departamento de Tecnologa Electrnica

Divisor de frecuencia x5
f=10Hz
T=100ms
T100MS
Clk

CE

Divisor de frecuencia x2
f=2Hz
T=500ms

conta5
T500MS

Clk
CLEAR

Entrada de 100 ms

19. Reloj digital

T500MS

f=1Hz
T=1000ms=1s

conta2
CE
Clk

T1S

T1S

CLEAR
T500MS
Salida de medio segundo

T1S
Salida de un segundo

Figura 19.2: Esquema para obtener una seal de medio segundo y de un segundo.
Otra alternativa es hacerlo con un nico contador de 10, pero detectando cundo llega a cinco. La cuenta de
medio segundo se activar cuando el contador valga 4 (de 0 a 5) o cuando el contador valga 9. En ambos
casos hay que incluir la condicin que la CE='1' (en este caso la seal CE es la seal T100ms. La figura 19.3
muestra esta otra alternativa.

Figura 19.3: Alternativa al circuito que obtiene una seal de un segundo y otra de medio segundo
Esta alternativa tiene varios puntos interesantes: por un lado utilizamos slo un contador. Pero lo ms
importante que hay que tener en cuenta es lo relativo a la seal que detecta el 4 en binario. En este caso hay
que detectar los unos y los ceros porque como la cuenta no termina en cuatro, los nmeros 5, 6 y 7 tambin
tienen que Q2='1'.
Otro aspecto interesante es que la seal de periodo medio segundo (T500MS) se forma con la OR de las seales
que identifican la cuenta de 4 y 9. Por ltimo, no olvides incluir la seal CE en las detecciones, porque si no, la
seal no durara un slo pulso de reloj, sino todo el tiempo que el contador estuviese a 4 o a 9. La figura 19.4
puede ayudarte a entender esto.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

88

Departamento de Tecnologa Electrnica

Detectar 4 (no es fin de cuenta)


Hay que detectar los '1' y los '0':

Cuenta
0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
0:
1:
..

19. Reloj digital

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
0000
0001
....

No es el nico
que tiene Q2='1'
Q2='1'
El nico que tiene
Q3='1' y Q0='1'

Esta seal tiene periodo


de un segundo tambin,
por lo que hay que hacer
la OR con la de la
cuenta de 9

Q0
Q1
Q2
Q3
CE

T500MS
Detectar 9 (fin de cuenta)
basta con detectar los '1':

No olvidar el CE
(en este caso es T100MS)

Q0
Q3

Esta seal tiene


periodo de
medio segundo.

T1S

CE

Figura 19.4: Deteccin del 4 en una cuenta de 0 a 9, y generacin de la seal de periodo de 500ms
Independientemente de qu alternativa hayas
escogido para hacer el circuito, crea un smbolo del
circuito que debe tener las entradas y salidas
mostradas en la figura 19.5. Para que lo podamos
usar en los siguientes esquemticos.

segundero
CE

T500MS

Clk
CLEAR

T1S

las entradas asncronas


se suelen dibujar debajo

Figura 19.5: Bloque del segundero

19.2.2. Bloque de mayor jerarqua


Este bloque contendr los bloques de la figura 19.1. Creamos una nueva fuente llamada displ_segund.sch.
En realidad este bloque lo deberas saber hacer slo. As que simplemente en la figura 19.6 se muestra una
posible solucin. Asegrate que si copias la solucin, la entiendes (si no, no vale de nada).

Figura 19.6: Esquemtico del circuito que muestra las unidades de segundo

19.3. Reloj digital con segundos y minutos


Este diseo es algo ms complejo, no por contar los segundos y minutos, que si has entendido el ejercicio
anterior no te ser difcil, sino por el manejo de los cuatro displays de siete segmentos.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

89

Departamento de Tecnologa Electrnica

19. Reloj digital

Quizs te hayas fijado que slo hay una letra de cada segmento para los cuatro displays, es decir, slo hay
una A, B, C,..., G para los cuatro. Y luego hay una seal de control AN para cada segmento. As que, cmo
podramos mostrar nmeros diferentes en cada display?
Lo que se hace es multiplexar en el tiempo. Esto es, se divide el tiempo en cuatro partes, y se asigna cada
parte a un display. As, en un ciclo va a estar encendido el primer display con un nmero determinado, y en el
siguiente ciclo, el siguiente display con otro nmero. Y as los cuatro, al final, cada display lucir slo un
cuarto de tiempo (as que lucirn con menos intensidad), pero lo har tan rpido que nuestro ojo no notar
que gran parte del tiempo no est luciendo.
Lo que queremos generar se muestra en la figura 19.7.
T=1 ms
T1ms
Minutos

CUENTA4MS

Segundos

decenas unidades decenas unidades

AN_0
AN_1

DM

UM

DS

US

AN_3

AN_2

AN_1

AN_2
AN_0

AN_3
NumDispl

US

DS

UM

DM

US

DS

UM

DM

Segn el valor de CUENTA4MS


se selecciona las unidades o
decenas de minutos o segundos

4 x 1 ms

Figura 19.7: Cronograma para mostrar los minutos y segundos por los displays.
Quiz te preguntes para qu tanto rollo y por qu no se saca por la FPGA cada uno de los 7 segmentos de los
cuatro displays. Esto se hace as para ahorrar pines de la FPGA. Haz cuentas: 7 segmentos ms el punto
decimal por 4 displays son 32 pines. Estos son muchos pines, nuestra FPGA tiene 208 pines, pero no todos son
utilizables como entradas/salidas. Por lo que estaramos desperdiciando un alto porcentaje de los pines
disponibles para algo que en realidad no es necesario. Con esta alternativa se usan 8 pines (ms las 4 seales
de encendido: AN_0,..., pero stas se tienen que aadir tambin a los 32 pines de antes).
Y ahora, se te ocurre cmo hacer el circuito que implementa el reloj? cmo generar las seales AN_0,...,AN_3
y NumDispl de la figura 19.7?
Intenta pensarlo antes de mirar la solucin ya que todos los conceptos necesarios para implementarlos se
han visto ya.

19.3.1. Implementacin
Varias cosas fundamentales tenemos que hacer en este diseo:

Tenemos que ampliar el bloque segundero (recuerda las


figuras 19.2 y 19.3) de modo que saque una salida adicional
de periodo 1 ms. Para esto simplemente tienes que sacar la
seal de periodo 1 ms como salida. Esto es, hacer un bloque
como muestra la figura 19.8
Luego, utilizaremos la seal de 1 ms (T1MS) para contar cuatro
cuentas de 1 ms. Obteniendo la seal CUENTA4MS (figura 19.7), que
ir de 0 a 3, esto es, de 00 a 11.

segundero
T1MS
CE
Clk
CLEAR

T500MS
T1S

Figura 19.8: Nueva versin del segundero

Posteriormente ampliar el reloj que hemos hecho en el apartado 19.2. Lo ampliamos para que cuente
decenas de segundo (DS), unidades de minuto (US) y decenas de minuto (DM).

Luego queremos segn en qu cuenta estemos de la seal CUENTA1MS se seleccione las unidades o decenas
de minutos o segundos. Por ejemplo, si CUENTA1MS=00 entonces queremos que por el display entren las
unidades de segundo (US), y as para el resto segn se muestra en la figura 19.7. Ya hemos visto cmo se
realiza esto: para seleccionar se utilizan los multiplexores (recuerda el captulo 12). En este caso es de 4

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

90

Departamento de Tecnologa Electrnica

19. Reloj digital

alternativas, por tanto dos bits para la seal de seleccin (CUENTA4MS), y con 4 bits cada alternativa. La figura
19.9 muestra cmo se podra realizar esta parte.
US

00

DS

01

UM

DM

10
11

HEX7SEG
I0
I1
I2
I3

SEG(6:0)

B
C

NumDispl(3:0)

CUENTA4MS(1:0)

Figura 19.9: Seleccin de las unidades o decenas de minuto o segundo segn el valor de CUENTA4MS
En el captulo no vimos cmo hacer un multiplexor de 4 entradas de datos (y dos bits de seleccin) a partir de
multiplexores de dos entradas de dato (1 bit de seleccin). Esto se ha explicado en clase y la figura 19.10 te lo
recuerda. Aunque las seales de dato (A, B, C y D) slo tienen bit y no 4, la extensin es similar (recuerda la
figura 12.2).
MUX4
A

00

01

10

1
0

1
D

11

SEL1
SEL0

SEL0

SEL1

Figura 19.10: Multiplexor de 4 entradas de dato a partir de multiplexores de dos entradas de dato

Por ltimo, para generar las seales de encendido de los displays nos podemos fijar que slo uno est
activo en cada momento (aunque a nivel bajo). Cuando CUENTA4MS=00 se activa AN_0, cuando CUENTA4MS=01
se activa AN_1, y as sucesivamente. Esto ya hemos visto que se realiza con un decodificador. Estamos
decodificando el valor de la cuenta con las seales de encendido de los displays.

Ya estando tan avanzados en el curso, intenta hacerlo por ti mismo. Si lo logras, comprueba con un reloj que
tengas si es un buen reloj, es decir, si se retrasa o adelanta. Si funciona bien significa que ya sabes bastante
electrnica digital, sabes realizar un reloj digital. Si no te sale y ests perdido, a continuacin se muestra un
solucin.

19.3.2. Solucin
Como el diseo es bastante grande, se dar la solucin por partes.
Primero, en la figura 19.11 se muestra cmo hacer la decodificacin del control de los displays. El contador de
4 milisegundos obtiene un nmero de 0 a 3 que se decodifica y activa las seales AN_0, AN_1, AN_2 AN_3.
Fjate que hay que invertirlas por ser a nivel bajo.
La seal del punto decimal, que va a separar segundos de minutos. Se genera igual que en el contador de 10
segundos (captulo 19.2), sin embargo la salida queremos que est activa solamente cuando est activo AN_2.
Ya que es ese punto decimal el que queremos que luzca, por eso ponemos la puerta NAND. Fjate que se
pone antes de invertirla. Por ltimo, ponemos una puerta NAND, porque SEG_DT es activo a nivel bajo.

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

91

Departamento de Tecnologa Electrnica

19. Reloj digital

Figura 19.11: Decodificacin del control de los displays


En la figura 19.12 se muestra la cuenta de segundos y minutos. Esta cuenta la deberas de saber hacer t slo.
Es muy importante ya que es algo bsico que adems suele caer en los exmenes.

Figura 19.12: Contador de segundos y minutos


Por ltimo, en la figura 19.13 se muestra el multiplexor que selecciona qu dgito se va a mostrar segn qu
segmento est activado. Fjate que el multiplexor no lo hemos hecho. En el captulo 12 hicimos un
multiplexor de dos datos y un bit de seal de seleccin. Ahora son 4 entradas de datos (figura 19.9).

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

92

Departamento de Tecnologa Electrnica

19. Reloj digital

Figura 19.13: Multiplexor para la seleccin del dgito a mostrar por los displays

Diseo digital con esquemticos y FPGA. v1.8 - 04/06/2008

93

También podría gustarte