MIRTA VARGAS DE ARGENTINA MEDIA 9 CALZADA Cat B 2° grupo 1ª Actividad
pract_xilinx92
-
Upload
controlcucuta -
Category
Documents
-
view
116 -
download
0
Transcript of pract_xilinx92
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 1/94
Departamento de Tecnología Electrónica
Diseño digital con esquemáticos y FPGA. v1.8
Felipe Machado Sánchez
Norberto Malpica González de Vega
Susana Borromeo López
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 2/94
Departamento de Tecnología Electrónica
Diseño digital con esquemáticos y FPGA. v1.8 - - 04/06/2008 1
Índice
Índice .................................................................................................................................................................................. 1 1. Introducción..................................................................................................................................................................... 3 2. Encender un LED............................................................................................................................................................ 4
2.1. Diseño del circuito ............................................................................................................................................................................5
2.2. Síntesis e implementación del circuito............................................................................................................................................10 2.3. Programación de la FPGA..............................................................................................................................................................11 3. Puertas lógicas, interruptores y pulsadores .................................................................................................................. 15
3.1. Diseño del circuito ..........................................................................................................................................................................15 3.2. Simulación del circuito ....................................................................................................................................................................17 3.3. Síntesis e implementación del circuito............................................................................................................................................20
4. Decodificador de 2 a 4 .................................................................................................................................................. 21 4.1. Diseño del decodificador ................................................................................................................................................................21 4.2. Comprobación del diseño ...............................................................................................................................................................23 4.3. Implementación del diseño.............................................................................................................................................................24 4.4. Creación de un bloque....................................................................................................................................................................24
5. Decodificador de 3 a 8 .................................................................................................................................................. 27 5.1. Diseño del decodificador con bloques ............................................................................................................................................28
6. Decodificador de 4 a 16 ................................................................................................................................................ 30 6.1. Diseño del decodificador con bloques prediseñados .....................................................................................................................31 6.2. Comprobación del diseño ...............................................................................................................................................................33
7. Convertidor de hexadecimal a 7 segmentos ....................................................... .......................................................... 35 7.1. Diseño del convertidor de hexadecimal a 7 segmentos ................................................................................................................ 35 7.2. Implementación ..............................................................................................................................................................................39
8. Codificadores ....................................................... ........................................................................... .............................. 42 8.1. Codificador de 4 a 2 sin prioridad ................................................................................................................................................... 42 8.2. Codificador de 4 a 2 con prioridad, línea activa y habilitación........................................................................................................42 8.3. Codificador de 4 a 2 con conversión a 7 segmentos......................................................................................................................44
9. Extensión 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. Inclusión 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. Diseño 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. Diseño........................................................................................................................................................................................... 57
13. El sumador ........................................................... ......................................................................... .............................. 60 13.1. Especificaciones ...........................................................................................................................................................................60 13.2. Diseño........................................................................................................................................................................................... 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 visualización....................................................................................................................................................... 66 14.3. Diseño........................................................................................................................................................................................... 68
14.4. Comprobación del diseño.............................................................................................................................................................69 15. Unidad aritmético lógica.............................................................................................................................................. 71
15.1. Especificaciones ...........................................................................................................................................................................71 15.2. Diagrama de bloques....................................................................................................................................................................71 15.3. Diseño........................................................................................................................................................................................... 74
15.3.1. Multiplicador por 2 ...............................................................................................................................................................74 15.3.2. Circuito comparador, "mayor" ............................................................................................................................................. 75 15.3.3. Circuito operación lógica AND ............................................................................................................................................75 15.3.4. Multiplexor de 4 entradas datos con habilitación ................................................................................................................76 15.3.5. Codificador con prioridad de 4 entradas ............................................................................................................................. 77 15.3.6. Componente de mayor jerarquía.........................................................................................................................................78
15.4. Implementación y comprobación .................................................................................................................................................. 78 16. Elementos de memoria ............................................................................................................................................... 79
16.1. Especificaciones ...........................................................................................................................................................................79
16.2. Diseño........................................................................................................................................................................................... 79 16.3. Implementación ............................................................................................................................................................................79
17. Interruptor con pulsador .................................................... ...................................................................... .................... 81 17.1. Ideas .............................................................................................................................................................................................81
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 3/94
Departamento de Tecnología Electrónica Índice
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 2
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. Solución al cronograma................................................................................................................................................................83
18. Parpadeo de un LED................................................................................................................................................... 84 18.1. Especificaciones ...........................................................................................................................................................................84 18.2. Diseño........................................................................................................................................................................................... 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 jerarquía .................................................................................................................................................. 89
19.3. Reloj digital con segundos y minutos ...........................................................................................................................................89 19.3.1. Implementación ...................................................................................................................................................................90 19.3.2. Solución...............................................................................................................................................................................91
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 4/94
Departamento de Tecnología Electrónica 1. Introducción
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 3
1. IntroducciónEl objetivo de esta prácticas guiadas es introducir al alumno en el diseño con esquemáticos mediante el usode herramientas CAD (computer aided design). Estas prácticas parten de un nivel elemental y se pretende quepuedan ser seguidas como complemento en un curso básico de electrónica digital. Estas prácticas se handesarrollado en el departamento de Tecnología Electrónica1 de la Universidad Rey Juan Carlos.
Estas prácticas consistirán en un grupo de ejercicios con los que aprenderemos a programar una FPGAutilizando la herramienta gratuita de diseño electrónico digital ISE-WebPACK de Xilinx2. En las prácticas deeste curso realizaremos diseños con esquemáticos: puertas lógicas, bloques combinacionales y secuenciales.Una vez que hayamos realizado el diseño en la herramienta, lo sintetizaremos y lo implementaremos en laFPGA. La síntesis es la tarea que transforma un diseño desde un nivel de descripción a otro nivel dedescripción más bajo. En nuestro caso, el diseño lo tendremos en esquemáticos y la herramienta lotransformará en una descripción que indica las conexiones internas y configuración de la FPGA para quefuncione de la misma manera a como funcionaría nuestro diseño original en esquemáticos. Por suerte, lasíntesis la realiza la herramienta automáticamente, durante la síntesis nosotros nos ocuparemos desupervisar el proceso, analizando los errores y advertencias (warnings) que aparezcan.
Antes de implementar el diseño en la FPGA es recomendable simular el diseño para comprobar quefunciona correctamente. Es más fácil detectar errores de diseño mediante simulación, que en la placa.
Imagina que has implementado el diseño en la FPGA y que ésta no hace nada. Para descubrir el fallotendrías que usar un polímetro o un osciloscopio y comprobar los niveles de tensión de los pines. Ademáscon el inconveniente de que sólo tienes accesibles los puertos de entrada y salida, y no las señales internasdel diseño. Mediante la simulación puedes comprobar todas las señales (internas y externas) y directamentede un vistazo, sin recurrir a medidas eléctricas.
Una vez que tenemos el diseño verificado por simulación, lo implementaremos en la FPGA. La herramientade diseño creará un fichero de configuración (con extensión .bit). Este fichero contiene la información de laimplementación de nuestro diseño en la FPGA. Para programar la FPGA, en nuestro caso, utilizaremos uncable JTAG, que es un cable que cumple un protocolo de depuración y programación: Boundary Scan.. Estecable se conecta al puerto paralelo de nuestro ordenador.
Una vez programada la FPGA, nuestro diseño estará implementado en la FPGA y por lo tanto estará
funcionando. Dependiendo del diseño implementado, interactuará con el exterior de distinta manera ypodremos comprobar su correcto funcionamiento.
Para las prácticas utilizaremos la placa Pegasus de Digilent3, que contiene una FPGA de Xilinx de modeloSpartan-II XC2S200 con encapsulado PQ208. Esta FPGA tiene 200000 puertas lógicas equivalentes y 140 pinesdisponibles para el usuario. Con esta capacidad podemos hacer diseños digitales bastante grandes.
La placa Pegasus contiene distintos periféricos que nos facilitarán la tarea del diseño, como por ejemplo: 8LED, 4 displays de 7 segmentos, 4 botones, 8 interruptores, un puerto PS/2 (para ratón o teclado), y puertoVGA (para conectar un monitor), y varios puertos de expansión. En la figura 1.1 se muestra la placa Pegasus,y en la que se señalan varios de sus componentes. La foto de la placa no coincide exactamente con la versiónde la placa que tenemos en el laboratorio y hay algunos componentes que no están en el mismo lugar,aunque sí todos los que se han señalado.
1 http://gtebim.es2 Herramienta gratuita que se puede descargar en http://www.xilinx.com3 http://www.digilentinc.com
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 5/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 4
FPGA Memoria
Flash
Display
7 segmentosLED
Pulsadores Interruptores
Conector JTAG
Jumpers de
configuración
Alimentación
VGA
PS/2
Conector
de expansión
FPGA Memoria
Flash
Display
7 segmentosLED
Pulsadores Interruptores
Conector JTAG
Jumpers de
configuración
Alimentación
VGA
PS/2
Conector
de expansión
Figura 1.1: Placa Pegasus de Digilent
A medida que vayamos avanzando con la práctica iremos aprendiendo la funcionalidad de la placa. Aún asíse puede consultar en la página web de la asignatura (http://gtebim.es/docencia/EDI) el manual de laplaca (en inglés), y una versión resumida de dicho manual en español.
Bueno, es hora ya de empezar con las practicas ...
2. Encender un LEDCuando nos enfrentamos por primera vez a diseñar mediante una metodología y herramientas nuevas, lomás aconsejable es empezar con ejemplos lo más sencillos posibles. Y a partir de éstos se irá aumentando lacomplejidad del diseño. Son muchas cosas las que pueden fallar, tanto en el uso de las herramientas de
diseño como en la placa de la FPGA. Por consiguiente, si de primeras probamos con un diseño complejo, encaso de que no funcione correctamente no sabremos si es el diseño que está mal o es algún paso que nohemos realizado bien.
De manera similar, los informáticos realizan un programa llamado "Hello world" (hola mundo), que es unprograma muy sencillo que simplemente saca por pantalla dicho texto. Nosotros, como no tenemos pantalla,encenderemos un LED. También podríamos usar el display de 7 segmentos, pero su uso es algo máscomplicado 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 vanconectados a distintos pines de la FPGA, de los 140 pines que hay disponibles. La conexión de los LED semuestra en la figura 2.1. En ella se indican qué pines de la FPGA están conectados a los LED. Por ejemplo elLED número 0, está conectado al pin 46. Para facilitar esta identificación, la placa lleva impresos laidentificación del LED y el pin asociado de la FPGA. Así, podemos ver cómo al lado del LED 0 (LD0) de laplaca está el número 46 entre paréntesis. Podemos apreciar que esto se cumple para casi todos loscomponentes: pulsadores, interruptores, ...
390Ω
PIN LED
46 LD0
45 LD1
44 LD2
43 LD3
42 LD4
41 LD5
37 LD6
36 LD7
'1'→ Encendido
'0'→ Apagado
Spartan-II
390Ω
PIN LED
46 LD0
45 LD1
44 LD2
43 LD3
42 LD4
41 LD5
37 LD6
36 LD7
'1'→ Encendido
'0'→ Apagado
Spartan-II
Figura 2.1: Conexión de los LED de la placa Pegasus
Viendo el esquema eléctrico de la figura 2.1 podemos deducir que si ponemos un '1' lógico en el pin 46 de laFPGA encenderemos el LED, ya que con un '1' lógico la FPGA pondrá 3,3 voltios en ese pin (que es el nivel
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 6/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 5
de tensión de ese pin de la FPGA). Por el contrario, si ponemos un '0' lógico en el pin 45, mantendremosapagado 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 después deprogramar la FPGA el LED 0 se enciende y el LED 1 se apaga habremos cumplido el objetivo. Con el resto depines que van a los otros LED no haremos nada, en teoría, haciéndolo así no deberían lucir, ya que pordefecto 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. Diseño del circuitoEl diseño del circuito lo haremos con la herramienta ISE-Foundation o con ISE-WebPack de Xilinx, esta últimaes la versión gratuita que se puede descargar en la página web de Xilinx. Esta práctica está referida a laversión 9.2, debido a que existen nuevas versiones, puedes descargar esta versión en:http://www.xilinx.com/ise/logic_design_prod/classics.htm
Para arrancar el programa pincharemos en el icono de Xilinx o bien, desde:
Inicio→ Todos los programas→ Xilinx ISE 9.2i → Project 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 , conlo que se cierra dicha ventana.
Normalmente la herramienta abre el último proyecto que se ha realizado. Así que lo cerramos pinchando en:File→ Close Project .
Para empezar a crear nuestro nuevo proyecto, pinchamos en File→ New Project... y nos saldrá la ventana NewProject Wizard – Create New Project como la mostrada en la figura 2.2. En ella pondremos el nombre delproyecto, 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 undispositivo de memoria USB, ni tampoco incluir en la ruta o el nombre ni acentos ni eñes, ni caracteresextraños, lo más conveniente es limitarse a caracteres alfanuméricos, y usar el guión bajo en vez del espacio.Para el último recuadro de la ventana, donde pone Top-Level Source Type seleccionaremos Schematic , ya que
nuestro diseño lo haremos mediante esquemáticos.
Figura 2.2: Ventana para la creación de nuevo proyecto
Una vez que hemos rellenado los tres recuadros pinchamos en Next . Ahora nos aparece la ventana deselección del dispositivo (figura 2.4). En Product Category ponemos All . En la familia ponemos Spartan2 , quees, como ya hemos dicho, la FPGA que tenemos en la placa de Pegasus. Los siguientes datos los podemosobtener a partir de la observación 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 enotras es XC2S50. Lo mismo sucede con la velocidad, en algunas es 5 y otras 6.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 7/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 6
XC2S200
PQ208
5C
tipo de dispositivo
encapsulado
velocidad
rango de operación
C: comercial
código de lote
código de fecha
XC2S200
PQ208
5C
tipo de dispositivo
encapsulado
velocidad
rango de operación
C: comercial
código de lote
código de fecha
Figura 2.3: Interpretación del texto del encapsulado de la FPGA
Para la selección de la herramienta de síntesis no tenemos alternativa, y para el simulador en esta práctica noes importante y lo dejamos en ISE Simulator (VHDL/Verilog). En el lenguaje de descripción de hardwarepreferido (Preferred Language) se deja el VHDL. Al terminar pinchamos en Next.
Mirar en la FPGA
Mirar en la FPGA
Mirar en la FPGA
Mirar en la FPGA
Figura 2.4: Ventana para la selección 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 diseño. Para ello creamos una nuevafuente pinchando en Project → New Source.
Esto hará saltar a una nueva ventana que nos pedirá que seleccionemos el tipo de fuente que queremos crear.Como estamos trabajando en esquemáticos, seleccionamos Schematic , y nombramos al fichero led0 . Este pasose muestra en la figura 2.5. Posteriormente pinchamos en Next y en la siguiente ventana en Finish.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 8/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 7
Figura 2.5: Selección del tipo de nueva fuente
Si al terminar el proceso la herramienta nos muestra la siguiente imagen, debemos seleccionar el fichero quehemos creado (led0.sch) como se muestra en la figura 2.6. También se puede pinchando en Window → led0.sch
Seleccionar led0.sch
Seleccionar led0.sch
Figura 2.6: Selección de la ventana del fichero led0.sch
Ahora veremos el plano donde podremos dibujar el esquemático. En la figura 2.7 se muestra la apariencia dela herramienta. En ella se han movido las subventanas para tener una disposición más cómoda. Muévelas demanera que queden de una forma similar a la figura 2.7. Esta operación no siempre es fácil de realizar y aveces las subventanas se resisten a ser movidas. Otra opción es pinchar en Window → Tile Vertically . Luego, para
dejarlo como muestra la figura 2.7, habría que maximizar la subventana del plano donde se dibuja elcircuito, y seleccionar la pestaña de opciones y la pestaña de símbolos.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 9/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 8
Plano donde dibujaremos el circuito
SímbolosFuentes
Opciones
Procesos
Plano donde dibujaremos el circuito
Plano donde dibujaremos el circuito
Símbolos
SímbolosFuentes
FuentesOpciones
Opciones
Procesos
Procesos
Figura 2.7: Apariencia de la herramienta para empezar a realizar el esquema del circuito
En la figura 2.7 se han señalado algunas pestañas que utilizaremos durante el proceso de diseño y a las quese hará referencia durante el ejercicio. Así que familiarízate con sus nombres y vuelve a esta figura si durantela práctica no sabes a qué pestaña nos estamos refiriendo. Si quieres, pincha en ellas para ver el aspecto quetienen.
La ventana de opciones permite cambiar el comportamiento de la herramienta al dibujar el esquemático. Laventana de símbolos nos permite dibujar las puertas lógicas y los distintos componentes de nuestro diseño.En la ventana de fuentes se muestran los ficheros de nuestro diseño (en este caso sólo hay uno: led0.sch). Ypor último, en la ventana de procesos se indica a la herramienta los comandos que se quieren ejecutar.
Para empezar a diseñar volvemos a la ventana de símbolos. En ella, seleccionamos la categoría General ytomamos el símbolo vcc . Una vez que los hemos seleccionado podemos apreciar que el puntero del ratóncambia de forma cuando lo situamos en el plano del circuito. Si pinchamos en cualquier parte del plano sesituará el símbolo correspondiente a Vcc, que es la fuente de alimentación, y por tanto, en electrónica digitales un '1' lógico (ver la figura 2.8). A veces la herramienta tarda un poco en situarlo, así que no desesperes yno pinches varias veces con el ratón, pues colocarías varias Vcc por tu circuito.
Cuando hayas colocado tu fuente de alimentación, seguramente la veas un poco pequeña. Para ampliar lazona puedes pinchar en View → Zoom→ Zoom In (o bien pulsar F8 ).
Siempre que se haya seleccionado un símbolo, al pinchar con el ratón en el mapa del circuito se añade dichosímbolo. Esto puede resultar incómodo ya que podemos estar añadiendo componentes sin querer. Paraquitar esta opción y tener en cursor del ratón en modo de selección (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 símbolo más de una vez, para borrarlo vamos al modo selección (tecla Esc ) ypinchamos encima del símbolo que queramos eliminar. Éste cambiará a color rojo, y entonces o bien loborramos con la tecla Supr , o bien pinchamos con el botón derecho del ratón y del menú seleccionamosDelete. Como podrás apreciar viendo dicho menú, también puedes copiar y cortar de la misma manera quese hace en Windows.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 10/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 9
Figura 2.8: Creación de un nivel lógico alto: '1'
Ahora conectaremos dicho '1' lógico a un puerto de salida, para ello pincha en Add → I/O Marker , o bien pincha
en el icono de la barra de herramientas. Verás que la ventana de opciones cambia, en ella puedesdeterminar el tipo de puerto y cambiar la orientación del símbolo dibujado. Esto lo puedes cambiarposteriormente seleccionando el símbolo y pinchando con el botón derecho del ratón. Ahora, con el ratón tepones encima del final del cable del símbolo de la fuente (VCC) y encima de él pinchas con el ratón. Apareceráel símbolo del puerto, con un nombre similar a XLXN_1. Seguramente esté vertical, para ponerlo horizontal,selecciónalo (habiendo pulsado antes la tecla Esc ) y pulsa CTRL+R para rotarlo y CTRL+M para voltearlo,también lo puedes hacer pinchando con el botón derecho del ratón.
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 botón derecho del ratón,seleccionamos la opción Rename Port . En el cuadro de diálogo escribiremos LD0, que hace referencia al LED 0de la placa.
Hasta ahora, el aspecto de nuestro circuito debería ser el siguiente:
Figura 2.9: El 1-lógico conectado al puerto LD0
Ahora realizaremos el mismo proceso para conectar el puerto LD1 a un 0-lógico. Para ello, primero situamos
el símbolo de tierra en el mapa del circuito. En la ventana superior de símbolos mantenemos la selecciónGeneral y en la ventana inferior seleccionamos gnd (del inglés ground : tierra). Situamos la tierra en el mapadel circuito y posteriormente, de la misma manera que hicimos anteriormente, la conectamos a otro puertode salida. Este puerto de salida lo llamaremos LD1, haciendo referencia al LED número 1 de la placa.
Figura 2.10: Esquema final de nuestro circuito
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 11/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 10
Ya tenemos nuestro primer diseño hecho. Le damos a guardar (es algo que deberías hacer de vez en cuando),y procederemos a implementarlo en la FPGA. Fíjate que cuando no has guardado, el nombre del circuito queestá en la pestaña del esquemático tiene un asterisco.
2.2. Síntesis e implementación del circuitoAhora 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 noestuviese seleccionado.
Aunque a los puertos de salida les hayamos dado unos nombres referidos a los LED que vamos a utilizar, laherramienta no sabe qué pines queremos utilizar. Para indicarle a la FPGA qué pines vamos a utilizar y conqué puertos de nuestro diseño los vamos a conectar deberemos lanzar la herramienta PACE. Esto lo hacemosdesde la ventana de procesos, en ella despliega la sección 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 esteproceso se requiere añadir al proyecto un fichero del tipo UCF. Este tipo de ficheros son los que se usan paradefinir las conexiones de los pines de la FPGA con los puertos de nuestro diseño, y por tanto pinchamos enYes.
Figura 2.11: Selección para la asignación de pines
Ahora nos aparecerá la herramienta Xilinx PACE . En ella podemos distinguir tres subventanas, la de laderecha, tiene 2 pestañas en su parte inferior, en una se muestra la arquitectura de la FPGA y en la otra laasignación 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 dirección 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 porqueaquí 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 queindicar los pines y no los bancos. Así que pinchamos en dichas celdas y ponemos nosotros mismos el pin quequeremos conectar. Así, para el puerto LD0 conectamos el pin 46, para ello escribimos P46 (el mismo númeroque indica la placa añadiéndole una P). Para el puerto LD1 le asignamos el pin P45.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 12/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 11
Figura 2.12: Herramienta PACE para la asignación de pines
Le damos a guardar y nos saldrá una ventana que nos pregunta por el formato del fichero que guardará estainformación. Aunque nos es indiferente, seleccionamos la primera opción "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 deellos 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 muchasveces no son importantes). En realidad, si se ejecuta el último paso sin haber ejecutado los anteriores, laherramienta realiza todo el proceso.
Cuando tengamos todos los pasos correctamente ejecutados, la subventana de procesos debería mostrar elaspecto de la figura 2.13. Si es así, ya estamos en disposición de programar la FPGA. Puede ser que aparezcaalgún warning y que el proceso de síntesis tenga un símbolo amarillo triangular. Los warnings se pueden veren 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 diseñocorrectamente. En la ventana de la derecha, en el proceso de síntesis ha habido advertencias (warnings) que no
siempre son importantes, y por eso tiene un símbolo triangular de color amarillo
2.3. Programación de la FPGASi hemos llegado hasta aquí, ya habremos generado el fichero de programación de la FPGA (que tieneextensión .bit). Ahora veremos los pasos que hay que dar para programarla.
Lo primero que tenemos que hacer es quitar los tres jumpers de configuración: M0, M1 y M2 del conector J4,(ver situación en la figura 1.1). Para no perder las caperuzas conéctalos a un sólo conector dejando el otro alaire como se muestra a la derecha de la figura 2.14.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 13/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 12
Representación:
jumper
desconectado
jumper
conectado
jumper desconectado
sin perder su caperuza
su caperuzaestá perdida y
pisoteada por elsuelo del labo
Representación:
jumper
desconectado
jumper
conectado
jumper
conectado
jumper desconectado
sin perder su caperuza
su caperuzaestá perdida y
pisoteada por elsuelo del labo
Figura 2.14: Jumpers y su conexión
Cuando estos jumpers están conectados, la FPGA se programa desde la memoria flash de la placa, en la que seguarda un fichero de configuración para la FPGA. La Spartan-II es un tipo de FPGA volátil, esto es, requiereestar alimentada para mantener su configuración. Por tanto, cuando la apagamos se borra lo que hayamosprogramado. Para evitar tener que programar la FPGA desde el ordenador cada vez que encendamosnuestro sistema electrónico, se pone una memoria flash que la programa automáticamente. Si esto no fueseposible, este tipo de FPGA perdería casi toda su utilidad, ya que no serían autónomas y prácticamente sólovaldrían 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 cableal conector JTAG de la placa (conector J2, ver figura 1.1). No debes conectarlo de cualquier manera, de lasdos posibilidades que hay, hazlo de forma que los nombres de las señales de la placa coincidan con losnombres de las señales 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 continuación conectamos el cable de alimentación de la placa y lo enchufamos a la red eléctrica (y cuandolo desenchufes fíjate en que no se quede enchufado el adaptador de la clavija plana americana a clavijaredonda europea). Al enchufar la placa verás que se enciende el LED LD8.
Ya tenemos todo preparado para programar la FPGA y probar nuestro diseño. Volvemos al ordenador, alprograma ISE. Dentro de "Generate Programming File" desplegamos el menú pinchando el cuadradito con elsigno + 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 opción 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 pormedio del protocolo Boundary-Scan (JTAG). Después de esto la herramienta procede a identificar a la placa ydebería encontrar dos componentes: la FPGA y la memoria flash. La FPGA la identifica como xc2s200 y lamemoria como xcf02s. A continuación nos pedirá los ficheros de programación para cada uno de loscomponentes (figura 2.15).
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 14/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 13
Figura 2.15: iMPACT: componentes detectados y asignación de un fichero de configuración
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 además la extensión del fichero es .bit (para las memorias es otro). Seleccionamos elfichero y pinchamos en Open. Inmediatamente nos saldrá una advertencia (Warning) que habla sobre elStartup Clock, esto no nos afecta y pulsamos en Ok .
Ahora nos pide el fichero de configuración 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, losseleccionamos y se pondrán de color verde. Si pinchamos en la FPGA (xc2s200 ó xc2s50) con el botónderecho del ratón, nos saldrá un menú. Puede pasar que al pinchar no salga y que aparezca de nuevo laventana de la figura 2.15, eso es que se ha quedado el puntero del ratón enganchado; para evitarlo, pinchacon el botón izquierdo en cualquier parte de la ventana fuera de los símbolos de los chips y vuelve aintentarlo. Ahora, en el menú que aparece podemos asignar un fichero de configuración diferente oprogramar la FPGA (figura 2.16). Y esto es lo que vamos hacer, pinchamos en Program, y le damos a Ok a lasiguiente ventana sin cambiar nada (si diésemos a Verify daría un error de programación).
Figura 2.16: Orden para programar la FPGA
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 15/94
Departamento de Tecnología Electrónica 2. Encender un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 14
Después de la orden de programar la FPGA, aparece un cuadro que muestra la evolución y, si todo ha salidobien, la herramienta nos avisará de que hemos tenido éxito en la programación mostrando un aviso como elde la figura
Figura 2.17: Programación realizada con éxito
Ahora miramos la placa y debería 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 diseño de la FPGA
El LED LD1 deberá estar apagado, pues lo hemos puesto a un '0' lógico. Y el resto de LED también estaránapagados 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 diseños más complejos.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 16/94
Departamento de Tecnología Electrónica 3. Puertas lógicas, interruptores y
pulsadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 15
3. Puertas lógicas, interruptores y pulsadoresEn este ejercicio vamos diseñar un circuito sencillo con el que podamos interactuar. Para ello usaremos comoentradas del circuito los interruptores y pulsadores de la placa. Además incluiremos alguna lógica interna.
A partir de ahora no se va a realizar una explicación tan detallada como la del primer ejercicio, si durante laejecución de este ejercicio has olvidado algún paso, repasa lo explicado en el ejercicio anterior.
Analizando las conexiones de los interruptores (figura 3.1) vemos que cuando el interruptor está hacia arribatransmite un 1-lógico a la entrada de la FPGA. En la placa, a la derecha del interruptor SW0 se indica quehacia arriba son 3,3V y hacia abajo son 0V.
4,7kΩ
PIN interruptor
89 SW0
88 SW187 SW2
86 SW384 SW4
83 SW5
82 SW681 SW7
Spartan-II3,3V
4,7kΩ
PIN pulsador
59 BTN058 BTN1
57 BTN2154 BTN3
Spartan-II3,3V
4,7kΩ 0,1μF
4,7kΩ
PIN interruptor
89 SW0
88 SW187 SW2
86 SW384 SW4
83 SW5
82 SW681 SW7
Spartan-II3,3V
4,7kΩ
PIN pulsador
59 BTN058 BTN1
57 BTN2154 BTN3
Spartan-II3,3V
4,7kΩ 0,1μF
Figura 3.1: Esquema eléctrico de las conexiones de los interruptores y pulsadores en la placa Pegasus
Para los pulsadores, cuando están pulsados transmiten un 1-lógico a la entrada y cuando no están pulsadosponen 0 voltios a la entrada. Observa que los pulsadores tienen un pequeño circuito con resistencias y uncondensador, esto es para eliminar los rebotes que se producen al pulsar y así enviar una señal sin ruido.
3.1. Diseño del circuitoCreamos un nuevo proyecto (File→ New Proyect...) llamado swt0 con las mismas características que el anterior.Creamos una nueva fuente de tipo esquemático llamada swt0.sch. Y tendremos una pantalla similar a la dela figura 2.7.
Como vamos a realizar el circuito con puertas lógicas, en la subventana de categorías (Categories) dentro de la
ventana de símbolos, seleccionamos el elemento Logic . Veremos como en la subventana de símbolos (Symbols)aparecen nombres relativos a puertas lógicas (and12, and16, and2, or2, ...) el número indica el número deentradas de la puerta y si hay alguna b indica que tiene una entrada negada. La figura 3.2 muestra ejemplosde esta nomenclatura.
and2b1
AND de 2 entradas con
una de ellas negada
and3b2
AND de 3 entradas con
dos de ellas negadas
and2
AND de 2 entradas
and2b1
AND de 2 entradas con
una de ellas negada
and2b1
AND de 2 entradas con
una de ellas negada
and3b2
AND de 3 entradas con
dos de ellas negadas
and3b2
AND de 3 entradas con
dos de ellas negadas
and2
AND de 2 entradas
and2
AND de 2 entradas
Figura 3.2: Ejemplos de la nomenclatura de las puerta lógicas
Lo primero que haremos es añadir una puerta AND (and2
) en el mapa y conectamos sus entradas y salidascon puertos ( Add → I/O Marker ). Los puertos de entrada los llamaremos SW0 y SW1, que se corresponderán conlos interruptores 0 y 1. Y el puerto de salida lo renombraremos como LD0, que será el LED número cero.Quedando como muestra la figura 3.3.
Figura 3.3: Implementación de la puerta AND
De manera similar conectaremos los interruptores SW2 y SW3 con la entrada de una puerta OR, y su salida laconectaremos a LD1, obteniendo algo similar a la figura 3.4.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 17/94
Departamento de Tecnología Electrónica 3. Puertas lógicas, interruptores y
pulsadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 16
Figura 3.4: Implementación de la puerta OR
Ahora conectaremos un inversor al pulsador BTN0 y su salida la conectaremos a LD2:
Figura 3.5: Implementación de un inversor
Además queremos conectar la entrada del pulsador BTN0 a LD3. Como no podemos conectar directamente elpuerto de entrada BTN0 al puerto de salida LD3, los conectamos mediante un buffer . Para ello, en lasubventana de categorías (Categories) seleccionamos Buffer . Para el símbolo seleccionamos buf y lo situamosencima del inversor (fíjate que el símbolo 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
implementan pinchando en Add → Wire, o bien con el icono , o bien tecleando CTRL+W . Una vez que hemosseleccionado este comando, veremos que en la ventana de opciones aparecen las opciones para situar loscables. En ella seleccionamos la primera opción: 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 entradadel inversor; sin soltar el botón del ratón, nos dirigimos a la entrada del buffer . Puede pasar que laherramienta 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 sólo se puede conectar un cable a un pin. Pero lo que sí se puede hacer esconectarlo al cable que une el pin con la entrada del inversor. Puede ser que tengas poco espacio entre el piny la entrada del inversor. Para alargar ese cable, puedes seleccionar y arrastrar el pin de entrada a laizquierda. Ahora será más fácil conectar la entrada del buffer con el cable.
Figura 3.7: Conexión final del buffer e inversor
Nuestro diseño final tiene 3 entradas (SW0, SW1 y BRN0) y 4 salidas (LD0, LD1, LD2 y LD3). Y deberá tener el
siguiente aspecto:
Figura 3.8: Diseño final del ejercicio
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 18/94
Departamento de Tecnología Electrónica 3. Puertas lógicas, interruptores y
pulsadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 17
Para comprobar que hemos hecho la conexión bien podemos pinchar en Tools→ Check Schematic, y revisamos
la ventana inferior ( Console) para ver si ha detectado algún error o advertencia.
Grabamos el esquemático: File→ Save (esto deberías hacerlo regularmente).
Debido a que es un diseño pequeño podríamos probar el circuito directamente en la placa, sin embargovamos a simularlo antes para aprender el proceso.
3.2. Simulación del circuitoUna vez que hemos terminado el esquemático 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" (verfigura 3.9). El menú desplegable permite seleccionar el tipo de ficheros fuente con los que se quiere trabajar:para simulación o para síntesis. Es importante conocer esta opción, debido a que nos puede ocurrir que noveamos un fichero que hemos creado a causa de tener seleccionada una opción que no lo muestra. Porejemplo, los ficheros para simulación no se verán en caso de tener seleccionada la opción de síntesis.
Selección de fuentes para:
- Síntesis/Implementación- Simulación comportamental
- Simulación post-rutado
Selección de fuentes para:
- Síntesis/Implementación- Simulación comportamental
- Simulación post-rutado
Figura 3.9: Selección de los ficheros fuente según 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 selección, la ventana de procesos
cambia. Por lo tanto, si encualquier momento ves que la ventana de procesos no está como piensas que debería estar, comprueba quehas seleccionado el menú de fuentes adecuado. Por ejemplo, puede pasar que quieras sintetizar el diseño yno aparezca el comando, entonces mira qué opción tienes seleccionada.
Ahora crearemos un nuevo fichero para simular nuestro diseño. Mediante un cronograma, este ficheroindicará al simulador qué valores toman las entradas en función 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 similara la que ya vimos en la figura 2.5.
Figura 3.10: Creación de una fuente para la simulación
Tal como se muestra en la figura 3.10, seleccionamos el tipo de fichero como Test Bench Waveform. Lonombramos tb_swt0 y pinchamos en Next . Test Bench significa "banco de pruebas", y eso es lo que queremoshacer, un banco de pruebas que demuestre que el diseño funciona como queremos. Waveform significa
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 19/94
Departamento de Tecnología Electrónica 3. Puertas lógicas, interruptores y
pulsadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 18
"forma de onda", así que nuestro banco de pruebas lo definiremos con las formas de onda de los puertos deentrada (ahora veremos cómo y por qué).
La siguiente ventana nos pide que seleccionemos el diseño que vamos a probar con el banco de pruebas. Ennuestro 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 información (figura 3.11). Como nuestro circuito no tiene reloj nielementos de memoria (ya los estudiaremos en el tema 7) es un circuito combinacional, y por tanto, en elapartado de Clock Information, seleccionamos Combinatorial (or internal clock). Además, deseleccionamos lacasilla GSR (FPGA) y el resto de opciones las dejamos como están y pinchamos en Finish.
Figura 3.11: Opciones de la temporización de la simulación
Y así llegamos a una ventana como la de la figura 3.12 en la que en la vertical se muestran los puertos deentrada y salida, y en la horizontal un eje de tiempos. En medio de estos dos ejes tendremos los valores delas señales según el tiempo en que estemos.
Puertos de entrada
Puertos de entradaEje temporal
Eje temporal
Valores de las señales en el tiempo
Valores de las señales en el tiempoPuertos de salida
Puertos de salida
Puertos de entrada
Puertos de entradaEje temporal
Eje temporal
Valores de las señales en el tiempo
Valores de las señales en el tiempoPuertos de salida
Puertos de salida
Figura 3.12: Ventana de los cronogramas de las señales de simulación
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 20/94
Departamento de Tecnología Electrónica 3. Puertas lógicas, interruptores y
pulsadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 19
Ahora nosotros tenemos que asignar los valores de los puertos de entrada, para que a partir de ellos elsimulador 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 distintoscasos.
Antes de asignar los valores, vamos a agrupar las señales entre sí, para comprobar de manera más fácil losresultados de la simulación. 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 arrastrándolo hasta dondequeramos. 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 anchode estos cuadrados se define en la ventana de la figura 3.11, nosotros los dejaremos con su valor por defecto.
Como tenemos un diseño pequeño, los valores de las entradas que vamos a asignar cubrirán todas lasposibilidades para cada puerta. Así, haremos que las entradas SW0 y SW1, de la puerta AND, tomen todos losvalores de la tabla de verdad. En la figura 3.13 se muestran los valores que se quieren asignar a los puertosde entrada y los intervalos de tiempo en que se asignarán. También se muestra los valores que deben salir(los valores de los LED) y que más adelante comprobaremos si coinciden con los de la simulación.
tiempo SW0 SW1 LD0
0-100ns 0 0 0100-200 0 1 0
200-300 1 0 0
300-400 1 1 1
LD0: AND
tiempo SW2 SW3 LD1
0-100ns 0 0 0100-200 0 1 1
200-300 1 0 1
300-400 1 1 1
LD1: OR
tiempo BTN0 LD2 LD3
0-200ns 0 1 0200-400 1 0 1
LD2: NOT
tiempo SW0 SW1 LD0
0-100ns 0 0 0100-200 0 1 0
200-300 1 0 0
300-400 1 1 1
LD0: AND
tiempo SW2 SW3 LD1
0-100ns 0 0 0100-200 0 1 1
200-300 1 0 1
300-400 1 1 1
LD1: OR
tiempo BTN0 LD2 LD3
0-200ns 0 1 0200-400 1 0 1
LD2: NOT
Figura 3.13: Asignación 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 cómo aparece en la ventana de fuentes:tb_swt0.tbw, y cómo dentro de él está nuestro diseño4: UUT – swt0(swt0.sch).
Figura 3.14: Valores en los puertos de entrada para la simulación
Para simularlo, en la ventana de fuentes (Sources) el fichero tb_swt0.tbw debe estar seleccionado, y en laventana de Procesos, dentro de Xilinx ISE Simulator , pincharemos dos veces en Simulate Behavioral Model . Estodará la orden para llevar a cabo la simulación, y finalmente obtendremos los resultados de la simulación enel cronograma (figura 3.15). Las señales se pueden haber descolocado y las volvemos a colocar en el mismoorden. Ahora debemos comprobar que los valores a las salidas se corresponden con los valores queesperamos (los de la figura 3.13).
Para comprobar el buen funcionamiento de LD0 vemos que está a '1' sólo cuando SW0 y SW1 están a '1'. Esto esasí 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 habíamos esperado en la figura 3.13.
4 UUT indica el componente que se está comprobando, es el acrónimo del inglés: Unit Under Test
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 21/94
Departamento de Tecnología Electrónica 3. Puertas lógicas, interruptores y
pulsadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 20
Figura 3.15: Resultados de la simulación
Después de haber comprobado la funcionalidad del circuito, nos disponemos a implementarlo en la FPGA
3.3. Síntesis e implementación del circuitoLos pasos que debemos tomar son casi los mismos que los que tomamos en el ejemplo anterior. Aunqueahora, como venimos de la simulación, lo primero que tienes que hacer es seleccionar en la ventana defuentes
las fuentes para síntesis: Sources for: "Synthesis/Implementation" (ver figura 3.9). Debemos tambiénactivar la ventana de procesos, que es donde le indicaremos a la herramienta que comandos de síntesis debeejecutar (recuerda la figura 2.7).
Antes de dar la orden de sintetizar debes asignar los pines de la FPGA. Ahora tenemos más pines queasignar. Repite el mismo proceso y asigna los pines conforme a la numeración de la placa (si se te haolvidado, vuelve a mirarte el ejercicio anterior).
Ya podemos sintetizar e implementar el circuito y pasarlo a la placa. Si todo ha salido bien, podráscomprobar que los LED de la placa se enciende en función del estado de los interruptores y el pulsador 0.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 22/94
Departamento de Tecnología Electrónica 4. Decodificador de 2 a 4
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 21
4. Decodificador de 2 a 4En este ejercicio implementaremos un decodificador de 2 a 4 como los que hemos visto en clase. Undecodificador de 2 a 4 recibe dos entradas que están codificadas en binario y según que número estécodificado activa la salida correspondiente a ese número. Por ejemplo, si el número de la entrada es 102,activará la salida 2, ya que 102 es dos en binario. Además, los decodificadores suelen tener una señal de
habilitación (enable
) que en caso de no estar activa, todas las salidas estarán también inactivasindependientemente del valor del resto de entradas.
Por tanto, nuestro decodificador será un bloque como el mostrado en la figura 4.1, cuya tabla de verdadtambién se muestra.
A0
A1
S0
S1
S2
S3E
DECOD 2a4
E A1 A0 S3 S2 S1 S0
0 X X 0 0 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0
A0
A1
S0
S1
S2
S3E
DECOD 2a4
E A1 A0 S3 S2 S1 S0
0 X X 0 0 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0
E A1 A0 S3 S2 S1 S0
0 X X 0 0 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0
Figura 4.1: Decodificador de 2 a 4 y su tabla de verdad
4.1. Diseño del decodificador Si nos fijamos en la tabla de verdad del decodificador (figura 4.1), considerando que E=1, podemos ver quecada una de las salidas S0, S1, S2 y S3, se corresponde con un término mínimo de A1 y A0. Por ejemplo, la
salida S0 es el término mínimo 0 (m0=A1 ⎯⎯ ·A0 ⎯⎯ ); la salida S1 es el término mínimo 1 (m1=A1 ⎯⎯ ·A0), y de manerasimilar para el resto.
Luego sólo tendremos que añadir la habilitación y obtendremos las salidas.
Empecemos a diseñar: primero creamos un nuevo proyecto llamado decod2a4 en el directorioC:/practica/edi/tunombre. Recuerda no poner tildes ni eñes, y mejor si no pones espacios. El proyecto debetener las mismas características de los proyectos anteriores. Creamos también una nueva fuente con elmismo nombre y de tipo esquemático (Schematic). Ya tendremos que tener el plano vacío de nuestro circuito.
Ya que el decodificador implementa todos los términos mínimos, necesitaremos todas las entradas negadas yafirmadas (no negadas). Como los puertos no se pueden colocar solos (se deben conectar a las patas de algúncomponente), empezamos colocando los dos inversores de las entradas A1 y A0. Y posteriormente lesconectamos los puertos de entrada (figura 4.2).
Figura 4.2: Inversores colocados a las entradas para formar los términos mínimos
Ahora conectamos un cable a la salida de cada inversor (mediante el icono ). El otro lado del cable lo
dejamos al aire: pinchamos en un punto más alejado a la derecha y pulsamos la tecla ESC . El extremo delcable 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 Add → Net Name
(también 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 alfinal del cable y pinchamos encima. Para colocar el segundo, cambiamos el nombre y repetimos la operación.
Llegados a este punto, deberíamos tener:
Figura 4.3: Inversores con nombre a la salida
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 23/94
Departamento de Tecnología Electrónica 4. Decodificador de 2 a 4
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 22
A continuación incluiremos 4 puertas AND de dos entradas que se encargarán de crear los 4 términosmínimos. Por ahora simplemente las creamos una debajo de la otra, y conectamos un cable a la salida decada una de ellas.
Figura 4.4: Inversores y las cuatro puertas AND para formar los términos mínimos
Ahora vamos a conectar las entradas de cada una de las puertas. La puerta de arriba será la del términomínimo cero (m0) y la de abajo m3. Para unir los cables de los puertos de entrada (negados o no) con lasentradas de las puertas usamos el comando Add → Net¸ y dejamos la opción por defecto: Use the Autorouter to addone or more line segments between the points you indicate. Al unir los cables veremos que en las uniones se formaun cuadradito que indica la conexión entre cable. Al terminar de unir los cables tendremos un circuito como
el siguiente. Si te equivocas, usa CTRL+Z para deshacer la última unión.
Figura 4.5: Términos mínimos del decodificador
Añade también los nombres de cada uno de los términos mínimos (como se ve en la figura 4.5). Para facilitarla 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 opción: Increase the name; el índice de término mínimo se
incrementará por sí solo.Ahora sólo nos queda incluir la señal de habilitación. Cuando ésta es cero, las salidas son cero, por tanto sepuede añadir al final de cada término mínimo mediante una puerta AND. Recuerda que la puerta AND
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 24/94
Departamento de Tecnología Electrónica 4. Decodificador de 2 a 4
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 23
actúa como una compuerta en el sentido que si E='0' la salida vale '0' (inhabilitada) y si E='1' la salida vale loque la otra entrada (ver figura 4.6).
E
m0S0
E='0'
m0S0='0'
E='0'→ Salida inhabilitada
E='1'
m0S0=m0
E='1'→ Salida habilitadaE→ Habilitación
E
m0S0
E='0'
m0S0='0'
E='0'→ Salida inhabilitada
E='1'
m0S0=m0
E='1'→ Salida habilitadaE→ Habilitación
Figura 4.6: Puerta AND como habilitación
Añadimos las puertas y las conectamos con la señal de habilitación. El circuito debería quedarnos como lasiguiente figura
Figura 4.7: Esquema de puertas del decodificador
Antes de seguir, debemos guardar el fichero (CRTL+S ) y comprobar si todas las conexiones están bienhechas: Tools→ Check Schematic . Debemos ver los errores o advertencias que puedan aparecer en la consola(ventana de abajo). Si hubiese algún error, debemos comprobar qué cable o componente se trata, moverlopara ver si realmente está conectado y conectarlo bien. Vuelve a comprobar el esquemático (Tools→ Check
Schematic ) cuantas veces haga falta hasta que no tengas errores, y el final guarda el fichero.
4.2. Comprobación del diseñoAntes de implementarlo en la placa vamos a ver si está bien diseñado. Para ello seguimos los mismos pasosque en el apartado 3.2:
• Seleccionamos en la ventana de fuentes (Sources) la opción 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 diseño combinacional y
deseleccionamosGSR (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 sólo tenemos 3 entradas, introduciremos las 8 combinaciones posibles. Éstas se muestran en la figura4.8.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 25/94
Departamento de Tecnología Electrónica 4. Decodificador de 2 a 4
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 24
Figura 4.8: Valores introducidos en el cronograma para la simulación del decodificador
Después de la simulación, los resultados de las salidas son:
Figura 4.9: Cronograma de la simulación
Podemos ver que los resultados de la simulación son correctos. Cuando E='0' no hay ninguna salida activa,y cuando E='1' se van activando las distintas salidas según cambian las entradas.
4.3. Implementación del diseñoAhora pasamos a implementarlo en el FPGA, si no te acuerdas, repasa lo visto en el apartado 2.2. Aquí terecordamos los pasos principales:
• Como venimos de la simulación, lo primero que tienes que hacer es seleccionar en la ventana de fuentes las
fuentes para síntesis: Sources for: "Synthesis/Implementation" (ver figura 3.9).• Activa la ventana de procesos, que es donde le indicaremos a la herramienta que comandos de síntesis 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
habilitación a el interruptor SW7. Los 4 LED de salida asígnalos consecutivamente.• Sintetiza e implementa el diseño• Comprueba que funciona como debe funcionar
4.4. Creación de un bloqueSi hemos llegado hasta aquí significa que nuestro diseño funciona bien, tanto en simulación comofísicamente en la placa, ahora vamos a crear un módulo que integre este codificador para que cada vez que
lo necesitemos implementar en diseños más grandes, no tengamos que crear todo el esquema de puertas sinoque conectaremos un bloque como el de la figura 4.1. Sería similar a un componente MSI ( Medium ScaleIntegration) como los chips disponibles para diseño con componentes discretos. Por ejemplo losdecodificadores 74LS138 y 74LS139.
Esto nos permitirá subir el nivel de abstracción y diseñar con bloques lógicos en vez de con puertas, lo quehará que podamos diseñar de manera más rápida y con menos probabilidad de equivocarnos, ya que cadauno de los bloques están probados y sabemos que funcionan correctamente.
Volvemos a la vista del mapa del circuito: dentro de la ventana de fuentes pinchamos dos veces en eldecodificador (decod2a4) o bien seleccionándolo directamente en la pestaña de la ventana grande.
Para crear el módulo (Xilinx lo llama símbolo) pinchamos en Tools→ Symbol Wizard , lo que hará que aparezcauna ventana (figura 4.10) que nos preguntará para qué componente vamos a crear un símbolo. En la opción
Pin Name Source, seleccionamos Using Schematic , y aparecerá el único esquemático que hemos creado en esteproyecto: decod2a4.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 26/94
Departamento de Tecnología Electrónica 4. Decodificador de 2 a 4
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 25
Figura 4.10: Selección del componente para el que vamos a crear un símbolo
Pinchamos en Next y aparecerá una ventana con las entradas y salidas del módulo. En ella podemos cambiarel lugar donde aparecerán (derecha o izquierda) y el orden. Ponemos el mismo orden de la figura 4.11.
Figura 4.11: Determinación de la posición de los pines del símbolo
Pinchando en Next la siguiente ventana nos preguntan por las distancias y los tamaños del símbolo. Lodejamos como está, o bien, si lo prefieres de otra manera, puedes modificarlo a tu gusto. Volvemos a pincharen Next , y tendremos una ventana con el símbolo de nuestro decodificador (figura 4.12). Si nos gustapinchamos en Finish.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 27/94
Departamento de Tecnología Electrónica 4. Decodificador de 2 a 4
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 26
Figura 4.12: Aspecto final del símbolo de nuestro decodificador
Por último tendremos el decodificador en el editor de esquemáticos (figura 4.13), en donde hay una pestañapara acceder al esquema en puertas.
Esquema en puertas
Esquema en puertas Símbolo
Símbolo
Esquema en puertas
Esquema en puertas Símbolo
Símbolo
Figura 4.13: Símbolo del decodificador en el editor de esquemáticos
Ahora podremos utilizar este símbolo en otros diseños. En esto va a consistir el próximo ejercicio.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 28/94
Departamento de Tecnología Electrónica 5. Decodificador de 3 a 8
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 27
5. Decodificador de 3 a 8Hemos realizado el decodificador de 2 a 4, utilizando dos interruptores encendíamos uno de los cuatroprimeros LED. Ahora vamos a construir un decodificador que encienda uno de los 8 LED, utilizaremos paraello 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 delcodificador de 2 a 4 (figura 4.1).
Podríamos hacer el ejercicio de la misma manera que el decodificador de 2 a 4, sin embargo, si lo hacemosuniendo dos decodificadores de 2 a 4 lograremos diseñarlo de manera mucho más rápida y entendible. Esdifícil de entender el funcionamiento de un diseño grande en puertas, mientras que si lo hacemos conbloques es más claro.
A0
A1
S0
S1
S2
S3
E
D E
C O D
3 a
8
S4
S5
S6
S7
A2
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 11 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 1 0 0
1 0 1 1 0 0 0 0 1 0 0 01 1 0 0 0 0 0 1 0 0 0 01 1 0 1 0 0 1 0 0 0 0 01 1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0
A0
A1
S0
S1
S2
S3
E
D E
C O D
3 a
8
S4
S5
S6
S7
A2
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 11 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 1 0 0
1 0 1 1 0 0 0 0 1 0 0 01 1 0 0 0 0 0 1 0 0 0 01 1 0 1 0 0 1 0 0 0 0 01 1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 11 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 1 0 0
1 0 1 1 0 0 0 0 1 0 0 01 1 0 0 0 0 0 1 0 0 0 01 1 0 1 0 0 1 0 0 0 0 01 1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 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 según los valores de E y A2 (figura 5.2),podemos ver que:
• Cuando E=0, el circuito está inactivo• Cuando E=1, y A2=0, las señales S7 a S4 están inactivas, y las señales S3 a S0 se comportan igual que el
decodificador de 2 a 4.• Cuando E=1, y A2=1, las señales S3 a S0 están inactivas, y las señales S7 a S4 se comportan igual que el
decodificador de 2 a 4.
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
1 0 0 0 0 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 1 0 0
1 0 1 1 0 0 0 0 1 0 0 0
A2 = '1'
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X 0 0 0 0 0 0 0 0
A2 = '0'
todas '0' igual que decod2a4
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
1 1 0 0 0 0 0 1 0 0 0 0
1 1 0 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0
todas '0'igual que decod2a4
todas '0'
misma
secuencia
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
1 0 0 0 0 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 1 0 0
1 0 1 1 0 0 0 0 1 0 0 0
A2 = '1'
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X 0 0 0 0 0 0 0 0
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X 0 0 0 0 0 0 0 0
A2 = '0'
todas '0' igual que decod2a4
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
1 1 0 0 0 0 0 1 0 0 0 0
1 1 0 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0
E A2 A1 A0 S7 S6 S5 S4 S3 S2 S1 S0
1 1 0 0 0 0 0 1 0 0 0 0
1 1 0 1 0 0 1 0 0 0 0 0
1 1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0
todas '0'igual que decod2a4
todas '0'
misma
secuencia
Figura 5.2: Tabla de verdad del decodificador de 3 a 8 dividida según el valor de E y A2
Por tanto, podemos usar dos decodificadores de 2 a 4, uno para las señales S3 a S0, que se activará cuando
E=1 y A2=0 ; esto es E·A2 ⎯⎯
; y otro decodificador para las señales S7 a S4, que se activará cuando E=1 y A2=1(E·A2). 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 señales.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 29/94
Departamento de Tecnología Electrónica 5. Decodificador de 3 a 8
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 28
Intenta realizarlo tú mismo, y si no te sale puedes ver la solución en la figura 5.5. A continuación vamos adiseñarlo.
5.1. Diseño del decodificador con bloquesAunque lo podríamos crear en el mismo proyecto que el anterior, vamos a crear un nuevo proyecto. Ya sabescomo se hace. Lo nombraremos decod3a8. Una vez que hemos indicado las características del proyecto
estaremos en la ventana principal, y pincharemos en Proyect → Add Copy of Source.... Con ello vamos a añadiruna copia del decodificador que ya hemos hecho a este nuevo proyecto. Vamos a hacer una copia para evitarestropear el diseño original. Después de ejecutar el comando aparecerá una ventana que nos pedirá elnombre del fichero que queremos añadir. Vamos al directorio del anterior proyecto y señalamos 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 añadir
Después de esto tendremos en nuestra ventana de fuentes (Sources) el componente decod2a4.
Al importar decod2a4.sch se ha importado su esquemático, pero no el símbolo que habíamos creado para él.Así que volvemos a crear el símbolo 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 esquemáticos vacío (el plano de nuestro nuevo diseño), y veremosque en la ventan de fuentes tenemos dos diseños: el decod2a4 que acabamos de añadir y el nuevo decod3a8 que vamos a diseñar.
Seleccionamos la pestaña de la ventana de símbolos, y vemos que en la sección de categorías (Categories), laprimera de ellas corresponde a nuestro proyecto, y si la seleccionamos aparece el símbolo que hemos creado:decod2a4. Esto se muestra en la figura 5.4.
Símbolos del proyecto
Símbolos del proyecto
Símbolo del decodificador de 2 a 4
Símbolo del decodificador de 2 a 4
Decodificador de 2 a 4
Decodificador de 2 a 4
Símbolos del proyecto
Símbolos del proyecto
Símbolo del decodificador de 2 a 4
Símbolo del decodificador de 2 a 4
Decodificador de 2 a 4
Decodificador de 2 a 4
Figura 5.4: Implementación del decodificador de 2 a 4 en el nuevo decodificador
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 30/94
Departamento de Tecnología Electrónica 5. Decodificador de 3 a 8
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 29
En el mapa del circuito añadimos dos referencias a decod2a4, que como ya hemos dicho, un decodificador espara las 4 primeras salidas y el otro para el resto.
Ahora realizamos las conexiones entre los decodificadores decod2a4 y las entradas y salidas del nuevodecodificador decod3a8. Incluyendo también las señales de habilitación de cada uno de ellos, usando paraello puertas AND. Nota que para la habilitación del decodificador superior, la puerta AND debe tener laentrada de A2 negada. El circuito final se muestra en la figura 5.5.
Figura 5.5: Esquema final del decodificador de 3 a 8
Fíjate en lo rápido que lo has podido diseñar y lo simple del circuito, y compáralo con lo que te hubiesesupuesto haberlo hecho todo en puertas lógicas.
Antes de pasar al siguiente paso, guarda el diseño (CTRL+S ) y comprueba que el diseño es correcto(Tools→ Check 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: Conexión de los puertos del diseño con los pines de la FPGA
Una vez implementado, comprueba que funciona correctamente y compáralo con los valores de la tabla de
verdad y la simulación.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 31/94
Departamento de Tecnología Electrónica 6. Decodificador de 4 a 16
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 30
6. Decodificador de 4 a 16¿Y cómo haríamos un decodificador de 4 a 16 con decodificadores de 2 a 4? el proceso es muy similar alanterior. La figura 6.1 muestra este decodificador y su tabla de verdad. Ésta se puede dividir en 4 partes, unapor decodificador.
A0
A1
S0
S1
S2
S3
E
D E C O D
4 a
1 6
S4
S5
S6
S7
A2
A3
S8
S9
S10
S11
S12
S13
S14
S15
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 01 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 01 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 01 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 01 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 01 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 01 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 01 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 01 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d e c o d
1
d e c o d
2
d e c o d
3
d e c o d
4
A0
A1
S0
S1
S2
S3
E
D E C O D
4 a
1 6
S4
S5
S6
S7
A2
A3
S8
S9
S10
S11
S12
S13
S14
S15
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 11 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 01 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 01 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 01 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 01 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 01 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 01 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 01 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 01 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d e c o d
1
d e c o d
2
d e c o d
3
d e c o d
4
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 señales de salida se han agrupado de cuatro en cuatro.En la figura 6.2 se han separado estos grupos, más el caso en que E='0'. Podemos ver que para cada grupo sepuede utilizar un decodificador de 2 a 4 como el que ya hemos diseñado. Todos los decodificadores tendránlas mismas entradas A1 y A0. La única diferencia está en las salidas a las que se conecta cada decodificador yla habilitación. Por ejemplo, el primer decodificador tendrá como salidas S0, S1, S2 y S3 y sólo estaráhabilitado cuando A3='0' y A2='0'; el segundo decodificador estará habilitado cuando A3='0' y A2='1'. Y demanera similar para el tercer y cuarto decodificador (como lo muestra la figura).
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
todas '0'
E = '0':
Inhabilitado
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
todas '0' igual que decod2a4
para las entradas A1 y A0
A3 = '0'
A2 = '0'
A3 = '0'
A2 = '0'
decod 0
activo cuando
todas '0' igual quedecod2a4
A3 = '0'A2 = '1'
A3 = '0'
A2 = '1'
decod 1
activo cuandoE A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
todas '0'
todas '0'igual que
decod2a4
A3 = '1'
A2 = '0'
A3 = '1'
A2 = '0'
decod 2
activo cuando
todas '0'
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
todas '0'igual que
decod2a4
A3 = '1'
A2 = '1'
A3 = '1'
A2 = '1'
decod 3
activo cuandoE A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
misma
secuencia
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
todas '0'
E = '0':
Inhabilitado
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1
1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
todas '0' igual que decod2a4
para las entradas A1 y A0
A3 = '0'
A2 = '0'
A3 = '0'
A2 = '0'
decod 0
activo cuando
todas '0' igual quedecod2a4
A3 = '0'A2 = '1'
A3 = '0'
A2 = '1'
decod 1
activo cuandoE A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
todas '0'
todas '0'igual que
decod2a4
A3 = '1'
A2 = '0'
A3 = '1'
A2 = '0'
decod 2
activo cuando
todas '0'
E A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
todas '0'igual que
decod2a4
A3 = '1'
A2 = '1'
A3 = '1'
A2 = '1'
decod 3
activo cuandoE A3 A2 A1 A0 S15 S14 S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
misma
secuencia Figura 6.2: Tabla de verdad del decodificador de 4 a 16 dividida según el valor de E y de A3 y A2
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 32/94
Departamento de Tecnología Electrónica 6. Decodificador de 4 a 16
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 31
Así que usaremos cuatro decodificadores de 2 a 4 para las 16 salidas. Además necesitaremos crear la lógicaque se encargue de habilitar cada decodificador. Si nos fijamos en las señales A3 y A2 de la tabla de verdad, yde cómo habilitan a cada decodificador, podemos extraer la tabla de verdad de la figura 6.3. En ella se ponenlas señales de habilitación de cada decodificador (E3, E2, E1, E0) en función de la habilitación general (E) y lasentradas A3 y A2. Podemos ver que la tabla de verdad se corresponde con la tabla de verdad de undecodificador de 2 a 4 (figura 4.1), así que para las señales de habilitación de los cuatro decodificadores
usaremos otro decodificador de 2 a 4.
E A3 A2 E3 E2 E1 E00 X X 0 0 0 01 0 0 0 0 0 11 0 1 0 0 1 0
1 1 0 0 1 0 01 1 1 1 0 0 0
Señales de habilitación de los 4 decodificadores
decodificador 0 habilitado
Ningún decodificador habilitado
decodificador 1 habilitado
decodificador 2 habilitado
decodificador 3 habilitado
E A3 A2 E3 E2 E1 E00 X X 0 0 0 01 0 0 0 0 0 11 0 1 0 0 1 0
1 1 0 0 1 0 01 1 1 1 0 0 0
E A3 A2 E3 E2 E1 E00 X X 0 0 0 01 0 0 0 0 0 11 0 1 0 0 1 0
1 1 0 0 1 0 01 1 1 1 0 0 0
Señales de habilitación de los 4 decodificadores
decodificador 0 habilitado
Ningún decodificador habilitado
decodificador 1 habilitado
decodificador 2 habilitado
decodificador 3 habilitado
Figura 6.3: Tabla de verdad de las señales de habilitación de los 4 decodificadores
Con estas indicaciones (además de lo visto en clase) ya podemos diseñar el decodificador de 4 a 16.
6.1. Diseño del decodificador con bloques prediseñadosVamos a crear un nuevo proyecto en C:/practicas/edi/tunombre llamado sieteseg. Quizás te preguntes porqué no lo llamamos decod4a16, esto es porque aunque en este ejercicio vamos a hacer el decodificador de 4 a16, en el siguiente ejercicio y trabajando en el mismo proyecto vamos a usar el visualizador (display) de sietesegmentos.
Creamos una nueva fuente (Project → New Source) de tipo esquemático (Schematic) llamada decod4a16. Paracrear 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 diseñamos en el ejercicio 4 utilizaremos un decodificador disponible en la biblioteca de símbolos de Xilinx.
Si no tenemos en pantalla el plano para dibujar el circuito (el editor de esquemáticos) pinchamos dos vecesen decod4a16.sch en la ventana de fuentes (Sources). Seleccionamos la ventana de símbolos 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 símbolos en lasubventana de categorías ( 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 iguala la del que ya realizamos en el ejercicio 4. Las características del componente seleccionado, incluyendo sutabla de verdad, se pueden consultar pinchando el botón que dice Symbol Info.
Si te fijas, hay más componentes, incluso hay un decodificador de 4 a 16, pero no lo usaremos, ya que en talcaso, este ejercicio ya estaría hecho.
Como vamos a necesitar 5 decodificadores, cuatro para las salidas y uno para la habilitación, colocamos 4componentes alineados verticalmente y el que decodifica las habilitaciones a la izquierda de ellos (figura6.4).
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 33/94
Departamento de Tecnología Electrónica 6. Decodificador de 4 a 16
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 32
Figura 6.4: Selección 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 laderecha son las mismas (A0 y A1) y a éstos conectamos las salidas. Las entradas del decodificador que seencarga de las habilitaciones son A2 y A3. El diseño final se muestra en la figura 6.5. Observa la señal dehabilitación E, si ésta es 0¸ hace que todas las salidas del decodificador de la izquierda valgan 0, y por tantoinhabilita 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: Diseño final del decodificador de 4 a 16
Una vez que lo hayas realizado, grábalo y comprueba que todo esté bien conectado (Tools→ Check Schematic ).Date cuenta de lo rápido que se puede diseñar usando bloques y lo tedioso que hubiese sido realizar este
decodificador enteramente con puertas lógicas.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 34/94
Departamento de Tecnología Electrónica 6. Decodificador de 4 a 16
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 33
Ahora crearemos el símbolo de este decodificador para poderutilizarlo en el ejercicio siguiente. Recuerda el apartado 4.4, endonde se explicaba la creación de un símbolo (o bloque):
• Pinchar en Tools→ Symbol Wizard
• Aparecerá una ventana (figura 4.10) que nos preguntará paraqué componente vamos a crear un símbolo: seleccionamosUsing Schematic y quedará seleccionado el único que haydecod4a16.
• La ventana de los pines la dejamos como está, ya que aunquela disposición de los pines parece desordenada, en lacolumna Order están bien, pinchamos en Next .
• Y terminamos pinchando en Finish.
El resultado debe ser similar al de la figura 6.6.
Figura 6.6: Símbolo del decodificador de 4 a 16
6.2. Comprobación del diseñoEn la placa sólo tenemos 8 LED disponibles para usar, y sin embargo nuestro decodificador tiene 16 salidas.Así que no lo podemos probar fácilmente.
En el siguiente ejercicio lo podremos probar, pero antes podemos simularlo. Procedemos como en elapartado 3.2, que lo recordaremos esquemáticamente:
• Seleccionamos en la ventana de fuentes (Sources) la opción 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 diseño combinacional y
deseleccionamosGSR (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 Bench→ Set
End of Test Bench" y ponemos 3000 ns. Esto lo hacemos para realizar un banco de pruebas más largo (verásque se amplía el tiempo del banco de pruebas). Ahora introducimos las 16 posibles combinaciones para lasentradas A0, A2, A2 y A3, e incluimos unas cuantas más para probar que la habilitación E funciona bien. En lafigura 6.7 se muestra los valores a las entradas. Con líneas discontinuas se han señalado el intervalo detiempo en el cual una de las señales de salida se deben activar. En la parte inferior de la figura, entre laslíneas discontinuas, se muestra cuál de las señales de salida es la que se debe activar. Observa también que alprincipio y al final de la simulación se ha puesto la señal de habilitación 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→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 simulación 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 simulación saldrá sólo 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 "Simulation→ Run
For Specified Time" . El tiempo especificado por defecto para la simulación son 1000 ns. Este tiempo se puedemodificar (figura 6.8) y además, como se muestra en la figura, existe un botón para ejecutar la simulación.
• Finalmente comprobamos si los valores a las salidas son correctos.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 35/94
Departamento de Tecnología Electrónica 6. Decodificador de 4 a 16
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 34
Tiempo de simulación
Simular por el tiempo especificado
Tiempo de simulación
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 simulación, se puede observar cómo se van activando lassalidas consecutivamente mientras la señal de habilitación (E) esté a uno. Cuando ésta vale 0, no hay ningunasalida activa.
Figura 6.9: Resultado de la simulación
En el siguiente ejercicio usaremos el decodificador para un diseño que implementaremos en la placa.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 36/94
Departamento de Tecnología Electrónica 7. Convertidor de hexadecimal a 7
segmentos
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 35
7. Convertidor de hexadecimal a 7 segmentosEn los ejercicios de los decodificadores teníamos un número codificado en los interruptores de la placa y lodecodificábamos mostrándolo en los LED. Ahora queremos mostrar un número hexadecimal (4 bits) en unvisualizador o display de siete segmentos. Antes de empezar a diseñar el circuito veamos cómo funcionan losdisplays de siete segmentos.
Un display de siete segmentos permite iluminar 7 segmentos (y a vecestambién el punto decimal) de manera independiente, de forma que sepueden representar todos los números y algunas letras y símbolos.
Los segmentos del display se nombran como muestra la figura 7.1. Segúnqué segmentos estén encendidos, se mostrarán diferentes números. Porejemplo, para el número 1 deberán estar encendidos los segmentos B y C.Para el número 8 todos los segmentos deberán estar encendidos.
A
G
D
B
C
DP
F
E
A
G
D
B
C
DP
F
E
Figura 7.1: Display de 7
segmentos
A continuación se muestra la codificación de los 16 números hexadecimales (figura 7.2), como podrásapreciar, algunos números admiten más de una representación, por ejemplo, el 6 podría no tener elsegmento A iluminado (pero se confundiría con la B). El 9 podría tener el segmento D iluminado. La A, la Cy la E se podrían representar en minúsculas. Puedes ver muchas otras representaciones enhttp://en.wikipedia.org/wiki/Seven-segment_display. Nosotros, usaremos la de la figura 7.2.
A
G
D
B
C
F
E
0A
G
D
B
C
F
E
1A
G
D
B
C
F
E
2A
G
D
B
C
F
E
3A
G
D
B
C
F
E
4A
G
D
B
C
F
E
5A
G
D
B
C
F
E
6A
G
D
B
C
F
E
7
A
G
D
B
C
F
E
8A
G
D
B
C
F
E
9A
G
D
B
C
F
E
A A
G
D
B
C
F
E
BA
G
D
B
C
F
E
CA
G
D
B
C
F
E
DA
G
D
B
C
F
E
EA
G
D
B
C
F
E
F
A
G
D
B
C
F
E
0A
G
D
B
C
F
E
1A
G
D
B
C
F
E
2A
G
D
B
C
F
E
3A
G
D
B
C
F
E
4A
G
D
B
C
F
E
5A
G
D
B
C
F
E
6A
G
D
B
C
F
E
7
A
G
D
B
C
F
E
8A
G
D
B
C
F
E
9A
G
D
B
C
F
E
A A
G
D
B
C
F
E
BA
G
D
B
C
F
E
CA
G
D
B
C
F
E
DA
G
D
B
C
F
E
EA
G
D
B
C
F
E
F
Figura 7.2: Codificación de los segmentos para mostrar los 16 números hexadecimales
Existen también otros visualizadores de 14 ó 16 segmentos, para poder representar todos los caracteresalfanuméricos. También se usan las matrices de puntos que tienen distintas resoluciones.
En nuestra placa, para activar el display de la derecha, debemos poner la señal AN_0='0'. El pincorrespondiente de la FPGA es el P60, como puedes ver en la placa encima de donde están los displays. En laplaca también se muestran los pines correspondientes a cada segmento, para encender un segmento tenemosque poner su pin correspondiente a cero. Funcionan por tanto con lógica negada. Cuando no quieres que seencienda un display tendrás que poner un uno, por ejemplo en los pines de las señales AN_1, AN_2 y AN_3,correspondientes a los otros tres displays. Así, para representar el uno, tendrías que poner los segmentos B y C a cero y el resto a uno, poniendo también la señal AN_0=0.
Con esta información ya podemos hacer el diseño, más adelante, en otros ejercicios, veremos las conexioneseléctricas y cómo encender varios displays.
7.1. Diseño del convertidor de hexadecimal a 7 segmentosEl objetivo es mostrar en un display el número hexadecimal codificado en los cuatro interruptores de laderecha (SW0, SW1, SW2 y SW3), ya que con cuatro bits podemos formar 16 números. Las entradas y salidas delcircuito que queremos diseñar están representadas en la figura 7.3.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 37/94
Departamento de Tecnología Electrónica 7. Convertidor de hexadecimal a 7
segmentos
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 36
I0
I1
SEG_A
SEG_B
SEG_C
SEG_D
E
HEX7SEG
SEG_E
SEG_F
SEG_G
SEG_DT
I2
I3
AN_0
AN_1
AN_2
AN_3
Número codificado:A los interruptores:
SW0, SW1, SW2, SW3
Habilitación:
Salida a los 7 segmentos
Encendido de los displays
AN0: display de la derecha
Punto decimal del display
I0
I1
SEG_A
SEG_B
SEG_C
SEG_D
E
HEX7SEG
SEG_E
SEG_F
SEG_G
SEG_DT
I2
I3
AN_0
AN_1
AN_2
AN_3
Número codificado:A los interruptores:
SW0, SW1, SW2, SW3
Habilitación:
Salida a los 7 segmentos
Encendido de los displays
AN0: display de la derecha
Punto decimal del display
Figura 7.3: Diagrama de entradas y salidas del convertidor hexadecimal a 7segmentos
Ya hemos visto en clase cómo se diseña el circuito que convierte de BCD a 7 segmentos. Ahora tenemos quemodificar la tabla de verdad para que incluya las salidas de los números del 10 (A16) al 15 (F16), ya que enBCD para ellos poníamos X (condiciones indiferentes o "no importa"). En la figura 7.4 se ha puesto la partede 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 númerosen 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 estés entendiendo nada.
Para implementar el circuito podríamos realizar el mapa de Karnaugh para cada uno de los 7 segmentos yobtener la función lógica. Este método es perfectamente válido y es necesario conocerlo, aunque es verdadque puede darnos un poco de pereza apartar el ordenador y ponernos con boli y papel a realizar 7 mapas deKarnaugh (uno para cada segmento).
nº I3 I2 I1 I0 A B C D E F G
0 0 0 0 0 0 0 0 01 0 0 0 1 1 0 0 1
2 0 0 1 0 0 0 1 03 0 0 1 1 0 0 0 0
4 0 1 0 0 1 0 0 15 0 1 0 1 0 1 0 0
6 0 1 1 0 0 1 0 07 0 1 1 1 0 0 0 1
8 1 0 0 0 0 0 0 09 1 0 0 1 0 0 0 1
A 1 0 1 0 0 0 0 1
B 1 0 1 1 1 1 0 0
C 1 1 0 0 0 1 1 0
D 1 1 0 1 1 0 0 0E 1 1 1 0 0 1 1 0
F 1 1 1 0 0 1 1 1
segmentos
ojo esto son
números en hex,
no son los
segmentos
nº I3 I2 I1 I0 A B C D E F G
0 0 0 0 0 0 0 0 01 0 0 0 1 1 0 0 1
2 0 0 1 0 0 0 1 03 0 0 1 1 0 0 0 0
4 0 1 0 0 1 0 0 15 0 1 0 1 0 1 0 0
6 0 1 1 0 0 1 0 07 0 1 1 1 0 0 0 1
8 1 0 0 0 0 0 0 09 1 0 0 1 0 0 0 1
A 1 0 1 0 0 0 0 1
B 1 0 1 1 1 1 0 0
C 1 1 0 0 0 1 1 0
D 1 1 0 1 1 0 0 0E 1 1 1 0 0 1 1 0
F 1 1 1 0 0 1 1 1
segmentos
ojo esto son
números en hex,
no son los
segmentos
Figura 7.4: Tabla de verdad del convertidor hexadecimal a 7 segmentos (salidas a nivel bajo)
Así que vamos a realizarlo por otro método. Hemos visto en clase que mediante decodificadores se puedenimplementar funciones lógicas. Normalmente no es un método muy eficiente en puertas, es decir, sirealizamos la función lógica a partir del mapa de Karnaugh suelen salir muchas menos puertas quehaciéndolo con decodificadores. Esto se debe a que el decodificador obtiene todos los términos mínimos,sean o no necesarios para la ecuación, y además, al hacerlo con los términos mínimos, se implementa laecuación en la primera forma normal (1FN), ésta suele ser de bastante mayor tamaño que la ecuaciónobtenida por Karnaugh. Esto último lo has podido comprobar si hiciste el primer ejercicio propuesto deltema 35.
Sin embargo, cuando necesitamos obtener varias funciones lógicas a partir de un mismo grupo de entradas(como es el caso) el uso de decodificadores no es tan descabellado, ya que un término mínimo puede serutilizado en varias salidas. Es decir, en nuestro caso necesitamos siete funciones lógicas, una para cadasegmento, y por tanto un término mínimo puede ser usado en varias funciones. Además, ya tenemos el
decodificador implementado y encima disponemos de una FPGA con 50000 ó 200000 puertas equivalentes,por lo que excedernos en el número de puertas para un diseño pequeño como el nuestro no es problemático.
5 Disponible en http://laimbio08.escet.urjc.es/assets/files/docencia/EDI/pbs3_02.pdf
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 38/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 39/94
Departamento de Tecnología Electrónica 7. Convertidor de hexadecimal a 7
segmentos
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 38
En la ventana de símbolos, en la subventana de categorías (Categories) escogemos la primera de ellas que hacereferencia a nuestro proyecto (C:/practicas/edi/...) . Y en la ventana de símbolos estará el decodificador de4 a 16 que creamos en el ejercicio anterior. Incluimos una referencia a este símbolo en nuestro nuevo diseño,y realizamos las conexiones del decodificador con las salidas al display según la tabla de verdad de la figura7.4 y el ejemplo de la figura 7.5. Conecta también las 4 entradas del decodificador, llámalas I0, I1, I2, I3. Yla habilitación E.
Quizás veas que si sigues conectando cables a las siete puertas OR que tienes que incluir, se va enmarañartodo el circuito. Para evitar esto, una mejor opción es nombrar los cables, ya que si dos cables tienen elmismo nombre, aunque no estén unidos se consideran como el mismo cable. Veámoslo para el segmento B.
Según la tabla de verdad de la figura 7.4, el segmento B no luce para los números 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 leconectamos 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 loscables 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). Verás que el final de amboscables están en rojo, esto es porque están desconectados.
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S13
S14
S15
S0
SEG_B
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S13
S14
S15
S0
SEG_B
SEG_B
Figura 7.7: Paso 1, ponemos la puerta OR de 6
entradas
Figura 7.8: Paso 2, conectamos un cable pequeño a la salida S5 del decodificador y a una entrada de la
puerta OR
Ahora pinchamos en " Add → Net Name" y en la ventana de opciones rellenamos en el apartado Name el nombrem5 , ya que vamos a poner el término mínimo m5. A continuación pinchamos en el esquemático cerca de loscables que hemos puesto (figura 7.9).
Por último, repetimos la operación 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 casode que nos hayamos equivocado de término mínimo, y nombramos una pata de la OR con un términomínimo equivocado, tendremos que borrar el cable y volverle a conectar uno nuevo, porque sirenombramos, estaremos renombrando tanto ese cable que está en la pata de la OR como el cable de la salidadel decodificador. De todos modos, si intentásemos renombrar el cable sin borrarlo, seguramente apareceráuna advertencia que indica que ese otro nombre ya existe, pues corresponde a otra salida del decodificador.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 40/94
Departamento de Tecnología Electrónica 7. Convertidor de hexadecimal a 7
segmentos
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 39
Figura 7.9: Paso 3, nombramos ambos cables con el mismo nombre
Figura 7.10: Paso 4, repetimos la operación con el
resto de entradas
Así que tienes dos métodos para realizar las conexiones del circuito: unir cables o nombrarlos, puedescombinarlos o usar el que más te guste, aunque para este ejemplo, si conectas todos los cables va a resultarun circuito muy poco claro, y difícil para hacer modificaciones. El resto de las salidas de los segmentos debesrealizarlo tú solo.
Una vez que tengas todas las salidas de los segmentos conectadas, debes conectar la señal AN_0¸ recuerdaque esta señal es un pin que va al display de la derecha. Cuando AN_0=0 el display lucirá (si tiene algúnsegmento encendido) cuando AN0=1 el display estará apagado independientemente de que tengas lossegmentos encendidos.
Lo que vamos a hacer es encender el display cuando el circuito
esté habilitado (E). Como la señal de habilitación es a nivel alto yla señal AN_0 es a nivel bajo, tendrás que conectarlas con uninversor. Es fácil, pero si no se te ocurre cómo hacerlo observa lafigura 7.11.
Por último conectarás 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) cómo se conectaba una salida a un unológico. Si no se te ocurre cómo hacerlo puedes mirar la figura7.11. También deberás incluir el puerto del punto decimal, quehemos llamado SEG_DT (figura 7.3). El punto decimal funcionaigual que el resto de los segmentos, y como no lo queremosencender lo conectaremos a alimentación (Vcc), exactamente
igual que el las señales (AN_1, AN_2, AN_3) En este punto deberías tener todo el circuito diseñado. Grábaloy comprueba que el esquemático está bien conectado(Tools→ Check Schematic). Si el diseño está bien pasaremos aimplementarlo en la FPGA.
Figura 7.11: Detalle de la conexión de las
señales AN_0 y AN_1
7.2. ImplementaciónEsta vez, en vez de simular el circuito vamos a implementarlo directamente, ya que la funcionalidad delcircuito es muy fácilmente comprobable en la placa, pues sólo 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 verásuna imagen similar a la de la figura 7.12. En ella puedes apreciar que de los dos esquemáticos que tenemos,
el convertidor de hexadecimal a 7 segmentos está por encima del decodificador. El convertidor debe de tenerel símbolo , que significa que es el diseño de más alta jerarquía. Si no estuviese tendrías que pinchar conel botón derecho del ratón encima de él y seleccionar "Set as Top Module" .
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 41/94
Departamento de Tecnología Electrónica 7. Convertidor de hexadecimal a 7
segmentos
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 40
Convertidor HEX a 7SEG
diseño de mayor jerarquía El decodificador es un
componente del convertidor : Símbolo que indica el
componente de mayor jerarquía
Convertidor HEX a 7SEG
diseño de mayor jerarquía El decodificador es un
componente del convertidor : Símbolo que indica el
componente de mayor jerarquía
Figura 7.12: Representación de la jerarquía en la ventana de fuentes
Ahora vamos a asignar los pines del circuito, en los ejercicios anteriores lo hemos hecho mediante laherramienta PACE (figura 2.11 del apartado 2.2). Dentro de la ventanas de procesos seleccionábamos elcomando "User Constraints→ Assign Package Pins" . Sin embargo a veces hay un error y salen unos puertos queno son los que tienes en tu diseño. En la figura 7.13 se muestran los pines que salían al hacer este ejercicio(probado incluso desde dos ordenadores distintos), sin embargo, si hemos hecho el diseño bien, nos deberíande salir los pines de la figura 7.3.
Figura 7.13: Ventana de puertos errónea de la herramienta PACE
Si te salen los pines correctamente, puedes seguir usando la herramienta PACE, si no, y te sale algo parecidoa 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 extensión .UCF. Y lopuedes 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 grandede la derecha (ver figura 7.14).
Fichero de restricciones .ucf
Fichero de restricciones .ucf
Aquí se escriben
las restricciones
Edit Constraints (Text)
Fichero de restricciones .ucf
Fichero de restricciones .ucf
Aquí se escriben
las restricciones
Aquí se escriben
las restricciones
Edit Constraints (Text)
Edit Constraints (Text)
Figura 7.14: Edición de las restricciones en texto
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 42/94
Departamento de Tecnología Electrónica 7. Convertidor de hexadecimal a 7
segmentos
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 41
Ahora tenemos que escribir los puertos en el fichero UCF, que en realidad es lo que hace la herramientaPACE. El texto que tenemos que escribir se muestra en el código 7.1. El formato de estos ficheros es muysencillo:
• Los comentarios se consideran a partir del signo #• Cada puerto de nuestro diseño se conecta con la línea:
NET " Nombre_del_Puerto" LOC = " Nombre_del_Pin"
Con estas indicaciones, y tras identificar los pines en la placa, ya la podrías hacer tú solo. Sin embargo, porser la primera vez, a continuación se muestra el contenido del fichero. Aún así, intenta entender elsignificado, ya que para las siguientes ocasiones tendrás que escribirlo tú solo.
#Numero codificado en los interruptores SW0, SW1, SW2, SW3NET "I0" LOC = "P89" ;NET "I1" LOC = "P88" ;NET "I2" LOC = "P87" ;NET "I3" LOC = "P86" ;
#Enable en el SW7NET "E" LOC = "P81" ;
#Encendido de los displaysNET "AN_0" LOC = "P60" ;
NET "AN_1" LOC = "P69" ;NET "AN_2" LOC = "P71" ;NET "AN_3" LOC = "P75" ;
#7 segmentosNET "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 decimalNET "SEG_DT" LOC = "P63" ;
Código 7.1: Conexión de los puertos del diseño con los pines de la FPGADebes estar atento a que los nombres que hemos puesto en el fichero UCF coincidan con los nombres de lospuertos de tu diseño. El código 7.1 está hecho para los nombres de la figura 7.3. Si por descuido has puestootros nombres en el diseño, o bien cambias los nombres del diseño, o cambias el UCF.
Guarda el fichero UCF una vez que lo hayas terminado.
Sintetiza el diseño, y posteriormente impleméntalo. Esto ese hacía desde la ventana de procesos, "Synthesize-
XST" , "Implement Design". Observa si hay algún error, sobre todo después de la implementación. Si te hasequivocado al nombrar los puertos te saldrá un mensaje diciendo qué puerto falta, si es así, corrige el UCF oel esquemático y repite el proceso.
Finalmente pincha dos veces en "Generate Programming File" y luego en "Configure Device (iMPACT)" paraprogramar la FPGA, si no te acuerdas de estos pasos repasa el apartado 2.3.
Ahora comprueba que se visualizan correctamente los números según estén los interruptores del cero al tres.Si ves que algún número no se visualiza correctamente, identifica qué segmento está mal y revisa elesquemático. Comprueba también que la habilitación funciona. Quizás crea que no funciona nada, y lo quesucede es que tienes el circuito deshabilitado (SW7='0').
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 43/94
Departamento de Tecnología Electrónica 8. Codificadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 42
8. CodificadoresEn esta práctica realizaremos varios codificadores. Primero haremos un codificador de 4 a 2. En un principiolo haremos sin prioridad y luego incluiremos un módulo que establezca las prioridades. Posteriormente, enel capítulo 9 utilizaremos varios codificadores para realizar uno de 8 a 3.
8.1. Codificador de 4 a 2 sin prioridadUn codificador devuelve en forma codificada la entrada que tiene activa. En esta práctica el codificadortendrá 4 entradas y devolverá en formato binario la entrada que está activa.
En un principio realizaremos la versión más sencilla. Utilizaremos los cuatro pulsadores como entradas y losdos primeros LED para mostrar la salida codificada en binario. El esquema del circuito que queremosrealizar se muestra en la figura 8.1. En la tabla se indica qué salidas se activa. Por ejemplo, cuando la entradaactiva es la I0 los dos LED permanecerán apagados, ya que mostrarán un cero en binario (002). Cuando estála entrada I1 activa, se encenderá el LED0¸ mostrando un uno en binario (012). De análoga sucede con los doscasos restantes.
CODIF
BTN3 I3
BTN2 I2
BTN1 I1
BTN0 I0
LED0S0
LED1S1
I0
I1I2
I3
entrada
activa
salidas
S1 S0
0 0
0 11 0
1 1S1 se enciende cuando
I2 está activa o (OR )
cuando I3 está activa
S0 se enciende cuando
I1 está activa o (OR )
cuando I3 está activa S0
S1
I1
I3I2
CODIF
BTN3 I3
BTN3 I3
BTN2 I2BTN2 I2
BTN1 I1BTN1 I1
BTN0 I0BTN0 I0
LED0S0
LED1S1
I0
I1I2
I3
entrada
activa
salidas
S1 S0
0 0
0 11 0
1 1S1 se enciende cuando
I2 está activa o (OR )
cuando I3 está activa
S0 se enciende cuando
I1 está activa o (OR )
cuando I3 está activaI0
I1I2
I3
entrada
activa
salidas
S1 S0
0 0
0 11 0
1 1S1 se enciende cuando
I2 está activa o (OR )
cuando I3 está activa
S0 se enciende cuando
I1 está activa o (OR )
cuando I3 está activa S0
S1
I1
I3I2
Figura 8.1: Entradas y salidas del codificador, tabla de verdad y obtención del esquema en puertas lógicas
La realización de este circuito es sencilla, y simplemente tienes que implementar el esquema de puertasmostrado a la derecha de la figura 8.1, e indicar los pines a los que van conectados. Las conexiones con lospulsadores 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 pinescorrespondiente y bájalo a la FPGA. Como puedes ver, la entrada I0 no está conectada en el esquema depuertas, 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 lafigura 8.2.
Entrada activa
(pulsador)ninguna BTN0 BTN1 BTN2 BTN3 BTN1 y BTN2
LD0LD1
00
LD0LD1
00
LD0LD1
01
LD0LD1
10
LD0LD1
11
LD0LD1
11
LEDs
encendidos y
codificación
Entrada activa
(pulsador)ninguna BTN0 BTN1 BTN2 BTN3 BTN1 y BTN2
LD0LD1
00
LD0LD1
00
LD0LD1
01
LD0LD1
10
LD0LD1
11
LD0LD1
11
LEDs
encendidos y
codificación
Figura 8.2: Salidas del circuito codificador según las entradas
Cuando pulsamos el pulsador BTN0 no se enciende ningún 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 ningún botón pulsado. Así que con este circuito, no podemos distinguir entre el caso en queno hay ningún botón pulsado y el caso en que el botón cero (BTN0) está pulsado.
Por otro lado, cuando pulsamos varios botones a la vez ocurren situaciones imprevistas. Por ejemplo, comose muestra en la derecha de la figura 8.2, cuando se pulsan los botones uno y dos (BTN1 y BTN2), se enciendenlos dos LED, mostrando por tanto que es el pulsador 3 (BTN3) el que está encendido. Esto es porque en elplanteamiento inicial no hemos considerado que se puedan pulsar dos botones simultáneamente.
Así que tenemos que solucionar dos cosas:
• Definir las prioridades para que sólo esté una línea activa• Diferenciar cuándo está la línea del BTN0 activa de cuando no hay ninguna línea activa.
8.2. Codificador de 4 a 2 con prioridad, línea activa y habilitación
Así que ampliaremos el codificador de modo que con una señal de salida (A) indiquemos si hay algún botónpulsado. Así podremos distinguir el botón cero con la situación en la que no hay ningún botón pulsado. Paraello 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 cómo quedaría este circuito.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 44/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 45/94
Departamento de Tecnología Electrónica 8. Codificadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 44
circuito más sencillo debido a que ese caso nunca se va a dar. Esta libertad no la tengo con las X en lasentradas.
Para terminar nos quedaría unir los módulos tal como se muestra en la figura 8.4, sin embargo, antes vamosa incluir la señal de habilitación (Enable). Cuando la señal de habilitación vale cero (Enable='0') hace quetodas las salidas valgan '0'. Si está habilitado, el circuito funciona normalmente. Además, los codificadorescon habilitación incluyen una nueva señal de salida (EO: enable out), que nos permitirá conectar varios
codificadores y extender su capacidad. Esta señal nos indica si el codificador está habilitado pero no hayninguna señal de entrada activa, nos diferencia de cuando el codificador no está habilitado. El bloque quequeremos realizar se muestra en la figura 8.7
EI I3 I2 I1 I0 S1 S0 A EO
0 X X X X 0 0 0 0
1 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 1 0
1 0 0 1 X 0 1 1 0
1 0 1 X X 1 0 1 0
1 1 X X X 1 1 1 0
CODIF
BTN3 I3
BTN2 I2
BTN1 I1
BTN0 I0
LED0S0
LED1S1
LED6AEI
EO
SW7
LED7EI I3 I2 I1 I0 S1 S0 A EO
0 X X X X 0 0 0 0
1 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 1 0
1 0 0 1 X 0 1 1 0
1 0 1 X X 1 0 1 0
1 1 X X X 1 1 1 0
EI I3 I2 I1 I0 S1 S0 A EO
0 X X X X 0 0 0 0
1 0 0 0 0 0 0 0 1
1 0 0 0 1 0 0 1 0
1 0 0 1 X 0 1 1 0
1 0 1 X X 1 0 1 0
1 1 X X X 1 1 1 0
CODIF
BTN3 I3
BTN2 I2
BTN1 I1
BTN0 I0
LED0S0
LED1S1
LED6AEI
EO
SW7
LED7
CODIF
BTN3 I3BTN3 I3
BTN2 I2BTN2 I2
BTN1 I1BTN1 I1
BTN0 I0BTN0 I0
LED0S0
LED1S1
LED6AEI
EO
SW7
LED7
Figura 8.7: Bloque y tabla de verdad del codificador con prioridad y habilitación
Como vemos de la tabla de verdad de la figura 8.7, la salida EO vale '1' cuando A0='0' y EI='1'. A estasalturas, esta condición nos debería ser fácil de implementar en puertas lógicas.
El circuito final nos quedará como muestra la figura 8.8.
I3P3
I2P2
I1 P1
I0 P0
A
EI
S0
S1
EOPRIOR
I3P3
I2P2
I1 P1
I0 P0
A
EI
S0
S1
EOPRIOR
Figura 8.8: Esquema en puertas del codificador con prioridad y habilitación
Implementa este diseño en la FPGA, poniendo los pines que se muestran en el bloque de la izquierda de lafigura 8.7 y comprueba que funciona correctamente.
8.3. Codificador de 4 a 2 con conversión a 7 segmentosPor último se deja como ejercicio conectar el codificador que acabamos de diseñar (figura 8.8) con el
conversor a siete segmentos que hemos realizado en el capítulo 7. Así, además de ver el número resultantecodificado con los LED, lo veremos en el display de siete segmentos.
Para ello, primero crea el símbolo del codificador que acabas de crear (el de la figura 8.8). Recuerda que sehacía con el comando: Tools→ Symbol Wizard (se explicó en el apartado 4.4).
Ahora vamos a añadir el conversor a 7 segmentos que realizamos en el capítulo 7. Para ello, ejecutamos"Proyect → Add Copy of Source..." y vamos al directorio donde hicimos el conversor, que debería ser"c:/practicas/edi/tunombre/sieteseg/" y allí seleccionas los ficheros: "hex7seg.sch" y "decod4a16.sch".Ahora creamos un símbolo del esquemático hex7seg.shc, para ello ejecutamos Tools→ Symbol Wizard y en lasiguiente ventana, en el apartado Using Schematic seleccionamos el módulo hex7seg. Esto es importanteporque si no estaríamos haciendo el símbolo de otro módulo. En la siguiente ventana podemos ordenar laentradas y salidas, o dejarlas así y tener cuidado de no equivocarnos cuando hagamos las conexiones. Paraordenarlas tenemos que pinchar en la columna que indica Order y en ella indicar señal por señal, el ordenque le asignamos (como puedes ver no es muy cómo el método de ordenamiento).
Ahora crea una nueva fuente "Proyect → New Source" de tipo esquemático llamada codif4a2_7seg en la quepondremos tanto el codificador de la figura 8.8 como el conversor a 7 segmentos. En la ventana de símbolos
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 46/94
Departamento de Tecnología Electrónica 8. Codificadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 45
seleccionamos la categoría de nuestro proyecto (la 2ª fila donde sale la ruta de nuestro proyecto). En lasubventana de Symbols estarán los tres símbolos de nuestro proyecto: codif4a2, decod4a16 y hex7seg. Elsímbolo decod4a16 está dentro del hex7seg y por eso aparece. Nosotros usaremos el codif4a2 y el hex7seg. Laconexión de los circuitos se haría como muestra la figura 8.9. Como el codificador es de 4 a 2, tiene dossalidas para indicar el número (S0 y S1), el resto de entradas del conversor a 7 segmentos (I2 e I3) irán atierra (a cero), para que los número que muestre sean del 0 al 3. Si estuviesen las dos a '1', mostraría los
números del 12 a 15. Y si no las pusieses a ningún valor, tendrías un valor indeterminado en las entradas deldecodificador, y quién sabe que número te saldría. Esto es: Las entradas siempre deben tener un valordeterminado, 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 tenías del conversorde 7 segmentos (código 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 7segmentos. Y que también funcionan correctamente las salidas A y EO (Enable Out), que usaremos en elsiguiente ejercicio.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 47/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 48/94
Departamento de Tecnología Electrónica 9. Extensión de la capacidad de un
codificador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 47
EI I7 I6 I5 I4 I3 I2 I1 I0 S2 S1 S0 A EO0 X X X X 0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1
1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 01 0 0 0 0 1 0 0 1 X 0 0 0 1 0 1 1 0 0 0 1 1 01 0 0 0 0 1 0 1 X X 0 0 0 1 1 0 1 0 0 1 0 1 0
1 0 0 0 0 1 1 X X X 0 0 0 1 1 1 1 0 0 1 1 1 01 0 0 0 1 0 X X X X 0 0 1 0 0 0 0 0 1 0 0 1 01 0 0 1 X 0 X X X X 0 1 1 0 0 0 0 0 1 0 1 1 0
1 0 1 X X 0 X X X X 1 0 1 0 0 0 0 0 1 1 0 1 01 1 X X X 0 X X X X 1 1 1 0 0 0 0 0 1 1 1 1 0
EI I3 I2 I1 I0 EI I3 I2 I1 I0 S1 S0 A EO S1 S0 A EO
G_CODIF P_CODIF G_CODIF P_CODIF CODIF8a3
ENTRADAS SALIDAS
Señales externas
(puertos) del
codificador de 8 a 3
Señales internas de
los codificadores
de 4 a 2
La salida EO del codificador
G_CODIF entra como
habilitación (EI) del P_CODIF
P_CODIF
deshabilitado
ninguna entrada deG_CODIF activa →
habilita a P_CODIF
alguna entrada deG_CODIF activa→
deshabilita a P_CODIF
S1 y S2 del CODIF8a3
lo proporciona P_CODIF
S1 y S2 del CODIF8a3
lo proporciona G_CODIF
EI I7 I6 I5 I4 I3 I2 I1 I0 S2 S1 S0 A EO0 X X X X 0 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1
1 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 01 0 0 0 0 1 0 0 1 X 0 0 0 1 0 1 1 0 0 0 1 1 01 0 0 0 0 1 0 1 X X 0 0 0 1 1 0 1 0 0 1 0 1 0
1 0 0 0 0 1 1 X X X 0 0 0 1 1 1 1 0 0 1 1 1 01 0 0 0 1 0 X X X X 0 0 1 0 0 0 0 0 1 0 0 1 01 0 0 1 X 0 X X X X 0 1 1 0 0 0 0 0 1 0 1 1 0
1 0 1 X X 0 X X X X 1 0 1 0 0 0 0 0 1 1 0 1 01 1 X X X 0 X X X X 1 1 1 0 0 0 0 0 1 1 1 1 0
EI I3 I2 I1 I0 EI I3 I2 I1 I0 S1 S0 A EO S1 S0 A EO
G_CODIF P_CODIF G_CODIF P_CODIF CODIF8a3
ENTRADAS SALIDAS
Señales externas
(puertos) del
codificador de 8 a 3
Señales internas de
los codificadores
de 4 a 2
La salida EO del codificador
G_CODIF entra como
habilitación (EI) del P_CODIF
P_CODIF
deshabilitado
ninguna entrada deG_CODIF activa →
habilita a P_CODIF
alguna entrada deG_CODIF activa→
deshabilita a P_CODIF
S1 y S2 del CODIF8a3
lo proporciona P_CODIF
S1 y S2 del CODIF8a3
lo proporciona G_CODIF
Figura 9.3: Tabla de verdad del codificador de 8 a 3 con las señales internas
Ahora implementa en la placa el diseño de la figura 9.3:
• Crea un nuevo proyecto llamado CODIF8a3 • Añade una copia del codificador de 4 a 2 que creaste en la práctica anterior (capítulo 8): "Proyect → Add Copy of
Source..." y busca el "c:/practicas/edi/tunombre/codif4a2/codif4a2.sch" • Crea un símbolo de este codificador: Tools→ Symbol Wizard • Crea una nueva fuente de tipo esquemático llamada codif8a3 (Proyect → New 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. Inclusión del convertidor a siete segmentosAhora puedes repetir el paso que realizaste en el apartado 8.3 pero con el codificador de 8 a 3. De la mismamanera tendrás que añadir el convertidor a siete segmentos y crear un símbolo para éste y para elcodificador de 8 a 3. El esquema final se muestra en la figura 9.4, que es muy parecido al que habíamoshecho anteriormente (figura 8.9). La mayor diferencia es que ahora la entrada I2 del convertidor a sietesegmentos está conectada con la salida S2 del codificador de 8 a 3.
Figura 9.4: Esquema del circuito final
9.3. Codificador mayoresSe 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 serán los 4 pulsadores y los 8 interruptores (no uses un interruptor comohabilitación sino que lo dejas a '1' permanentemente). Normalmente estos codificadores son de 16 a 4, pero loharemos de 12 a 4 porque no tenemos más pulsadores ni interruptores en la placa.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 49/94
Departamento de Tecnología Electrónica 10. Comparadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 48
10. ComparadoresYa hemos aprendido a realizar varios diseños: puertas lógicas, decodificadores, codificadores y unconvertidor de hexadecimal a siete segmentos. Ahora vamos a hacer un comparador, primero lo haremos deun sólo bit y luego, con comparadores de un bit construiremos uno de dos bits.
10.1. Comparador de un bitLo primero que haremos es comparar dos números de un bit. Realizar esta comparación es fácil,simplemente tenemos que construir la tabla de verdad y obtener las ecuaciones lógicas. En la figura 10.1 semuestra esta tabla de verdad y la obtención de sus ecuaciones lógicas. Se ha llamado AM a la señal que indicaque A es mayor (A>B) y BM a la señal que indica que B es mayor (A<B).
A B IGUAL AM BM0 0 1 0 00 1 0 0 11 0 0 1 0
1 1 1 0 0
A=B A>B A<B
IGUAL=(A·B)+(A·B)=A⊕B
AM = m2 = A·B
BM = m1 = A·BA
B
IGUAL
AM
BM
COMPA1A B IGUAL AM BM0 0 1 0 00 1 0 0 11 0 0 1 0
1 1 1 0 0
A=B A>B A<B
IGUAL=(A·B)+(A·B)=A⊕B
AM = m2 = A·BAM = m2 = A·B
BM = m1 = A·BA
B
IGUAL
AM
BM
COMPA1
A
B
IGUAL
AM
BM
COMPA1
Figura 10.1: Tabla de verdad, ecuaciones lógicas, y entradas y salidas del comparador de un bit
El diseño de este circuito es bien fácil, sólo son tres puertas, dos puertos de entrada y tres de salida (figura10.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, añade las puertas lógicas, recuerda que tienes puertas AND con
una entrada negada para implementar la función A ⎯⎯ ·B y A· B ⎯⎯ (estas se llaman and2b1 y tienen una bolita denegación en una de sus entradas). También 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 guárdalo (CRTL+S )y comprueba el esquemático (Tools→ Check Schematic).
Si el diseño está bien pasaremos a implementarlo en la FPGA.
Ahora asignamos los pines, ya sabes como se hace, o bien con el fichero UCF ocon 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, porejemplo para SW0 pondrás P89.
Y por fin implementa el comparador y comprueba que funciona bien.
A SW0
B SW1AM LD0
IGUAL LD1
BM LD2
Tabla 10.1: Tabla deasignación de señales
10.2. Comparador de dos bitsUn comparador de un solo bit es bastante fácil ya que sólo tenemos 4 posibles combinaciones. Para uno dedos bits hay que pensárselo un poco más. El bloque que queremos implementar se muestra en la figura 10.2.A partir de dos señales de 2 bits, queremos saber si son iguales, o si una es mayor que la otra. Como son
señales de dos bits tenemos que saber cuál es el bit más significativo. Recuerda que no es lo mismo 10 2 que012. A pesar de que tienen el mismo número de unos y ceros, el orden en que están situados determina ladiferencia.
Por lo tanto tenemos que diferenciar cuál es el bit más significativo. Para eso podemos representar el circuitocomo el bloque de la izquierda de la figura 10.2. En donde se muestran uno por uno todos los bits (o cables)de cada señal.
Sin embargo, para evitar tener que poner un cable para cada bit, se puede representar como un bus. Estarepresentación se muestra a la derecha de la figura 10.2. Para este ejemplo no se nota mucho la diferencia,pero imagínate que quieras hacer un comparador de 32 bits.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 50/94
Departamento de Tecnología Electrónica 10. Comparadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 49
A0
B0
IGUAL
AM
BM
COMPA2
A1
B1
bit más
significativo
bit más
significativo
A(1:0)
IGUAL
AM
BM
COMPA2
B(1:0)
2
2
ancho del bus
A0
B0
IGUAL
AM
BM
COMPA2
A1
B1
bit más
significativo
bit más
significativo
A(1:0)
IGUAL
AM
BM
COMPA2
B(1:0)
2
2
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 podríamos hacer igual que el cuarto ejercicio de los propuestos del tema 3. Comotenemos cuatro variables es un número adecuado para hacerlo por Karnaugh. Sin embargo, ya que tenemosel comparador de 1 bit, lo utilizaremos para hacerlo modularmente.
La tabla de verdad del circuito se muestra en la tabla 10.2.
A1 A0 B1 B0 IGUAL AM BM
0 0 0 0 1 0 0
0 0 0 1 0 0 10 0 1 0 0 0 1
0 0 1 1 0 0 1
0 1 0 0 0 1 0
0 1 0 1 1 0 0
0 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 0 1 0
1 0 0 1 0 1 0
1 0 1 0 1 0 0
1 0 1 1 0 0 1
1 1 0 0 0 1 0
1 1 0 1 0 1 0
1 1 1 0 0 1 0
1 1 1 1 1 0 0
A1 A0 B1 B0 IGUAL AM BM
0 0 0 0 1 0 0
0 0 0 1 0 0 10 0 1 0 0 0 1
0 0 1 1 0 0 1
0 1 0 0 0 1 0
0 1 0 1 1 0 0
0 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 0 1 0
1 0 0 1 0 1 0
1 0 1 0 1 0 0
1 0 1 1 0 0 1
1 1 0 0 0 1 0
1 1 0 1 0 1 0
1 1 1 0 0 1 0
1 1 1 1 1 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 bitsmás significativos. Ya que el bit más significativo "manda" sobre el menos significativo, esto se aprecia mejoren la tabla de la figura 10.3.
A1 B1 A0 B0 IGUAL AM BM
0 0 0 0 1 0 00 0 0 1 0 0 1
0 0 1 0 0 1 00 0 1 1 1 0 0
0 1 0 0 0 0 10 1 0 1 0 0 10 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 0 1 01 0 0 1 0 1 01 0 1 0 0 1 0
1 0 1 1 0 1 01 1 0 0 1 0 01 1 0 1 0 0 1
1 1 1 0 0 1 0
1 1 1 1 1 0 0
A1<B1
A1>B1
AM=0Igual=0
BM=1
MSB LSB
AM=1
Igual=0
BM=0
A1=B1comprobar
el LSB
A1=B1comprobar
el LSB
A1 B1 A0 B0 IGUAL AM BM
0 0 0 0 1 0 00 0 0 1 0 0 1
0 0 1 0 0 1 00 0 1 1 1 0 0
0 1 0 0 0 0 10 1 0 1 0 0 10 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 0 1 01 0 0 1 0 1 01 0 1 0 0 1 0
1 0 1 1 0 1 01 1 0 0 1 0 01 1 0 1 0 0 1
1 1 1 0 0 1 0
1 1 1 1 1 0 0
A1<B1
A1>B1
AM=0Igual=0
BM=1
MSB LSB
AM=1
Igual=0
BM=0
A1=B1comprobar
el LSB
A1=B1comprobar
el LSB
Figura 10.3: Tabla de verdad del comparador de dos bits ordenada desde los bits más significativos a los menos
Fíjate 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
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 51/94
Departamento de Tecnología Electrónica 10. Comparadores
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 50
• 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 sólo estamos haciendo comparaciones bit a bit. Esto es, podemos hacercomparaciones individuales. Y podemos traducir estas sentencias a algebra de Boole y puertas lógicas. La
figura 10.4 muestra la construcción del comparador de dos bits para las señales IGUAL y AM. Para no complicarel esquema, no se ha dibujado el diagrama de puertas para la señal BM, pero es similar al de la señal AM.
A0
B0
IGUAL_0
AM_0
BM_0
COMPA1
A1
B1
IGUAL_1
AM_1
BM_1
COMPA1
IGUAL
Si (A1=B1) y (A0=B0)
IGUAL_1=1 IGUAL_0=1
Si (A1>B1) ó [(A1=B1) Y (A0>B0)]
AM_1=1 IGUAL_1=1 AM_0=1
IGUAL= IGUAL_1 · IGUAL_0
AM = AM_1 + (IGUAL_1 · AM_0)
AM
Iguales
A>B
A0
B0
IGUAL_0
AM_0
BM_0
COMPA1
A1
B1
IGUAL_1
AM_1
BM_1
COMPA1
IGUAL
Si (A1=B1) y (A0=B0)
IGUAL_1=1 IGUAL_0=1
Si (A1>B1) ó [(A1=B1) Y (A0>B0)]
AM_1=1 IGUAL_1=1 AM_0=1
IGUAL= IGUAL_1 · IGUAL_0
AM = AM_1 + (IGUAL_1 · AM_0)
AM
Iguales
A>B
Figura 10.4: Comparador de dos bits hecho con comparadores de un bit (falta el A<B)
10.2.1. Diseño del comparador Ahora tienes que diseñar el comparador. Puedes crearlo en el mismo proyecto. Ya sabes los pasos,esquemáticamente son:
• Crear un símbolo para el comparador de un bit• Crear un nuevo esquemático de nombre compa2 (no lo llames comp2 porque ya existe
ese componente en la biblioteca de Xilinx y puede llevar a error) que contenga undiseño similar al de la figura 10.4, incluyendo el circuito de la señal de salida BM
• Al terminar el diseño, guardarlo y comprobar el circuito• Opcionalmente puedes simularlo• Y para implementarlo, asignarle los pines de entrada y salida, que serán 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: Asignación de señales
Una vez que lo hayas implementado en la FPGA, comprueba en la placa que el circuito funciona bien. Prestaatención al comportamiento de las salidas en función de los cambios en las entradas. Fíjate cómo el bit mássignificativo "manda" sobre el menos significativo.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 52/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 53/94
Departamento de Tecnología Electrónica 11. Comparadores en cascada
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 52
¿Cómo podríamos hacer un comparador para que se pueda conectar en cascada? Simplemente tenemos quequitar el comparador de los bits menos significativos de la figura 11.1 y hacer que lo que eran sus salidassean ahora las entradas del bloque. Esto se muestra en la figura 11.4, compáralo con el de la figura 11.1.
IGUAL_LSB
COMPA2
IGUAL
Entradas de las
comparaciones de los bitsmenos significativos (LSB)
AM
AM_LSB
BM_LSB
A0_MSB
B1_MSB
A1_MSB
B0_MSB
BM
BM
IGUAL
AM
Bits más
significativos:
IGUAL_LSB
COMPA2
IGUAL
Entradas de las
comparaciones de los bitsmenos significativos (LSB)
AM
AM_LSB
BM_LSB
A0_MSB
B1_MSB
A1_MSB
B0_MSB
BM
BM
IGUAL
AM
Bits más
significativos:
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 añadirle el fichero de los comparadores ya hemos creado comp1.sch y comp2.sch Para ello ejecutamos "Proyect → Add 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 nuevosímbolo para compa2. Haz que las señales A0 y A1 estén juntas en la figura del símbolo.
Puede ser que en la configuración de tu navegador de Windows no lo tengas configurado de manera que sepuedan ver las extensiones de los ficheros, y por tanto te sea difícil encontrarlo. Si esto te ocurre, abre unexplorador de archivos de Windows, ejecuta "Herramientas→Opciones de Carpeta ..." y dentro de la ventana quete sale selecciona la pestaña Ver . En ella, casi al final, quítale 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 nuevafuente llamada comp2_cas.sch. En el editor de esquemáticos le añadimos el símbolo del comparador de dosbits, y realizamos el circuito de la figura 11.4. Cuando terminemos, grabamos, y comprobamos elesquemático (Tools→ Check Syntax ) y haz que compruebe jerárquicamente (Tools→ Check Syntax ). Creamos elsímbolo de este esquemático. Ordena los puertos como están en la figura 11.2.
Y ahora crea un nueva fuente llamada comp4_cas.sch, que implementará el comparador de 4 bits mostradoen la figura 11.3. Sin embargo, para este circuito vamos a aprender a usar buses. Un bus es un cable querepresenta un conjunto de cables, y con esto hacemos el esquema del diseño más claro.
Lo primero que haremos es incluir en nuestro diseño dos referencias al comparador de dos bits en cascadaque acabamos de realizar. Encima y debajo de él ponemos dos cables. Al cable de arriba lo llamaremosA(3:0) y el de abajo B(3:0). Recuerda que para nombrar un cable ejecutábamos "Add → Net Name" y teníamosque poner el nombre en la ventaja de opciones. Fíjate que después de poner el nombre el cable se muestramás grueso. La figura 11.5 muestra esta primera parte del diseño.
Figura 11.5: Inicio del diseño con comparadores en cascada y buses
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 54/94
Departamento de Tecnología Electrónica 11. Comparadores en cascada
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 53
Ahora queremos conectar cada una de las líneas de los buses a las entradas del comparador. Para elloempezamos añadiendo un conector al bus con el comando Add → Bus Tap. Al seleccionar éste comando, en laventana de opciones podemos elegir la orientación del terminal triangular. Éste tiene que ir en el lado delbus, así que para el bus A tendrías que seleccionar Top, mientras que para el bus B seleccionarías Bottom. Eldiseño debería 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 cómo se haceesto (con el comando Add → Wire). Y a continuación nombraremos cada cable para así identificar a qué bit delbus se refiere. Los bits individuales del bus se nombran con el nombre del bus y entre paréntesis el índice. Ennuestro caso, para A(3:0) serán A(3), A(2), A(1) y A(0).
Usamos el comando Add → Net Name. Para poner el nombre más cómodamente podemos empezar por el A(0),y seleccionar la opción Increase the name. Con esto, automáticamente después de nombrar a A(0)¸ el nombreque se pondría sería A(1), evitándonos tener que cambiarlo manualmente. La figura 11.7 muestra dónde seseleccionan estas opciones y el esquemático 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.
Increase the name
Increase the name
Nombre
Nombre
Increase the name
Increase the name
Nombre
Nombre
Figura 11.7:Nombre de los cables de los buses
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 55/94
Departamento de Tecnología Electrónica 11. Comparadores en cascada
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 54
Ahora conectamos los buses a los puertos de entrada de nuestro diseño. Esto se hace igual que hemos hechohasta ahora. Como lo conectamos al bus, que ya tiene nombre, el puerto de entrada adquiere el mismonombre que el bus.
Por último, realizamos las interconexiones entre los comparadores, les conectamos los puertos de salida, ylos valores de las entradas, igual que se muestra en la figura 11.3 y en la 11.8.
Figura 11.8:Diseño final del comparador de 4 bits
Guardamos el diseño, comprobamos el esquemático (Tools→ Check Schematic) y la jerarquía(Tools→ Hierarchical Check ).
Si lo deseas, puedes simular el circuito o bien implementarlo directamente.
Asignamos los pines con la herramienta PACE: en la ventana de procesos: "User Constraints→ Assign Package
Pines" . Los 4 interruptores de la derecha serán para el bus A (SW3, SW2, SW1, SW0), los cuatro interruptores dela izquierda para B. Y usaremos los mismo LED que en el comparador anterior.
A(0) SW0 B(0) SW4 IGUAL LD1A(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>" LOC = "P89" ;NET "A<1>" LOC = "P88" ;
Código 11.1: Ejemplo de conexión 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.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 56/94
Departamento de Tecnología Electrónica 12. El multiplexor
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 55
12. El multiplexor El diseño que acabamos de realizar está bien pero ahora nos gustaría que el circuito no sólo indique con losLED qué número es mayor, sino que también nos muestre el número mayor por el display de sietesegmentos.
A partir de ahora se van a dar las especificaciones del sistema que queremos realizar, de modo que sean
suficientes para diseñar el circuito. Posteriormente se darán algunas explicaciones de cómo se puede realizar.Intenta realizar el diseño sin mirar la solución o al menos pensarlo. Luego, si no te sale, o si lo quierescomprobar, consulta la solución.
Habitualmente, la empresa de ingeniería o el ingeniero tiene que realizar el diseño de un sistema a partir deunas especificaciones que le da el cliente o su jefe. No siempre el cliente tiene las cosas claras o sabe explicarlo que quiere. Por tanto, la tarea de realizar las especificaciones dura varias sesiones en las que las dos partesse ponen de acuerdo en las prestaciones del diseño, el coste, el tiempo en que el producto va a estardisponible, ...
12.1. EspecificacionesComparador de dos números de 4 bits. El circuito debe comparar dos números de 4 bits (A y B) que estaráncodificados por medio de los interruptores de la placa. El circuito indicará a través de tres LED el resultadode la comparación:
• Si A>B lucirá el led LD0 de la placa, en otro caso permanecerá apagado• Si A=Bentonces LD1 se encenderá, en otro caso permanecerá apagado• Si A<Bentonces LD2 se encenderá, en otro caso permanecerá apagado
Además, el circuito mostrará por un display de siete segmentos el número mayor. En caso de que sea A elnúmero mayor, lo mostrará por el display de la derecha (AN0), en caso de que A sea menor lo mostrará por eldisplay de la izquierda (AN3), y en caso de que sean iguales se mostrará por los dos displays anteriores (el de laizquierda y el de la derecha: AN0 y AN3).
Los 4 interruptores de la derecha corresponderán con el número 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 corresponderán con el número 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 información se debe diseñar el circuito con bloques e implementarlo en la FPGA. Aunque muchosde los bloques ya estén hechos y no volvamos a repetir cómo se hacen, deberás saber cómo se realizan en
puertas.12.2. Diagrama de bloques del circuitoRealmente el diseño no es mucho más complicado que el comparador de 4 bits anterior, únicamentedebemos añadir la visualización del número mayor por el display de siete segmentos. La comparación de losnúmeros debe seleccionar qué número se mostrará en los displays. Los bloques que realizan un selección sonlos multiplexores. En este caso necesitamos seleccionar entre dos números: A y B, y por lo tanto necesitamosun multiplexor de 2 entradas (y una señal de selección). La señal que va a seleccionar será la que indica siA>B, la que habíamos llamado AM en el comparador de la figura 11.3. El multiplexor de dos entradas de datosy su esquema en puertas se muestra en la figura 12.1.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 57/94
Departamento de Tecnología Electrónica 12. El multiplexor
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 56
1
0
MUX
A
B
S
AM Si AM='1', por la salida S tendremos ASi AM='0', por la salida S tendremos B
A
B
AM
S
1
0
MUX
A
B
S
AM Si AM='1', por la salida S tendremos ASi AM='0', por la salida S tendremos B
A
B
AM
S
Figura 12.1: Multiplexor de dos entradas de datos y una de selección
En nuestro caso las entradas de dato del multiplexor tendrán más de un bit, por lo tanto tendríamos que usaruna variante de este multiplexor con entradas de tipo bus. Por ejemplo, un multiplexor de dos bits serealizaría como muestra la figura 12.2. En la figura se puede observar que se usa un multiplexor de un bit deancho para cada bit y que todos los multiplexores tienen la misma señal de selección.
AM
A(1:0)
0
1
MUX2_2b
S(1:0)
B(1:0)
2
22
equivalente
AM
A(1:0)
0
1
S(1:0)
B(1:0)
2
2
2
A(1)
A(0)
B(1)
B(0)
0
1
A(0)
B(1)
S(1)
S(0)B(0)
A(1)
AM
AM
AM
A(1:0)
0
1
MUX2_2b
S(1:0)
B(1:0)
2
22
AM
A(1:0)
0
1
MUX2_2b
S(1:0)
B(1:0)
22
2222
equivalenteequivalente
AM
A(1:0)
0
1
S(1:0)
B(1:0)
2
2
2
A(1)
A(0)
B(1)
B(0)
0
1
A(0)
B(1)
S(1)
S(0)B(0)
A(1)
AM
AM
AM
A(1:0)
0
1
S(1:0)
B(1:0)
22
22
22
A(1)
A(0)
B(1)
B(0)
0
1
A(0)
B(1)
S(1)
S(0)B(0)
A(1)
AM
AM
Figura 12.2: Multiplexor de dos entradas de datos de dos bits de ancho
Al realizar un diseño, normalmente no hay una única solución para un circuito, sin embargo hay algunasque son más ventajosas que otras. Unas pueden tener menor número de puertas, otras podrán ser más
complicadas o ser más rápidas (tienen menos retardos).Por ejemplo, una opción valida para nuestro diseño sería hacerlo como muestra la figura 12.3. En este diseñose convierten los números A y B a siete segmentos, dichas señales convertidas se han llamado A_7SEG y B_7SEG respectivamente. Estas señales pasan por un multiplexor que las va a seleccionar según el valor de AM (segúnsi A>B). Este valor será el que salga por el display. Por otro lado, se muestran también las señales AN_0 y AN_3,que harán 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) seencenderá cuando A<B (BM='1') ó cuando A=B (IGUAL='1').Fíjate que hay una puerta NOR debido a que lasseñales AN funcionan con lógica negada.
I(3:0)SEG_ASEG_B
SEG_C
SEG_D
HEX7SEG
SEG_E
SEG_F
SEG_G
COMP4
BMIGUAL
AMA(3:0)
B(3:0)
A(3:0)4
1
0
MUX
7
4
AN_0
AN_3
SEG(6:0)
I(3:0)
HEX7SEG
B(3:0)4
SEG(6:0)
7
7
A_7SEG
B_7SEG
I(3:0)SEG_ASEG_B
SEG_C
SEG_D
HEX7SEG
SEG_E
SEG_F
SEG_G
COMP4
BMIGUAL
AMA(3:0)
B(3:0)
A(3:0)4
1
0
MUX
7
4
AN_0
AN_3
SEG(6:0)
I(3:0)
HEX7SEG
B(3:0)4
SEG(6:0)
7
7
A_7SEG
B_7SEG
Figura 12.3: Primera propuesta para el diseño
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 58/94
Departamento de Tecnología Electrónica 12. El multiplexor
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 57
Otra alternativa para realizar el circuito es la mostrada en la figura 12.4. Fíjate que en ella no sólo hay unmenor número de componentes (sólo hay un convertidor de hex a 7 segmentos) sino que además lasentradas del multiplexor utilizado tienen 4 elementos en vez de siete, lo que hace que sea bastante menor.Así que esta alternativa es más sencilla y será la que implementemos. Seguramente haya otras alternativas yalguna de ellas se te ha podido ocurrir a ti.
COMP4
BM
IGUAL
AMA(3:0)
B(3:0)
A(3:0)4
B(3:0)
1
0
MUX
4
4
4
AN_0
AN_3
I(3:0)
HEX7SEG
SEG(6:0)
SEG_A
SEG_B
SEG_C
SEG_D
SEG_E
SEG_F
SEG_G
7
COMP4
BM
IGUAL
AMA(3:0)
B(3:0)
A(3:0)4
B(3:0)
1
0
MUX
4
4
4
AN_0
AN_3
I(3:0)
HEX7SEG
SEG(6:0)
SEG_A
SEG_B
SEG_C
SEG_D
SEG_E
SEG_F
SEG_G
7
Figura 12.4: Alternativa para el diseño
12.3. DiseñoDel circuito de la figura 12.4 ya hemos realizado todos los bloques excepto el multiplexor.
Creamos un nuevo proyecto llamado mux7seg. Ahora vamos a añadir el convertidor de 7 segmentos quehicimos en el ejercicio Y añadimos una copia de la fuente del circuito que hicimos en el ejercicio 7, elconvertidor de hexadecimal a siete segmentos (el proyecto se llamaba hex7seg). Para ello tenemos copiamosy añadimos al proyecto el decodificador y el convertidor:
(Proyect → Add Copy of Source...) y seleccionamos los ficheros decod4a16.sch y hex7seg.sch
Vamos a realizar alguna modificación al convertidor para luego crear un módulo: seleccionamos todas lassalidas AN que habíamos creado y las eliminamos. Pues ahora las vamos a gobernar desde fuera delconvertidor. La señal SEG_DT la podemos dejar. Una vez que lo hayamos hecho, guardamos y comprobamos
el esquemático (Tools→
Check Schematic y también Tools→
Hierachical Check).Si todo sale bien, ahora creamos un símbolo de este diseño: (Tools→ Symbol Wizard ) y seleccionamos elhex7seg. Ordenamos los puertos si no estuviesen ordenados.
A continuación vamos a crear un multiplexor de 2 entradas de dato y una de selección, con 4 bits en cadaentrada de dato. Creamos una nueva fuente llamada mux2_4bit. Podríamos crear el multiplexor con puertascomo se muestra en la figura 12.1 (con la diferencia que ahora cada línea de datos tiene 4 bits) sin embargopara tardar menos vamos a usar los multiplexores de dos entradas de 1 bit que tiene el ISE: ventana desímbolos, selecciona la categoría Mux , y dentro de los símbolos selecciona el m2_1. El multiplexor diseñadodebería quedar parecido a como lo muestra 12.5. Hemos llamado a las entradas D0 y D1, que se refieren aldato que se selecciona cuando SEL vale 0, y cuando SEL vale 1, respectivamente.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 59/94
Departamento de Tecnología Electrónica 12. El multiplexor
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 58
Figura 12.5: Multiplexor de 2 datos de 4 bits cada dato (una señal de selección)
Guarda el diseño, comprueba el esquemático y crea un símbolo de este multiplexor para poder usarlo en eldiseño de más alto nivel: el que va a reunir a todos, como el de la figura 12.4.
Creamos el diseño de más alto nivel de nuestro circuito, que será como el de la figura 12.4. Añadimos nuevafuente llamada mux7seg.sch.
Necesitamos un comparador, o bien usamos el comparador que hemos creado en la práctica 11 (ya sabescómo se importa) o bien podemos usar el comparador de la biblioteca de Xilinx. Si coges el de Xilinx, dentrode la ventana de opciones, en la categoría 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 fácilmente, ya que¿cuándo A y B serán iguales? pues cuando ni A sea mayor que B¸ ni A sea menor que B. Y esto que acabamos
de decir en álgebra de Boole se traduce como: IGUAL = GT ⎯⎯⎯ · LT ⎯⎯⎯ . Otra manera de decirlo es que A y B son
iguales cuando no ocurre que A sea mayor que B, o que A sea menor que B: IGUAL = GT+LT ⎯⎯⎯⎯⎯⎯⎯⎯⎯ . Fíjate que las dosexpresiones son equivalentes por el teorema de De Morgan. Aún así, si te lías, puedes hacer la tabla deverdad.
El diseño final del circuito podría quedarte como lo muestra la figura 12.6. Fíjate que entre otros, también sehan añadido los puertos que van a los LED (AM, BM, IGUAL) Asegúrate que entiendes todo.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 60/94
Departamento de Tecnología Electrónica 12. El multiplexor
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 59
Figura 12.6: Diseño final del circuito
Una vez que lo termines, guarda el diseño, comprueba el esquemático, y asigna los pines. La especificación de los pinesla tenías en el apartado 12.1. Seguramente no salga el PACE y la tengas que hacer editando el UCF. Intenta hacerlo sinmirar, aún así, a continuación 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" ;
Código 2: Contenido del fichero UCF
Finalmente implementa el diseño en la FPGA y comprueba que todo funciona como se ha especificado. Si esasí, enhorabuena, este ha sido un diseño de cierta complejidad.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 61/94
Departamento de Tecnología Electrónica 13. El sumador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 60
13. El sumador En clase se ha explicado el sumador, y en este ejercicio simplemente aplicaremos la teoría para realizarlo. Asíque las especificaciones van a ser muy sencillas. Después de leer las especificaciones puedes intentar hacerlotú sólo o ir al apartado siguiente donde se explica el diseño del sumador.
13.1. EspecificacionesSumador de dos números de 4 bits. El circuito debe sumar dos números sin signo de 4 bits (A y B) que estaráncodificados por medio de los interruptores de la placa. El circuito mostrará en el display de la derecha elresultado de la suma y en caso de que haya desbordamiento encenderá el LED de la izquierda (LD7), ademásencenderá el punto decimal del display cuando haya desbordamiento.
La correspondencia de los interruptores con los números A y B es la misma que la del ejercicio 12 (apartado12.1). Esto es, los cuatro de la derecha se corresponden con la señal A y los cuatro de la izquierda con B.
Además el sumador recibirá el acarreo de entrada por medio del pulsador de la derecha (BTN0).
Opcionalmente también se podrá sacar el resultado codificado en binario por los cuatro LED de la derecha(de LD0 a LD3).
13.2. DiseñoEmpezaremos realizando el diseño de un sumador de 1 bit, para luego ir juntando estos sumadores de unbit. Realizando lo que se llama un sumador en paralelo con acarreo en serie (también llamado en cascada).
Si queremos sumar dos números de un bit, podemos realizar un semisumador (HA: half adder ), con el queobtenemos el resultado de la suma (S) y el acarreo (C). En la figura 13.1 se muestra la tabla de verdad de lasuma y el acarreo, y el circuito que lo implementa. La obtención de este circuito a partir de la tabla de verdadya te debería ser fácil si has estudiado el tema 3: Álgebra de Boole y funciones lógicas.
A B S C0 0 0 00 1 1 01 0 1 0
1 1 0 1
A
B
S
C
HA
A B S C0 0 0 00 1 1 01 0 1 0
1 1 0 1
A B S C0 0 0 00 1 1 01 0 1 0
1 1 0 1
A
B
S
C
HA
A
B
S
C
HA
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 ellarealizamos el circuito de la figura 13.1. Lo guardamos, lo comprobamos (Tools → Check Schematic) y creamosun símbolo (Tools → Symbol Wizard).
Acabamos de realizar un semi-sumador, y se llama así porque no hemos incluido el acarreo de entrada. Alincluir este formamos un sumador completo ( full-adder : FA). En el sumador completo tenemos la señal CI que se corresponde con el acarreo de entrada, y el acarreo de salida se llama ahora CO. La figura 13.2 muestrala tabla de verdad del sumador completo y cómo se forma éste con semisumadores. También se podía haberrealizado resolviendo las ecuaciones lógicas de S y CO mediante mapas de Karnaugh.
A B CI S CO
0 0 0 0 0
0 0 1 1 00 1 0 1 00 1 1 0 1
1 0 0 1 01 0 1 0 11 1 0 0 1
1 1 1 1 1
A
B
HA
S
CO
CI
HAA B CI S CO
0 0 0 0 0
0 0 1 1 00 1 0 1 00 1 1 0 1
1 0 0 1 01 0 1 0 11 1 0 0 1
1 1 1 1 1
A
B
HA
S
CO
CI
HA
A
B
HA
S
CO
CI
HA
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 la13.2, usando los semisumadores que ya hemos realizado, o puedes hacerlo por Karnaugh, como tú prefieras.
Cuando hayas terminado, lo grabas, compruebas el esquemático (Tools→ Check Schematic)
y creas un símbolopara el sumador completo.
Si tienes alguna duda o quieres comprobar el diseño puedes simularlo o implementarlo en la placa (ya sabescómo se hace). Si no continuamos realizando el sumador de 4 bits.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 62/94
Departamento de Tecnología Electrónica 13. El sumador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 61
Una vez que tenemos un sumador completo de 1 bit, la realización de un sumador de 4 bits es bastante fácil.Simplemente tenemos que conectar los acarreos consecutivamente del bit menos significativo al mássignificativo. Y conectar las entradas de A y B en paralelo, en sus sumadores correspondientes. El diseño semuestra en la figura 13.3.
A B
CICO
S
A B
CICO
S
A B
CICO
S
A B
CICO
S
A3 B3 A2 B2 A1 B1 A0 B0
S3 S2 S1 S0
COC0C1C2 CI
bits menos
significativos
(LSB)
bits más
significativos
(MSB)
Acarreo de salida
(o desbordamiento) Acarreo de
entrada a cero
A B
CICO
S
A B
CICO
S
A B
CICO
S
A B
CICO
S
A3 B3 A2 B2 A1 B1 A0 B0
S3 S2 S1 S0
COC0C1C2 CI
A B
CICO
S
A B
CICO
S
A B
CICO
S
A B
CICO
S
A3 B3 A2 B2 A1 B1 A0 B0
S3 S2 S1 S0
COC0C1C2 CI
bits menos
significativos
(LSB)
bits más
significativos
(MSB)
Acarreo de salida
(o desbordamiento) Acarreo de
entrada a cero
Figura 13.3: Sumador de 4 bits a partir de sumadores completos
Para diseñar el sumador de 4 bits creamos una nueva fuente llamada sum4bits.sch. En ella incluimos losbloques FA que acabamos de realizar. Los podemos colocar verticalmente, como muestra la figura 13.4 ó bienrotarlos y voltearlos (rotate & mirror ). Al contrario que como sale en la figura 13.3, el acarreo de entrada CI, lovamos a poner como puerto de entrada (figura 13.4), para así poder conectar varios módulos en cascada, oen nuestro caso introducirlo cuando apretemos el pulsador BTN0.
Figura 13.4: Esquemático del sumador de 4 bits
Guardamos el esquemático y lo comprobamos (Tools→ Check Schematic y Tools→ Hierarchical Check ). Ycreamos un símbolo del diseño (Tools→ Symbol Wizard ) de manera que el orden de los puertos quede comomuestra la figura 13.5.
A(3:0)
B(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
4
A(3:0)
B(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
4
Figura 13.5: Bloque del sumador de 4 bits
Ya tenemos el sumador hecho, aunque todavía nos queda la parte de visualización del resultado. Antes derealizar la parte de la visualización, puedes simular el circuito para comprobar que está bien, o inclusoimplementarlo, haciendo que los cuatro LED de la derecha se correspondan con la salida del sumador (terecomiendo que lo hagas).
Ahora vamos a implementar el circuito completo, incluyendo la parte de visualización. Para esto tenemosque añadir al proyecto el convertidor a siete segmentos que hemos realizado en ejercicio 7 y que luego
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 63/94
Departamento de Tecnología Electrónica 13. El sumador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 62
modificamos en el ejercicio 12. Los pasos para importarlo estaban descritos en el apartado 12.3, pero losrecordamos:
• Añadir una copia de algunas las fuentes de los circuitos que hicimos en el ejercicio12 (el proyecto se llamabamux7seg). Estos son el decodificador de 4 a 16: decod4a16.sch y el bloque que lo contenía, el convertidor a 7segmentos: hex7seg.sch. Para ello ejecutamos el comando Proyect → Add Copy of Source... y seleccionamos losficheros decod4a16.schy hex7seg.sch
• El convertidor vamos a modificarlo un poco, vamos a eliminar el puerto SEG_DT¸ en ese diseño la teníamossiempre a uno, ahora la quitamos completamente. Guardamos el diseño, y comprobamos el esquemático(Tools→ Check Schematic y también Tools→Hierachical Check).
• Por último creamos un símbolo del convertidor (Tools→ Symbol Wizard ) y seleccionamos el hex7seg. Asegúrateque los puertos estén ordenados.
Ahora creamos una nueva fuente llamada top_sumador.sch que va a contener el sumador y el convertidor dehexadecimal a 7 segmentos. La hemos nombrado con el prefijo top para indicar que es el diseño que contieneal resto de componentes del circuito.
Ya deberías poder terminar el diseño tú solo, aún así, a continuación se muestra una implementación posible(figura 13.6). Si no has sabido hacerla por ti mismo intenta entender todo el circuito propuesto.
Figura 13.6: Esquemático del sumador de 4 bits con el convertidor a 7 segmentos
Cuando termines de diseñarlo haz lo de siempre: grabar, comprobar, asignar los pines con PACE o editandoel UCF (puedes copiar y modificar los UCF que has creado en diseños anteriores), y por último, sintetizar eimplementar en la FPGA. En caso de que hayas implementado la versión anterior (la que no mostraba nadapor el display), ten cuidado de no programar la FPGA con el fichero sum4bits.bit, sino que la deberásprogramar con el nuevo fichero: top_sumador.bit.
Al terminar comprueba que funciona bien, fíjate en los LED y en lo que muestra el display y verifica que setrata del mismo número. Comprueba también que la suma está bien, y si funciona el acarreo de entrada: elpulsador de la derecha (BTN0). Y también el acarreo de salida (desbordamiento) que se debería mostrar con elLED de la izquierda y con el punto decimal. Aprovecha también para repasar los conceptos teóricos del tema2 (Sistemas de numeración y codificación): números en binario y cómo se realiza la suma.
Si has logrado realizar este circuito por ti mismo te estás convirtiendo en un buen diseñador de circuitosdigitales.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 64/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 63
14. Sumador/restador Queremos hacer un circuito que reste, para ello podríamos hacer un circuito restador de un bit a partir de latabla de verdad de la resta. Esto se haría de manera similar a como se hace el semi-sumador y el sumadorcompleto (ver figuras 13.1 y 13.2). Y aunque esto es un buen ejercicio que conviene que sepas hacer, en estapráctica vamos a aprovechar los conocimientos de representación numérica que vimos en el tema 2. En aquel
tema vimos que usando el complemento a 2 (Ca2) podíamos realizar una resta sumando. Así que nosahorramos realizar un nuevo bloque restador y lo que haremos será calcular el complemento a dos delsustraendo y sumarlo al minuendo.
14.1. EspecificacionesSumador/restador de dos números de 4 bits. El circuito debe sumar o restar dos números codificados encomplemento a 2 con 4 bits (OPA y OPB) y cuyos valores estarán determinados por la posición de losinterruptores de la placa. El circuito mostrará en el display de la derecha el resultado de la suma o la resta.
Los operandos vendrán 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 loscuatro interruptores de la izquierda (de SW4 a SW7). Recuerda que los números vienen codificados encomplemento a 2.
EL pulsador BTN0 indicará qué operación se realiza. Cuando esté pulsador se hará la resta, mientras quecuando no esté pulsado se efectuará la suma.
El resultado de la operación (suma o resta) se mostrará por el primer display de 7 segmentos. El resultado sedeberá mostrar en el display en signo magnitud (para que lo podamos entender los humanos). Para mostrarel signo negativo se utilizará el punto decimal, es decir, si el punto decimal está luciendo significa que elresultado es el número mostrado pero negativo.
En caso de que haya desbordamiento (overflow) el display mostrará la letra E.
Además los cuatro LED de la derecha (de LD0 a LD3) mostrarán 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 yLD6 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.14.2. Diagrama de bloquesPrimero vamos a realizar el bloque sumador/restador y posteriormente estudiaremos cómo implementamosla parte de la visualización por el display. Esto es común en el diseño de circuitos digitales, cuando unproblema 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 diseños muy grandes, cada parte la realizanpersonas 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 irrealizando cada bloque puede que necesitemos realizar alguna modificación. El esquema mostrado en lafigura 14.1 puede ser un ejemplo de esto. En él hay un bloque que se encarga de realizar las operaciones desuma o resta, y otro bloque de mostrar el resultado de la operación en el display de siete segmentos.
OPB(3:0)
+ , -
SUMADOR/RESTADORRES_SUM
OPA(3:0)
4 4
4
RESUL(3:0)
VISUALIZACION
8 A
G
D
B
C
F
E
C
OV
LEDS
Indica si se
suma o se resta
acarreo
desbordamiento
SUMA: RES_SUM='1'RESTA: RES_SUM='0'
OPB(3:0)
+ , -
SUMADOR/RESTADORRES_SUM
OPA(3:0)
4 4
4
RESUL(3:0)
VISUALIZACION
8 A
G
D
B
C
F
E
A
G
D
B
C
F
E
C
OV
LEDS
Indica si se
suma o se resta
acarreo
desbordamiento
SUMA: RES_SUM='1'RESTA: RES_SUM='0'
Figura 14.1: Esquema inicial del sumador restador con visualización
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 65/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 64
En los siguientes subapartados iremos refinando el diseño.
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 número OPB. Esto se muestra en la figura14.2, en donde tenemos el módulo CA2 que transforma la señal OPB en su complemento a dos. Y tenemos unmultiplexor que selecciona la señal B complementada o no, según si hay que restar o sumar: si RES_SUM=0 seresta, si RES_SUM=1 es suma.
OPA(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
4
0
1
RES_SUM
A(3:0)
B(3:0)
S(3:0)
OPB(3:0) 4
4CA2
Ca2(B)
OPA(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
4
0
1
RES_SUM
A(3:0)
B(3:0)
S(3:0)
OPB(3:0) 4
4CA2
Ca2(B)
Figura 14.2: Esquema inicial del módulo sumador/restador (sin visualización)
Se podría realizar el diseño así, sin embargo los diseñadores digitales han tendido siempre a minimizar elnúmero de bloques y puertas del diseño. En este caso se puede hacer una versión más compacta. Estoocurría sobre todo hace unos años, cuando tenían que hacer el diseño en componentes discretos o condispositivos programables con poco espacio. Ahora esto no es tan crítico, aún así, a continuación veremoscómo hacer el circuito más compacto.
El complemento a dos de un número se realiza complementando cada bit y añadiéndole 1 al resultado. Ypodríamos realizarlo como se muestra en la figura 14.3, utilizando el sumador de cuatro bits para añadir 1.
SUM4BITS
S(3:0)
CO
CI
44A(3:0)
B(3:0)
S(3:0)
OPB(3:0)
VCC
4
complementar
cada bit
Acarreo de entrada = '1' :
sumamos 1
Ca2(B)
El resultado es el
complemento a 2 de BEl otro sumando
vale '0'
también se podía poner el
acarreo de entrada a cero
y poner un uno en A(0)
SUM4BITS
S(3:0)
CO
CI
44A(3:0)
B(3:0)
S(3:0)
OPB(3:0)
VCC
4
complementar
cada bit
Acarreo de entrada = '1' :
sumamos 1
Ca2(B)
El resultado es el
complemento a 2 de BEl otro sumando
vale '0'
también se podía poner el
acarreo de entrada a cero
y poner un uno en A(0)
Figura 14.3: Circuito que calcula el complemento a 2 de un número 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 unlado la figura 14.2 no utiliza el acarreo de entrada CI (está a tierra), mientras que la figura 14.3 no utiliza laentrada A. Así que podemos utilizar el mismo sumador para las dos operaciones. Cuando queramos hacer laresta, por la entrada B del sumador entrará el complemento de cada bit de OPB, y pondremos el acarreo deentrada a 1 (CI='1'). Cuando queramos hacer la suma, por B entrará directamente la señal OPB, y pondremosel acarreo de entrada a 0 (CI='0'). Entonces el circuito quedaría como muestra la figura 14.4.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 66/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 65
OPA(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
4
0
1
RES_SUM
A(3:0)
B(3:0)
S(3:0)
OPB(3:0)4
4
SUMA: RES_SUM='1' → CI='0'RESTA: RES_SUM='0' → CI='1'
OPA(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
4
0
1
RES_SUM
A(3:0)
B(3:0)
S(3:0)
OPB(3:0)4
4
SUMA: RES_SUM='1' → CI='0'RESTA: RES_SUM='0' → CI='1'
Figura 14.4: Otra versión del circuito sumador/restador (sin visualización)
Pero esto todavía no es el circuito final, ya que los inversores y el multiplexor aún se pueden sustituir poralgo más pequeño. Con el multiplexor estamos eligiendo la señal OPB complementada o no según el valor deRES_SUM. Esto es equivalente a utilizar una XNOR, ya que según el valor de una entrada deja pasar la otra talcual o complementada (ver figura 14.5).
0
1
Sel
B
S
Sel B S
0 0 10 1 01 0 01 1 1
Sel=0 → S=B
Sel=1 → S=B
BS
Sel
equivalente a XNOR
0
1
Sel
B
S
Sel B S
0 0 10 1 01 0 01 1 1
Sel=0 → S=B
Sel=1 → S=B
BS
Sel
BS
Sel
equivalente a XNOR
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 teoría. Esto sedebe a que la señal de sumar/restar (RES_SUM) está complementada. En este ejercicio se suma cuandoRES_SUM=1, mientras que en la teoría se suma cuando vale cero. Es por esto que sale una XNOR, ya que laXNOR es equivalente a una XOR con una de las entradas negadas. Esta entrada negada es la señal RES_SUM.En la figura 14.6 se muestra esta equivalencia.
BS
Sel
BS
Sel
equivalente equivalenteB
SSel
BS
Sel
BS
Sel
BS
Sel
BS
Sel
BS
Sel
equivalente equivalenteB
SSel
BS
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 figura14.7.
OPA(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
A(3:0)
B(3:0)
S(3:0)
4
SUMA: RES_SUM='1' → CI='0'
RESTA: RES_SUM='0' → CI='1'
OPB(3)
OPB(2)
OPB(1)
OPB(0)
RES_SUM
OPA(3:0)
SUM4BITS
S(3:0)
CO
CI
4
4
A(3:0)
B(3:0)
S(3:0)
4
SUMA: RES_SUM='1' → CI='0'
RESTA: RES_SUM='0' → CI='1'
OPB(3)
OPB(2)
OPB(1)
OPB(0)
RES_SUM
Figura 14.7: Penúltima versión del circuito sumador/restador (sin visualización)
Bueno, quizás podamos pensar que la figura 14.7 corresponde el diseño definitivo, pero no es así, ya quetenemos 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, eldesbordamiento funciona de manera diferente. ¿Cuándo se desbordaba la suma en complemento a dos?
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 67/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 68/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 67
• Si OV='0' y S(3)='1', significará que tenemos un número negativo, y por lo tanto tendremos que calcular sucomplemento a 2 y encender el punto decimal.
Cuando tenemos condiciones de tipo "Si.... entonces" , éstas se pueden implementar fácilmente con unmultiplexor. En la figura 14.11 se muestra esta "traducción".
7
A
G
D
B
C
F
E
1 0OV
I(3:0)
HEX7SEG
SEG(6:0)
4
1110El nú mero 14
muestra la E
Ca2
1 0S(3)
4
S(3:0)
SEG_DTS(3)
7
A
G
D
B
C
F
E
A
G
D
B
C
F
E
1 0OV
I(3:0)
HEX7SEG
SEG(6:0)
4
1110El nú mero 14
muestra la E
Ca2
1 0S(3)
4
S(3:0)
SEG_DTS(3) SEG_DTS(3)
Figura 14.11: Diagrama de bloques del módulo de visualización
En esta figura ya tenemos hechos los multiplexores y el convertidor a 7 segmentos (HEX7SEG). Nos faltaría porhacer el módulo que se encarga de calcular el complemento a dos de la señal S(3:0), éste ya lo vimos en lafigura 14.3.
Antes de comenzar a diseñar, acuérdate que la representación en complemento a 2 no era simétrica, y portanto, había un número negativo más que positivo. En nuestro ejemplo, para cuatro bits, existe el -8 pero noel +8. Por tanto, si se calcula el complemento a 2 de -8 (S=1000) resulta el mismo número (1000). ¿Quésucedería en este caso? ¿Qué pasa si queremos representar el número -8? Si pones los valores en el circuitopara este caso (ver figura 14.12), obtenemos el -8 en el display a pesar de que el complemento a dos no sepuede calcular. Pero como la representación sale bien, lo realizaremos así.
7
A
G
D
B
C
F
E
1 0OV
I(3:0)
HEX7SEG
SEG(6:0)
4
1110
Ca2
1 0S(3)
4
S(3:0)
SEG_DTS(3)
1
1000
1000 1000
1000
0
0
1000
Se muestra un 8
1 encenderá el punto:
signo −
7
A
G
D
B
C
F
E
A
G
D
B
C
F
E
1 0OV
I(3:0)
HEX7SEG
SEG(6:0)
4
1110
Ca2
1 0S(3)
4
S(3:0)
SEG_DTS(3) SEG_DTS(3)
1
1000
1000 1000
1000
0
0
1000
Se muestra un 8Se muestra un 8
1 encenderá el punto:
signo − Figura 14.12: Diagrama de bloques y valores para cuando el resultado sea -8
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 69/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 68
14.3. DiseñoCreamos un nuevo proyecto llamado addsub. Añadimos una copia 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), añadimos una copia de:
• mux2_4bit.sch Crea un símbolo 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 esquemático para crear el bloque sumador/restador, lo llamamosaddsub.sch y en él implementamos el diseño de la figura 14.7 con el añadido 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 símbolo.
Figura 14.13: Esquemático del sumador/restador de 4 bits
Ahora procederemos a crear el bloque de visualización (recuerda la figura 14.1 y el apartado 14.2.2). Antesde hacer la unidad de visualización, tenemos que crear el bloque que calcula el complemento a dos de unnúmero de 4 bits (mira este bloque en la figura 14.11). Creamos una nueva fuente llamada ca2.sch, y en ellacreamos el diseño de la figura 14.3. En la figura 14.14 se muestra el esquemático de este diseño, de él tendrásque crear un símbolo.
Figura 14.14: Esquemático del circuito Ca2 que calcula el complemento a 2 de un número
Ahora creamos un nuevo fichero para la unidad de visualización, lo vamos a llamar visualiza.sch. En élimplementamos el circuito de la figura 14.11, resultando el esquemático mostrado en la figura 14.15. Al
terminar, comprueba el esquemático y crea un símbolo de este circuito.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 70/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 69
Figura 14.15: Esquemático del circuito Visualiza, que se encarga de mostrar el resultado por el display de siete
segmentos
Y ya sólo falta crear la unidad de más alto nivel llamada top_addsub.sch, que se encargará de unir losbloques sumador/restador y visualiza. El diagrama de bloques se mostró en la figura 14.1 y su realización enel ISE se muestra a continuación (figura 14.16).
Figura 14.16: Esquemático de la unidad de más alto nivel del diseño
En la figura 14.16 están también los puertos AN_0, AN_1, AN_2 y AN_3 que eran con los que se controlaban losdisplays que iban a lucir (en este caso sólo el de la derecha).
Como siempre, una vez que lo hayas terminado, guardas el diseño, lo compruebas, y asignas los pines.Luego lo implementas en la FPGA.
14.4. Comprobación del diseñoBuf, este ha sido un diseño con cierta complejidad, así que ¡enhorabuena si has llegado hasta aquí! De todosmodos, aún no está todo hecho. Ahora hay que comprobar que el diseño funciona bien. Esto además nosvaldrá para repasar los números en complemento a 2, y sus sumas y restas.
Podemos seguir este esquema para comprobar primero que el display representa bien los números, y luegolas operaciones.
• Ponemos todos los interruptores a 0: debe salir un 0 en el display. Ya que estamos haciendo 0-0=0. Todos losLED van a estar apagados excepto LD7, que estará luciendo. Éste es el acarreo de salida, pero como estamosrestando, 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 (señal OPA: de SW0 a SW3) codifican el minuendo si estamosen la resta (BTN0 sin pulsar), así que mantenemos los cuatro interruptores del sustraendo (OPB: de SW4 a SW7) acero, y vamos codificando todos los números de OPA. Así que:
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 71/94
Departamento de Tecnología Electrónica 14. Sumador/restador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 70
• 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 según sea resta o suma. El punto decimal deberá estar apagado, ya que en nuestro sistema, elpunto representa el signo negativo.
• Si SW7=SW6=SW5=SW4=SW3=SW2=SW0='0' y SW1='1'. Estamos codificando OPA="0010"y OPB="0000". Así queestamos 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í queestamos 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' ySW2=SW1=SW0='1'. Estamos codificando OPA="0111" y OPB="0000". Así que estamos haciendo 7-0=7. Portanto el display mostrará un 7, así como los LEDs.
• Ahora toca codificar hacer que OPA="1000" y OPB="0000". Como las entradas están en complemento ados. estamos haciendo -8-0=-8. Por tanto el display mostrará un -8, con el punto decimal encendido, yaque representa el signo negativo.
• Continuamos variando SW0, SW1 y SW2, de modo que consigamos todos los números 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 mantenerOPA="0000" y variaremos OPB.
• Si OPA="0000" y OPB="0001", y no pulsamos BTN0 (BTN0='0'), entonces estamos haciendo 0-1=-1. Y portanto tendremos un -1 en el display (el signo menos lo indica el punto decimal). Los cuatro LED de laderecha lucirán, ya que -1 en complemento a dos es "1111".
• Si pulsamos BTN0¸ se mostrará un +1, ya que estamos haciendo 0+1=1. Los 4 LED de la derecha seapagarán.
• Podemos continuar haciendo esto hasta OPB="0111"¸ entonces estamos haciendo 0-7=-7. Y por tantotendremos un -7 en el display (el signo menos lo indica el punto decimal). En los cuatro LED de laderecha vendrá codificado el número "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. Fíjate que luce LD6, que representa eldesbordamiento de la resta.
• Sin embargo, si pulsamos BTN0, estamos haciendo 0+(-8)=-8, lo que sí se puede representar, y debesalir el 8, con el punto decimal. Fíjate también que se apaga LD6.
• El resto de combinaciones de OPB son representables, por ejemplo, si OPB="1001" entonces estamoshaciendo 0-(-7)=7, que sí se puede representar, y debe salir un 7 en el display, sin punto decimal, y enlos LED de la derecha "0111", y LD6 apagado.
• Pulsando BTN0 obtenemos -7, ya que hacemos 0+(-7)=-7.
•
Ahora prueba cualquier otra combinación de números, entiende qué estas representando y qué operaciónhaces, y comprueba que está bien.
Si, has comprobado que sale todo bien, ¡ya sabes hacer una pequeña calculadora! aunque sea un pocorudimentaria y con sólo dos operaciones.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 72/94
Departamento de Tecnología Electrónica 15. Unidad aritmético lógica
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 71
15. Unidad aritmético lógicaUna unidad aritmético lógica (UAL, pero más conocida como ALU por sus siglas en inglés) es un circuitoque permite realizar operaciones aritméticas y lógicas entre los operandos de las entradas. La ALU sueleconstar de unos bloques que realizan las operaciones aritméticas y lógicas, y de un multiplexor que escogelas salidas de esos bloques según la operación seleccionada.
Muchas de las operaciones aritméticas ya las hemos visto: suma, resta, comparación, ... Y las operacioneslógicas suelen ser aplicar unas operaciones a nivel de bits, por ejemplo, invertir todos los bits, realizar laoperación AND entre cada bit de los operandos. A veces también se incluyen operaciones de desplazamientoy rotación, esto es, los bits de un operando se desplazan o se ruedan. Por ejemplo, si tuviese el operandoOPA="0010" y lo desplazo a la izquierda obtendría "0100".
15.1. EspecificacionesRealizar una unidad aritmético lógica con dos operandos de 4 bits (OPA y OPB) y 4 operaciones.
Los operandos vendrán dados por los interruptores. El operando OPA se codificará mediante los 4interruptores de la derecha (de SW0 a SW3), y el operando OPB con los cuatro interruptores de la izquierda (deSW4 a SW7).
Las operaciones que se realizarán son: suma, multiplicación por 2, mayor y la operación lógica AND. Pararealizar una operación se deben de pulsar uno de los 4 pulsadores:
• BTN0: realiza la suma S=OPA+OPB • BTN1: multiplica por 2 el operando OPA. S=2xOPA • BTN2: devuelve el número mayor entre OPAy OPB • BTN3: aplica la función lógica ANDentre los bits de OPA y OPB
En caso de que se pulsen dos o más pulsadores al mismo tiempo, tendrá prioridad el pulsador que esté mása la derecha en la placa. Por ejemplo si se pulsan BTN1 y BTN3 al mismo tiempo, el resultado será lamultiplicación por 2 (BTN1) y no la función lógica AND.
Para el caso de la operación suma, multiplicación y mayor, se considera que los operandos OPA y OPB estáncodificados en binario puro (sin signo). Para la operación lógica AND, no es necesario considerar ninguna
codificación.El resultado de la operación se mostrará por los cuatro LED de la derecha (de LD0 a LD3), además se mostrarápor el display de la derecha.
Según qué operación se esté realizando LD7 mostrará:
• En la suma: el acarreo de salida• En la multiplicación: el desbordamiento• En la operación "mayor que": se mantendrá apagado• En la operación lógica AND, se mantendrá apagado
Cuando no haya ningún botón pulsado, todos los LED permanecerán apagados, y también el display.
15.2. Diagrama de bloquesComo es un diseño grande, vamos a ir construyéndolo poco a poco.
Primero sabemos que tenemos que realizar cuatro operaciones, por lo tanto necesitaremos un circuito paracada una de las operaciones. Luego veremos cómo implementamos cada una de estas operaciones (algunasya las hemos hecho), pero por ahora los consideramos como bloques. A veces a esto se le llaman cajasnegras: sabemos qué entradas y salidas dan, pero no sabemos que hay en su interior. En la figura 15.1 semuestran estos cuatro bloques que se encargarán 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 sumadory el multiplicador tienen una señal más de salida, la de acarreo de salida para el sumador y la deldesbordamiento overflow para el multiplicador.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 73/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 74/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 75/94
Departamento de Tecnología Electrónica 15. Unidad aritmético lógica
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 74
0
1
OV
CO
OPER(0)
0
1
'0'
'0'
OPER(0) 0
1
OPER(1)
LD70
1
OV
CO
OPER(0)
'0' 0
1
OPER(1)
LD7
0
1
OV
CO
OPER(0)
OPER(1)
LD7
Ya que es '0' en los dos casos
Cuando OPER(1)= '0' → LD7='0'
0
1
OV
CO
OPER(0)
0
1
'0'
'0'
OPER(0) 0
1
OPER(1)
LD70
1
OV
CO
OPER(0)
'0' 0
1
OPER(1)
LD7
0
1
OV
CO
OPER(0)
OPER(1)
LD7
Ya que es '0' en los dos casos
Cuando OPER(1)= '0' → LD7='0'
Figura 15.6: Simplificación del multiplexor para LD7
15.3. DiseñoMuchos de los bloques de la figura 15.5 ya los tenemos hechos, lo que nos permitirá ahorrar tiempo.
Creamos un nuevo proyecto llamado alu. Añadimos una copia (Proyect → Add Copy of Source) de lassiguientes fuentes del ejercicio 13 (el sumador)
•
decod4_16.sch • hex7seg.sch
• ha.sch
• fa.sch
• sum4bits.sch
Y del ejercicio del multiplexor (ejercicio 12), añadimos una copia de:• mux2_4bit.sch
Crea un símbolo del conversor a siete segmentos (hex7seg.sch), el sumador de 4 bits (sum4bits.sch) y elmultiplexor (mux2_4bit.sch). Haz también que las señales tengan un orden razonable (sobre todo en elconvertidor de 7 segmentos). Para obtener el mismo orden que ya as obtenido en otras prácticas puedesseguir los siguientes pasos:
• Abre el hex7seg.sch • Ejecuta Tools→ Symbol Wizard.
• Selecciona Using Schematic : hex7seg y más abajo selecciona Use Reference Symbol, allí pincha en Browse y buscaen el directorio del sumador el fichero hex7seg.sym para que coja el mismo símbolo 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.
También podríamos coger el comparador que hemos realizado en la práctica 11, sin embargo para ésteusaremos el símbolo que proporciona el ISE.
A continuación vamos a ir haciendo cada uno de los bloques que nos faltan de la figura 15.5.
15.3.1. Multiplicador por 2Tenemos que multiplicar el operando OPA por 2. Si te acuerdas del tema 2, (sistemas de numeración ycodificación), la multiplicación por 2 en binario era similar a la multiplicación por 10 en decimal.Simplemente hay que desplazar los números hacia la izquierda. Y en el bit menos significativo se pone uncero. Si hubiese un uno en el bit más significativo habría que indicar que ha habido desbordamiento.
Este circuito por lo tanto es muy sencillo, se muestra en la figura 15.7, en donde también se han incluidovarios ejemplos para demostrar el funcionamiento.
A3 A2 A1 A0
S3 S2 S1 S0
0
OV
Multiplicador x2 Ejemplos:
6: 01102
12: 11002
x2
5: 01012
10: 10102
x2
9: 10012
18:100102
x2
overflowno cabe en 4 bits
A3 A2 A1 A0
S3 S2 S1 S0
0
OV
Multiplicador x2 Ejemplos:
6: 01102
12: 11002
x2
5: 01012
10: 10102
x2
9: 10012
18:1
00102
x2
overflowno cabe en 4 bits
Figura 15.7: Circuito multiplicador por 2
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 76/94
Departamento de Tecnología Electrónica 15. Unidad aritmético lógica
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 75
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 señales ni puertos con distinto nombre, así que tendremos queponer un buffer , como ya hemos hecho alguna vez. Realizamos el circuito con buses, quedando comomuestra la figura 15.8.
Figura 15.8: Esquemático del multiplicador por 2
Guardamos el circuito, lo comprobamos y creamos un símbolo.
15.3.2. Circuito comparador, "mayor"Para este circuito crea una nueva fuente llamada mayor.sch.
Este circuito ya lo deberías saber hacer, ya que es casi igual que el dibujado en las figuras 12.4 y 12.6 (del lapráctica del multiplexor). Así que no lo vamos a explicar mucho, simplemente representaremos elesquemático por si tienes alguna duda. Si no lo tienes muy desordenado, puedes incluso copiar el circuitodel la figura 12.6, y adaptarlo al que tenemos que realizar ahora (esto ya sabes que tiene algún riesgo). Elesquemático se muestra en la figura 15.9.
Figura 15.9: Esquemático del bloque comparador (mayor)
15.3.3. Circuito operación lógica ANDBueno, con este circuito no deberías de tener ningún problema. Simplemente hay que realizar la operaciónlógica 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.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 77/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 78/94
Departamento de Tecnología Electrónica 15. Unidad aritmético lógica
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 77
OPER(1:0)
4
2
R_SUM
R_MULT
R_MAY
R_AND
R(3:0)
4
4
4
4
EN
00
01
10
11
R_MAY
R_AND
4
40
1
R_SUM
R_MULT
4
40
1
0
1 R(3:0)
44
EN
OPER(0)
OPER(0)
OPER(1)Si OPER(1)='1' , entonces OPER(0)
selecciona entre R_MULT y R_SUM
Si OPER(1)='0' , entonces OPER(0)
selecciona entre R_AND y R_MAY
habilitación
OPER(1:0)
4
2
R_SUM
R_MULT
R_MAY
R_AND
R(3:0)
4
4
4
4
EN
00
01
10
11
OPER(1:0)
4
2
R_SUM
R_MULT
R_MAY
R_AND
R(3:0)
4
4
4
4
EN
00
01
10
11
R_MAY
R_AND
4
40
1
0
1
R_SUM
R_MULT
4
40
1
0
1
0
1
0
1 R(3:0)
44
EN
OPER(0)
OPER(0)
OPER(1)Si OPER(1)='1' , entonces OPER(0)
selecciona entre R_MULT y R_SUM
Si OPER(1)='0' , entonces OPER(0)
selecciona entre R_AND y R_MAY
habilitación
Figura 15.12: Señales de selección en los multiplexores pequeños
Así que creamos una nueva fuente llamada mux4d_4b_e.sch (indica que tiene 4 datos, de 4 bits yhabilitación). El esquemático del circuito se muestra a continuación (figura 15.13). Llama a los puertos deentrada con un nombre genérico (D00, D01, D10, D11), para que puedas utilizarlo en otras ocasiones yentender a qué puerto se corresponden ya que si los llamases R_AND, R_MAY,... si lo utilizas en otro diseñono sabrás qué entrada de selección los activa, ni el significado de esos nombres.
Figura 15.13: Esquemático del multiplexor de 4 datos con habilitación
Como siempre, para terminar, guarda el diseño, compruébalo y crea su símbolo poniendo un ordenadecuado a las entradas.
15.3.5. Codificador con prioridad de 4 entradasEl codificador con prioridad ya lo hemos visto en el capítulo 8 y su tabla de verdad se mostró en la figura15.3. Como sabes consta de dos bloques, uno que establece las prioridades de modo que sólo una señalpueda estar activa y otro que codifica.
Puedes, o bien usar el codificador que ya creaste, o crear una nueva fuente llamada codif4a2prior.sch paracrear el codificador de 4 entradas con prioridad y habilitación. En la figura 15.14 se muestra el codificador,en donde también están los puertos de salida EN_OUT y A (Activo).
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 79/94
Departamento de Tecnología Electrónica 15. Unidad aritmético lógica
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 78
Figura 15.14: Esquemático del codificador de 4 entradas con prioridad y habilitación
Guarda el diseño, compruébalo y crea su símbolo poniendo un orden adecuado a las entradas.
15.3.6. Componente de mayor jerarquíaYa tenemos todos los componentes necesarios para implementar el circuito (figura 15.5). Así que vamos acrear el diseño que los integra.
Creamos un fichero llamado top_alu.sch, y realizamos el diseño de la figura 15.5. La solución se muestra acontinuación (figura 15.15). Luego guarda el diseño y compruébalo.
Figura 15.15: Esquemático final de la ALU
15.4. Implementación y comprobaciónYa sólo falta crear el fichero UCF con los puertos, implementar el diseño en la FPGA y comprobar que
funciona bien. Este ha sido un diseño bastante completo.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 80/94
Departamento de Tecnología Electrónica 16. Elementos de memoria
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 79
16. Elementos de memoriaEn esta práctica vamos a usar elementos de memoria, en concreto un biestable activado por flanco. Así queademás necesitaremos una señal de reloj para el biestable. Para ello utilizaremos la señal de reloj de la placaPegasus. Esta señal va a 50MHz, y entra por el pin 77 de la FPGA. Puedes localizar el reloj de la placa a laizquierda de los displays de 7 segmentos, y allí se indica la frecuencia del reloj y el pin que recibe la señal de
reloj. Este primer ejercicio secuencial va a ser muy sencillo.16.1. EspecificacionesDiseñar un circuito que al apretar el pulsador BTN0 encienda LD0 y que cuando se deje de pulsar mantengaencendido el LED. Para apagar el LED debemos de pulsar BTN1.
16.2. DiseñoEste circuito se podría realizar con un latch S-R, pero como no hay latches de este tipo en la biblioteca deXilinx, usaremos un biestable J-K activado por flanco de subida.
Creamos un nuevo proyecto llamado led_on.sch. Y creamos unafuente con el mismo nombre. En la ventana de símbolos escogemosla categoría Flip_Flop, y escogemos el símbolo fjkc. Que se
corresponde con un biestable J-K, con clear asíncrono. La señalclear (CLR) funciona a nivel alto, es decir con un '1' lógico se poneel biestable a cero.
El funcionamiento del biestable J-K ya lo conoces: un uno en laentrada J pone a uno el biestable; un uno en la entrada K lo pone acero; si las dos entradas están a cero se mantiene el valor mientrasque si las dos están a uno, invierte el valor guardado.
Por tanto, el esquemático será como el mostrado en la figura 16.1.
Cuando lo tengas, guarda el diseño para implementarlo.
Figura 16.1: Esquemático del circuito queenciende y apaga el LED
16.3. ImplementaciónCuando los circuitos tienen señal de reloj hay que especificar quién es la señal de reloj y su frecuencia. Paraello ejecutamos el comando "Create Timming Constraints" , que se encuentra en la ventana de procesos, en elapartado "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 pestaña Global . Y donde pone Clock Net Name, debe salir nuestra señal dereloj: Clk.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 81/94
Departamento de Tecnología Electrónica 16. Elementos de memoria
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 80
En ella hay un hueco para poner el periodo. Como nuestro reloj es de 50MHz, su periodo es 1/50MHz = 20ns. Ya que 1MHz= 106 Hz. Y por otro lado: 1 ns = 10-9 ns. Así que en dicho hueco ponemos el número 20, y laherramienta se encarga de poner los nanosegundos y el tiempo que el reloj está a nivel alto (50% pordefecto), lo dejamos como está, guardamos y cerramos el Xilinx Constraints Editor .
Figura 16.3: Especificación 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 hacemoseditándolo a mano.
Al abrir el fichero UCF vemos que ya tiene algo escrito. Esto lo ha escrito el Xilinx Constraints Editor , ya queen el fichero UCF también se guarda la información de la señal de reloj.
Aunque ya sabes cómo se rellena el fichero UCF, ya que hay algunas novedades, a continuación se muestra
cómo 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" ;
Código 16.1: Especificación 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, necesitaríamos mantener eldedo pulsado para que la luz se mantenga encendida. Con este circuito hemos logrado memorizar cuál fuela ú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 yapagado se debería de cambiar el estado en que estaba, pero date cuenta que es prácticamente imposiblepulsar ambas teclas a la vez. Y lo que es más, ten en cuenta que el reloj va a 50MHz (50 millones de ciclos enun segundo), por tanto, si mantienes pulsadas ambas teclas durante un segundo, lo que sucederá es que elLED se apagará y encenderá 25 millones de veces. Nuestros ojos (y nuestro cerebro) no son capaces depercibir este parpadeo y por lo tanto, lo que percibimos es que el LED luce menos (la mitad).
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 82/94
Departamento de Tecnología Electrónica 17. Interruptor con pulsador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 81
17. Interruptor con pulsador En esta práctica queremos hacer una variación del circuito del capítulo anterior. Ahora, en vez de encenderel LED con un pulsador y apagarlo con otro distinto, queremos encenderlo y apagarlo con el mismopulsador de modo que si está encendido lo apaguemos, y si está apagado lo encendamos.
17.1. IdeasSe nos pueden ocurrir varias ideas para implementar el circuito. Antes de seguir leyendo intenta pensarcómo lo harías tú.
17.1.1. Conectando el pulsador a la entrada del biestable TEn 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ásegún como estuviese anteriormente.
Podemos realizar el circuito mostrado en la figura 17.1. Escogemos elbiestable T con señal de clear asíncrono (CLR). Este biestable está en lacategoría Flip_Flop y se llama FTC .
Ponemos el clear a cero para que nunca se active (también se podría haber
puesto conectado con otro pulsador para activarlo a voluntad).
T Q
CLR
FTC
CLK
BTN0 LED0
T Q
CLR
FTC
CLK
BTN0 LED0
Figura 17.1: Primera versión del
circuito
La señal de reloj de la placa se conecta a la señal de reloj del biestable y la entrada T del biestable se conectaal pulsador que queremos que funcione como interruptor.
Prueba a implementar el circuito en la placa. Recuerda del capítulo 16 cómo se define el reloj (figura 16.3) ymira a ver qué sucede....
Si implementas el circuito verás que unas veces funciona y otras veces se queda en el mismo estado, y quedurante 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 más lentos que el reloj de la placa. Este reloj va a 50MHz, por lo tanto, enun 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 soltemosel pulsador, el valor que se fije dependerá en qué valor tenga el biestable en ese preciso instante. Instante quedura menos de una millonésima de segunda (20 ns). Por lo tanto se puede decir que es aleatorio, con lamisma 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 cuandose presiona el pulsador (BTN0='1') , la salida del biestable oscila. Al terminar de pulsar, el biestablepermanecerá en el último valor. En el caso del ejemplo de la figura, el LED se ha quedado apagado.
50 MHz
CLK
LED0-Q
BTN0-T
'1' → cambio en Q
Oscilará hasta que soltemos el pulsador
'0' → Q guarda valor
Valor final depende delestado al soltar el pulsador
50 MHz
CLK
LED0-Q
BTN0-T
'1' → cambio en Q
Oscilará hasta que soltemos el pulsador
'0' → Q guarda valor
Valor final depende delestado 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 TPara evitar que el biestable esté cambiando continuamente de valor mientras se mantiene el pulsadorpresionado, se podría pensar en utilizar la señal del pulsador como reloj, ya que esta señal sólo tiene unflanco de subida. Y es en los flancos de subida cuando pueden cambiar de valor estos biestables. Antes deseguir, puntualizaremos que este ejemplo muestra lo QUE NO SE DEBE HACER, ya que para creardiseños síncronos y seguros, la señal de reloj del circuito es la única que debe entrar en las entradas de
reloj de los biestables. Sólo diseñadores experimentados deberían arriesgarse a realizar circuitos asíncronos.En la figura 17.3 se muestra el circuito que se propone. La entrada T del biestable está siempre a '1', por lotanto, siempre que se reciba un flanco de subida de BTN0 cambiará el valor del biestable.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 83/94
Departamento de Tecnología Electrónica 17. Interruptor con pulsador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 82
T Q
CLR
FTC
BTN0
LED0
Vcc
No se debe poner en la entradade reloj una señal distinta a la
señal de reloj del circuito
Atención:Circuito MAL DISEÑADO
T Q
CLR
FTC
BTN0
LED0
Vcc
T Q
CLR
FTC
BTN0
LED0
Vcc
No se debe poner en la entradade reloj una señal distinta a la
señal de reloj del circuito
Atención:Circuito MAL DISEÑADO
Figura 17.3: Segunda versión del circuito, que no se debe realizar
Si pruebas este circuito en la placa, quizás veas que tiene un comportamiento extraño. De todos modos,aunque funcionase bien, tenemos que buscar otra solución que cumpla las normas de diseño síncrono demanera que sólo la señal de reloj se conecte a las entradas de reloj de los biestables.
17.2. Circuito detector de flancoEn este curso no aprendemos a crear circuitos secuenciales con funcionalidad definida, a excepción debiestables sencillos, registros y contadores. Sin embargo, sí aprendemos a analizarlos e identificar sufuncionalidad.
Así que observa el circuito de la figura 17.4 e intenta descubrir su funcionalidad. Fíjate 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 unsímbolo que indica que son activos por flanco de subida.
B
Clk
FDC
FD
F
BTN0 D QD Q LED0
FTC
T Q
CLR
B
Clk
FDC
FD
F
BTN0
D QD Q LED0
FTC
T Q
CLR
Figura 17.4: Circuito detector de flanco e interruptor
Suponiendo que en el tiempo inicial los tres biestables están a cero (Q='0'), obtén el cronograma de lasseñales B, C, F y LED0 para las entradas mostradas en la figura 17.5.
BTN0
B
C
F
clk
Clk
LED0
BTN0
B
C
F
clk
Clk
LED0 Figura 17.5: Obtén el cronograma de las señales 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 señal F . Este pulso de F hace que el biestable T cambie sólo una vez por cada pulso de BTN0.
Si no sabes cómo obtener el cronograma, puedes simular el circuito, o bien, en el apartado 17.3 se muestra lasolución. Es muy importante que entiendas cómo se obtiene, ya que en el examen suelen caer problemas deeste tipo, normalmente algo más complejos.
Implementa el circuito en la placa. Seguramente veas que funciona correctamente. Sin embargo, si estásusando la placa Basys, puedes apreciar que no funciona del todo bien. Eso es porque al presionar el pulsadorse producen rebotes que forman varios pulsos. La placa Pegasus tiene condensadores en las entradas de lospulsadores para evitar esos rebotes (recuerda la figura de la derecha de la figura 3.1). La placa Basys no lostienes, y para evitar esos rebotes tendrías que poner un contador que elimine los pulsos que se produzcandurante un tiempo después de recibir un pulso, que puede ser de unos 200 ms.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 84/94
Departamento de Tecnología Electrónica 17. Interruptor con pulsador
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 83
17.3. Solución al cronogramaA continuación se muestra la solución al cronograma de la figura 17.4. Fíjate que la señal B es la misma quela señal BTN0 pero retrasada al siguiente flanco de reloj. La señal C es igual que B pero retrasada exactamenteun ciclo de reloj. Y que la señal F sólo será igual a 1 cuando B='1' y C='0', esto sólo ocurrirá después delflanco de reloj de subida de BTN0.
BTN0
B
C
F
clk
Clk
LED0
BTN0
B
C
F
clk
Clk
LED0
Figura 17.6: Solución al cronograma de las señales para el circuito de la figura 17.4
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 85/94
Departamento de Tecnología Electrónica 18. Parpadeo de un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 84
18. Parpadeo de un LEDAhora vamos a hacer que un LED parpadee (se encienda y se apague intermitentemente) él solo. Así desimple.
18.1. Especificaciones
Hacer que LD0 parpadee a una frecuencia de dos segundos. Esto es, permanecerá encendido durante unsegundo y apagado durante el segundo siguiente, y así sucesivamente. La frecuencia del reloj de la placa esde 50MHz.
18.2. DiseñoLo que tenemos que hacer es un divisor de frecuencia y esto se hace con contadores. El reloj de la placaPegasus va a 50MHz. Como 1MHz = 106 Hz entonces el reloj tiene 50 millones de ciclos en un segundo.Nosotros queremos obtener una señal que vaya a 1 Hz, esto es, que tenga un periodo de un segundo. Estaseñal será la que hará cambiar cada segundo el valor del LED, por lo que el LED tendrá una frecuencia de 0,5Hz (2 segundos de periodo).
El esquema de lo que queremos hacer se muestra en la figura 18.1: tenemos una señal de reloj que realiza 50millones 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 sólo ciclo dereloj su salida a uno, y el resto del tiempo a cero. Pasado otro segundo (después de volver a contar otros 50millones), volverá a poner la salida a uno. Esta salida, irá a un biestable T que cambiará de estado cadasegundo (cada vez que se termina la cuenta) y por tanto apagará o encenderá el LED cada segundo, que esnuestro objetivo. Evidentemente, la señales de entrada y salida no están a escala.
DivFrec
Clk1HzClk
Clear
T=1 s
1 Hz50 Mz
T=20 ns
T=20 nsBiestable T
Q
Clk
T LED
Cada segundo le
llega un '1' y
entonces cambiará
de estado (se
encenderá y apagará)
(no está a escala)
DivFrec
Clk1HzClk
Clear
T=1 s
1 Hz50 Mz
T=20 ns
T=20 nsBiestable T
Q
Clk
T LED
Cada segundo le
llega un '1' y
entonces cambiará
de estado (se
encenderá y apagará)
(no está a escala)
Figura 18.1: Esquema del circuito
Contar 50 millones puede parecernos demasiado, pero lo podemos hacer poco a poco. Primero vamos acontar 5, para dejar los 20 ns del reloj en un número redondo. Ya que si contamos 5 ciclos de 20ns,obtendremos una señal con periodo de 100ns.
conta5
CONT5
Clk
CLEAR
50 MHz
Tsalida=100ns
0 1 2 3 4 0 14
10 MHz
CLK
T100NS
T e n t r a d
a = 2 0
n s
2 3 4 1 2 3 40 0
5x20ns
CE'1'
CLK
T100NS
50MHz 10MHz
conta5
CONT5
Clk
CLEAR
50 MHz
Tsalida=100ns
0 1 2 3 4 0 14
10 MHz
CLK
T100NS
T e n t r a d
a = 2 0
n s
2 3 4 1 2 3 40 0
5x20ns
CE'1'
CLK
T100NS
50MHz 10MHz
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, eñes,tildes, ..... Dentro del proyecto creamos una nueva fuente para realizar este contador llamada conta5.sch.Dentro de la ventana de símbolos, vamos a la categoría de contadores (counter ) y allí escogemos el contadorcb4cle. Esto es un Contador Binario de 4 bits, con Clear asíncrono, carga paralelo de dato ( Load) yhabilitación ( Enable). Fíjate que se han marcado en mayúsculas y negrita las letras que hacen formar elnombre del contador.
Cómo hacer para contar 5 ciclos de reloj. La figura 18.3 muestra el esquemático. 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
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 86/94
Departamento de Tecnología Electrónica 18. Parpadeo de un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 85
que el count enable (CE) está siempre a uno. Por otro lado hay una señal de carga de dato (L: Load), esta señalse pone a uno cuando la salida Q2 está a uno. Esto ocurre cuando se llega a 4, pues en el resto de los casos (de0 a 3) la salida Q2 permanece a cero. La secuencia de la cuenta se muestra en la figura 18.5.
Figura 18.3: Esquemático del contador de cincociclos de reloj
Figura 18.4: Otra versión del esquemático del contador decinco ciclos de reloj (más genérica)
Como se ve en la figura 18.2, al llegar a 4debemos de inicializar el contador. La puesta acero la haremos siempre síncrona. Y por tanto,activaremos la señal de carga L para introducirun cero (inicializar síncronamente) en elcontador. Aunque existe un CLEAR asíncrono queinicializa el contador, por ser asíncrono, nosotrosno lo usaremos para contar (sí lo podríamosutilizar para inicializar el circuito, al arrancar laprimera vez, por ejemplo, pero no para contar).
Q3 Q2 Q1 Q0 Cuenta0 0 0 0 00 0 0 1 10 0 1 0 20 0 1 1 30 1 0 0 40 0 0 0 00 0 0 1 10 0 1 0 20 0 1 1 30 1 0 0 40 0 0 0 0
0 0 0 1 1.....
Iniciar la cuenta
Iniciar la cuenta
cuando Q2=1 entonces
hacemos CONT5=1
Q3 Q2 Q1 Q0 Cuenta0 0 0 0 00 0 0 1 10 0 1 0 20 0 1 1 30 1 0 0 40 0 0 0 00 0 0 1 10 0 1 0 20 0 1 1 30 1 0 0 40 0 0 0 00 0 0 1 1.....
Iniciar la cuenta
Iniciar la cuenta
cuando Q2=1 entonces
hacemos CONT5=1
Figura 18.5: Secuencia del contador
En la figura 18.4 se muestra un contador de 5 más genérico que el de la figura 18.3, ya que la entrada CE noestá 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 diseño, guárdalo y crea un símbolo. Es bastante recomendable que lo simules para queveas el funcionamiento del contador.
Ahora, a la salida de conta5 tenemos una señal de 10MHz (100ns). Utilizaremos esta señal, y contaremos 10ciclos de esta señal. A la salida de nuestro nuevo contador tendremos una señal de 1MHz (1000ns=1µs).
El esquema que queremos realizar se muestra a continuación.
conta5
T100NS
Clk
CLEAR
conta10
T1USClk
CLEAR
f=50MHz
T=20ns
Clk
f=10MHz
T=100ns
CECE‘1’
Aquí contamos
ciclos de T100NS
no de reloj, y por esoes la entrada de CE
T100NS
f=1MHz
T=1µs=1000ns
T1US
Hemos conseguido
divididir la frecuencia
por 50=5x10
Divisor de frecuencia x5 Divisor de frecuencia x10
conta5
T100NS
Clk
CLEAR
conta10
T1USClk
CLEAR
f=50MHz
T=20ns
Clk
f=10MHz
T=100ns
CECE‘1’
Aquí contamos
ciclos de T100NS
no de reloj, y por esoes la entrada de CE
T100NS
f=1MHz
T=1µs=1000ns
T1US
Hemos conseguido
divididir la frecuencia
por 50=5x10
Divisor de frecuencia x5 Divisor de frecuencia x10 Figura 18.6: Dos contadores en cascada para dividir la frecuencia por 10
Ahora la situación es distinta, ya que antes teníamos 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 inicialización delcontador se realiza cuando la cuenta sea 9 y además la entrada CE sea uno. Si no se esperase a que CE=1,entonces la cuenta de 9 duraría tan sólo un ciclo de reloj. En la figura 18.7 se muestra este cronograma.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 87/94
Departamento de Tecnología Electrónica 18. Parpadeo de un LED
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 86
50 MHz
10 MHz
CLK
T100NS
0 1 2 3 4 0 14 2 3 4 1 2 3 40 0 1 2 3 4 0 1 2 3 4 1 2 3 40 0
9 0 1 2 3 4 5 6
1 2 3 4 0 1 2 3 4 1 2 3 40 0
7 8
1 2 3 4 0 1 2 3 4 1 2 3 40 0
8 9 0
1 MHz
T1US
Se inicializa cuando la
cuenta sea 9 y CE=1
50 MHz
10 MHz
CLK
T100NS
0 1 2 3 4 0 14 2 3 4 1 2 3 40 0 1 2 3 4 0 1 2 3 4 1 2 3 40 01 2 3 4 0 1 2 3 4 1 2 3 40 0
9 0 1 2 3 4 5 6
1 2 3 4 0 1 2 3 4 1 2 3 40 01 2 3 4 0 1 2 3 4 1 2 3 40 0
7 8
1 2 3 4 0 1 2 3 4 1 2 3 40 01 2 3 4 0 1 2 3 4 1 2 3 40 0
8 9 0
1 MHz
T1US
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 ladiferencia que la entrada CE no la ponemos a uno, ya que irá conectada a la salida del contador de 5.Además, ahora el fin de cuenta se determinará al llegar a 9 y no a 4, e incluye la señal CE para que espere a lasiguiente orden de cuenta para cambiar de valor.
Figura 18.8: Esquemático del contador de 10
Al terminar, guardamos el diseño, lo comprobamos y creamos su símbolo. Igualmente sería conveniente
simularlo.Si conectamos estos dos bloques como se muestra en la figura 18.6 tendremos la señal T1US cuya frecuenciaes de 1MHz. Todavía tenemos que dividir la frecuencia entre un millón (10 6), para lograr la frecuencia de 1Hz (1 ciclo por segundo).
Aunque hay maneras más eficientes para realizarlo, ahora simplemente conectaremos en cascada 6 divisoresde frecuencia como el de la figura 18.8. Y en el último conectamos un biestable T para que encienda y apagueel LED. Por ejemplo, podíamos haber creado un divisor por 1000 y haber conectado dos de ellos, en vez deusar estos seis.
Creamos una nueva fuente que será la que contenga los contadores que acabamos de crear, la llamaremosblink.sch (blink significa parpadeo en inglés) El diseño se muestra en la figura 18.9.
Figura 18.9: Esquemático del diseño del parpadeo de un LED
Ahora, implementa el circuito y comprueba con un reloj que más o menos funciona bien. Ten en cuenta quedurante un segundo el LED deberá estar luciendo y en el siguiente segundo estará apagado.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 88/94
Departamento de Tecnología Electrónica 19. Reloj digital
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 87
19. Reloj digitalAhora vamos a hacer un pequeño reloj digital. Lo haremos con segundos y minutos, ya que si lo hacemoscon minutos y horas no nos va a dar tiempo para comprobarlo en clase.
Esta práctica constará de dos partes, primero haremos un segundero de 0 a 9, con el que usaremos solamenteun 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 seencienda. Por tanto, tendrá un periodo de un segundo.
• La segunda parte será hacer un reloj, los dos displays de la derecha se mostrarán los 60 segundos de unminuto: irá por tanto de 0 a 59. Los dos displays de la derecha mostrarán los 60 minutos de una hora. Portanto, también irá de 0 a 59. Además, el punto decimal del medio parpadeará cada segundo. Esto es, que enun segundo se apague y se encienda. Por tanto, tendrá un periodo de un segundo.
19.2. Contador de 10 segundosPara 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 práctica anterior conta5.sch, conta10.sch y de la práctica delsumador (o cualquier otra que lo use) coge las fuentes decod4_16.sch y hex7seg.sch. Ya sabes cómo se hacer,recuerda usar la instrucción Project → Add Copy of Source para que se copie en tu proyecto y no modifique loque 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 señales de frecuencias 1 segundo y mediosegundo (esta última, para el parpadeo del punto del display). Luego, un bloque que contará diez cuentas dela señal del segundero. Este bloque en realidad lo haremos en el propio bloque de mayor jerarquía.
segundero
T500MS
Clk
CE
T1SCLEAR
contador10
7
A
G
D
B
C
F
E
I0I1
I2
I3
HEX7SEG
SEG(6:0)
Q0Q1
Q2
Q3
Clk
CLEAR
Vcc
CE
segundero
T500MS
Clk
CE
T1SCLEAR
contador10
7
A
G
D
B
C
F
E
A
G
D
B
C
F
E
I0I1
I2
I3
HEX7SEG
SEG(6:0)
Q0Q1
Q2
Q3
Clk
CLEAR
Vcc
CE
Figura 19.1: Diagrama de bloques inicial
19.2.1. Bloque segunderoPara hacer este bloque usaremos parte de lo que hicimos en la práctica anterior. Copia el fichero blink.sch del anterior proyecto y cópialo en el directorio de tu nuevo proyecto, y cámbialo de nombre: segundero.sch.
Y añádelo al proyecto: Project →
Add Source (no hace falta que sea copia porque ya lo hemos copiadonosotros).
Abre el esquemático segundero.sch y vamos a modificarlo. Lo que vamos a hacer es un bloque que nosdevuelva una señal de periodo un segundo y otro de medio segundo. ¿Cómo lo harías? intenta hacerlo tú, oal menos pensarlo un poco.
Realmente, lo que queremos hacer es un divisor de frecuencia con dos salidas, una que divide 50 millones deveces y otra 25. Con esta información deberías poder hacerlo tú sólo.
Para hacerlo, podríamos 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 tendríamos cuentas de mediosegundo (periodo T=500ms=0,5s). La figura 19.2 muestra cómo se haría este circuito.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 89/94
Departamento de Tecnología Electrónica 19. Reloj digital
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 88
conta5
T500MS
Clk
CLEAR
conta2
T1SClk
CLEAR
Clk
f=2Hz
T=500ms
CECE
T500MS
f=1Hz
T=1000ms=1s
T1S
Divisor de frecuencia x5 Divisor de frecuencia x2
T100MS
f=10Hz
T=100ms
T1ST500MS
Salida de medio segundoSalida de un segundoEntrada de 100 ms
conta5
T500MS
Clk
CLEAR
conta2
T1SClk
CLEAR
Clk
f=2Hz
T=500ms
CECE
T500MS
f=1Hz
T=1000ms=1s
T1S
Divisor de frecuencia x5 Divisor de frecuencia x2
T100MS
f=10Hz
T=100ms
T1ST500MS
Salida de medio segundoSalida de un segundoEntrada de 100 ms
Figura 19.2: Esquema para obtener una señal de medio segundo y de un segundo.
Otra alternativa es hacerlo con un único contador de 10, pero detectando cuándo llega a cinco. La cuenta demedio segundo se activará cuando el contador valga 4 (de 0 a 5) o cuando el contador valga 9. En amboscasos hay que incluir la condición que la CE='1' (en este caso la señal CE es la señal T100ms. La figura 19.3 muestra esta otra alternativa.
Figura 19.3: Alternativa al circuito que obtiene una señal de un segundo y otra de medio segundo
Esta alternativa tiene varios puntos interesantes: por un lado utilizamos sólo un contador. Pero lo másimportante que hay que tener en cuenta es lo relativo a la señal que detecta el 4 en binario. En este caso hayque detectar los unos y los ceros porque como la cuenta no termina en cuatro, los números 5, 6 y 7 tambiéntienen que Q2='1'.
Otro aspecto interesante es que la señal de periodo medio segundo (T500MS) se forma con la OR de las señalesque identifican la cuenta de 4 y 9. Por último, no olvides incluir la señal CE en las detecciones, porque si no, laseñal no duraría un sólo 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.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 90/94
Departamento de Tecnología Electrónica 19. Reloj digital
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 89
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 01107: 0111
8: 10009: 10010: 0000
1: 0001
.. ....
Cuenta
El único que tieneQ3='1' y Q0='1'
No es el únicoque tiene Q2='1'
Q2='1'
Detectar 9 (fin de cuenta)basta con detectar los '1':
T1S
Q0
Q3
Detectar 4 (no es fin de cuenta)Hay que detectar los '1' y los '0':
CE
Q0
Q2
CE
Q1
Q3
Esta señal tiene periodode un segundo también,por lo que hay que hacer
la OR con la de lacuenta de 9
T500MS
Esta señal tieneperiodo de
medio segundo.No olvidar el CE
(en este caso es T100MS)
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 01107: 0111
8: 10009: 10010: 0000
1: 0001
.. ....
Cuenta
El único que tieneQ3='1' y Q0='1'
No es el únicoque tiene Q2='1'
Q2='1'
Detectar 9 (fin de cuenta)basta con detectar los '1':
T1S
Q0
Q3
Detectar 4 (no es fin de cuenta)Hay que detectar los '1' y los '0':
CE
Q0
Q2
CE
Q1
Q3
Esta señal tiene periodode un segundo también,por lo que hay que hacer
la OR con la de lacuenta de 9
T500MS
Esta señal tieneperiodo de
medio segundo.No olvidar el CE
(en este caso es T100MS) Figura 19.4: Detección del 4 en una cuenta de 0 a 9, y generación de la señal de periodo de 500ms
Independientemente de qué alternativa hayasescogido para hacer el circuito, crea un símbolo del
circuito que debe tener las entradas y salidasmostradas en la figura 19.5. Para que lo podamosusar en los siguientes esquemáticos.
segundero
T500MS
Clk
CE
T1SCLEAR
las entradas asíncronasse suelen dibujar debajo
segundero
T500MS
Clk
CE
T1SCLEAR
las entradas asíncronasse suelen dibujar debajo
Figura 19.5: Bloque del segundero
19.2.2. Bloque de mayor jerarquíaEste bloque contendrá los bloques de la figura 19.1. Creamos una nueva fuente llamada displ_segund.sch.En realidad este bloque lo deberías saber hacer sólo. Así que simplemente en la figura 19.6 se muestra unaposible solución. Asegúrate que si copias la solución, la entiendes (si no, no vale de nada).
Figura 19.6: Esquemático del circuito que muestra las unidades de segundo
19.3. Reloj digital con segundos y minutos
Este diseño es algo más complejo, no por contar los segundos y minutos, que si has entendido el ejercicioanterior no te será difícil, sino por el manejo de los cuatro displays de siete segmentos.
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 91/94
Departamento de Tecnología Electrónica 19. Reloj digital
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 90
Quizás te hayas fijado que sólo hay una letra de cada segmento para los cuatro displays, es decir, sólo hayuna A, B, C,..., G para los cuatro. Y luego hay una señal de control AN para cada segmento. Así que, ¿cómopodríamos mostrar números 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 cadaparte a un display. Así, en un ciclo va a estar encendido el primer display con un número determinado, y en elsiguiente ciclo, el siguiente display con otro número. Y así los cuatro, al final, cada display lucirá sólo un
cuarto de tiempo (así que lucirán con menos intensidad), pero lo hará tan rápido que nuestro ojo no notaráque gran parte del tiempo no está luciendo.
Lo que queremos generar se muestra en la figura 19.7.
4 x 1 ms
0 1 3 0 1 2 3
T1ms
CUENTA4MS
AN_0
T=1 ms
2
AN_1
AN_2
AN_3
US DS DMNumDispl UM US DS DMUM
DM UM DS US
Minutos
decenas unidades
Segundos
decenas unidades
Según el valor de CUENTA4MSse selecciona las unidades o
decenas de minutos o segundos
AN_3 AN_2 AN_1 AN_0
4 x 1 ms
0 1 3 0 1 2 3
T1ms
CUENTA4MS
AN_0
T=1 ms
2
AN_1
AN_2
AN_3
US DS DMNumDispl UM US DS DMUM
DM UM DS US
Minutos
decenas unidades
Segundos
decenas unidades
Según el valor de CUENTA4MSse selecciona las unidades o
decenas de minutos o segundos
AN_3 AN_2 AN_1 AN_0
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 loscuatro displays. Esto se hace así para ahorrar pines de la FPGA. Haz cuentas: 7 segmentos más el punto
decimal por 4 displays son 32 pines. Estos son muchos pines, nuestra FPGA tiene 208 pines, pero no todos sonutilizables como entradas/salidas. Por lo que estaríamos desperdiciando un alto porcentaje de los pinesdisponibles para algo que en realidad no es necesario. Con esta alternativa se usan 8 pines (más las 4 señalesde encendido: AN_0,..., pero éstas se tienen que añadir también a los 32 pines de antes).
Y ahora, ¿se te ocurre cómo hacer el circuito que implementa el reloj? ¿cómo generar las señales AN_0,...,AN_3 y NumDispl de la figura 19.7?
Intenta pensarlo antes de mirar la solución ya que todos los conceptos necesarios para implementarlos sehan visto ya.
19.3.1. ImplementaciónVarias cosas fundamentales tenemos que hacer en este diseño:
Tenemos que ampliar el bloque segundero (recuerda lasfiguras 19.2 y 19.3) de modo que saque una salida adicionalde periodo 1 ms. Para esto simplemente tienes que sacar laseñal de periodo 1 ms como salida. Esto es, hacer un bloquecomo muestra la figura 19.8
Luego, utilizaremos la señal de 1 ms (T1MS) para contar cuatrocuentas de 1 ms. Obteniendo la señal CUENTA4MS (figura 19.7), queirá de 0 a 3, esto es, de 00 a 11.
segundero
T500MS
Clk
CE
T1SCLEAR
T1MSsegundero
T500MS
Clk
CE
T1SCLEAR
T1MS
Figura 19.8: Nueva versión del segundero
Posteriormente ampliar el reloj que hemos hecho en el apartado 19.2. Lo ampliamos para que cuentedecenas de segundo (DS), unidades de minuto (US) y decenas de minuto (DM).
Luego queremos según en qué cuenta estemos de la señal CUENTA1MS se seleccione las unidades o decenas
de minutos o segundos. Por ejemplo, si CUENTA1MS=00 entonces queremos que por el display entren lasunidades de segundo (US), y así para el resto según se muestra en la figura 19.7. Ya hemos visto cómo serealiza esto: para seleccionar se utilizan los multiplexores (recuerda el capítulo 12). En este caso es de 4
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 92/94
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 93/94
Departamento de Tecnología Electrónica 19. Reloj digital
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 92
Figura 19.11: Decodificación del control de los displays
En la figura 19.12 se muestra la cuenta de segundos y minutos. Esta cuenta la deberías de saber hacer tú sólo.Es muy importante ya que es algo básico que además suele caer en los exámenes.
Figura 19.12: Contador de segundos y minutos
Por último, en la figura 19.13 se muestra el multiplexor que selecciona qué dígito se va a mostrar según quésegmento está activado. Fíjate que el multiplexor no lo hemos hecho. En el capítulo 12 hicimos unmultiplexor de dos datos y un bit de señal de selección. Ahora son 4 entradas de datos (figura 19.9).
5/10/2018 pract_xilinx92 - slidepdf.com
http://slidepdf.com/reader/full/practxilinx92 94/94
Departamento de Tecnología Electrónica 19. Reloj digital
Diseño digital con esquemáticos y FPGA. v1.8 - 04/06/2008 93
Figura 19.13: Multiplexor para la selección del dígito a mostrar por los displays