Você está na página 1de 25

Diseo digital con VHDL

Circuitos combinacionales

Felipe Machado Snchez


Susana Borromeo

Curso 2014/2015

rea de Tecnologa Electrnica

ndice
ndice .......................................................................................................................................... 2
1.Introduccin ............................................................................................................................. 3
2.Vivado Design Suite WebPACK Edition y NexysTM4 de Digilent. ................................................ 4
2.1. Tutorial de Vivado ................................................................................................................................................................... 8
2.2. Conclusin ............................................................................................................................................................................... 11
3. Sentencias concurrentes ........................................................................................................ 13
3.1. Diseo de un multiplexor .................................................................................................................................................. 13
3.1.1. Diseo usando puertas lgicas ...................................................................................................................................... 13
3.1.2. Diseo usando varias sentencias concurrentes ...................................................................................................... 14
3.1.3. Uso de sentencias condicionales ................................................................................................................................... 14
3.1.4. Uso de procesos ..................................................................................................................................................................... 14
3.2. Diseo de un multiplexor de 4 alternativas .............................................................................................................. 15
3.3. Diseo de un multiplexor de 4 bits de dato y dos alternativas ......................................................................... 16
3.4. Conclusiones ........................................................................................................................................................................... 16
4. Codificadores, decodificadores, convertidores de cdigo ....................................................... 18
4.1. Convertidor de binario a 7 segmentos ........................................................................................................................ 18
4.2. Decodificador de 2 a 4 ........................................................................................................................................................ 20
4.3. Codificador de 8 a 3 ............................................................................................................................................................. 21
4.4. Conclusiones ........................................................................................................................................................................... 23
Referencias ............................................................................................................................... 25

Diseo digital con VHDL

rea de Tecnologa Electrnica

1.Introduccin
Este manual es una gua prctica para aprender a disear circuitos digitales mediante el uso de VHDL y
dispositivos lgicos programables (CPLD o FPGA). Este manual se ha desarrollado en el Departamento de
Tecnologa Electrnica de la Universidad Rey Juan Carlos para la asignatura Diseo de Sistemas Electrnicos
(DSE) del Grado en Ingeniera de Tecnologas Industriales. Previamente, los alumnos de este grado han
cursado la asignatura Sistemas Electrnicos Digitales (SED). En SED los alumnos adquirieron los conceptos
bsicos de la electrnica digital. Para seguir este manual con una mayor comprensin se recomienda tener
conceptos bsicos de los sistemas de numeracin y electrnica digital: diseo con puertas lgicas, bloques
combinacionales, elementos de memoria, registros y contadores. Realizar las prcticas del libro Problemas
Resueltos de Electrnica Digital [1] es una buena base para seguir este manual.
En este manual aprenderemos a disear circuitos digitales mediante VHDL y el uso de dispositivos lgicos
programables. El VHDL es un lenguaje de descripcin de hardware que permite modelar y disear
circuitos electrnicos digitales. Se pueden disear circuitos electrnicos digitales sin utilizar lenguajes de
descripcin de hardware. Por ejemplo, usando esquemticos podemos disear un circuito electrnico digital
[2]. Disear mediante esquemticos es una manera ms intuitiva y menos abstracta de disear, y por esto
creemos que es la forma ms recomendable para aprender a disear. Si no tenemos unas bases slidas en el
diseo con esquemticos, al disear con VHDL podemos perder la nocin de lo que estamos haciendo y
pensar que estamos usando un lenguaje de programacin habitual (C, Pascal, ...). No tener una idea
aproximada del hardware (esquemtico) que se genera a partir del cdigo VHDL es una de las limitaciones
ms grandes que podemos tener como diseadores.
Sin embargo, una vez que sabemos disear con esquemticos, los lenguajes de descripcin de hardware nos
facilitan el diseo ya que, entre otros beneficios, nos proporcionan:

Un nivel de abstraccin mayor, ahorrndonos muchos detalles de la implementacin.

Una mayor facilidad para la reutilizacin y hacer modificaciones

Una mayor capacidad para manejar para manejar circuitos grandes

Posibilidad de realizar bancos de pruebas ms complejos para simular la funcionalidad de nuestro


diseo.
El VHDL es un estndar del Instituto de Ingenieros Elctricos y Electrnicos [3]. Existen otros lenguajes de
descripcin de hardware como el Verilog o el SystemC. Histricamente, el uso de VHDL o Verilog ha
dividido a la comunidad de diseadores, lo que ha provocado dificultades en el intercambio de diseos y a
las empresas que fabrican herramientas informticas de ayuda al diseo (CAD).
El VHDL es un lenguaje muy amplio que fue creado para modelar circuitos [4]. Ms tarde se empez a
utilizar para disear circuitos, utilizando para ello slo un conjunto reducido del VHDL, lo que se llama
VHDL para sntesis [5]. La transformacin de un circuito descrito en VHDL a su esquema en puertas lgicas
y biestables se llama sntesis. Esta sntesis la realizan automticamente las herramientas CAD, gracias a esto
los diseadores ahorran mucho tiempo de diseo. En este manual no aprenderemos a utilizar la totalidad del
VHDL, sino que usaremos un conjunto restringido del lenguaje orientado a sntesis. Lo que es ms, tampoco
usaremos todo el conjunto de VHDL para sntesis, sino que utilizaremos lo que vayamos necesitando. Por
suerte o por desgracia, en VHDL una cosa se puede describir de muchas maneras distintas. Por lo general, en
este manual aprenderemos slo una de ellas.
Este manual se basa en el publicado por los autores Diseo de circuitos digitales con VHDL [6], que para
que pudiera llegar al mayor nmero de personas y con el objetivo de generar material educativo abierto, se
public bajo licencia Creative Commons [7] que permite copiarlo y distribuirlo. Esperamos que disfrutes de su
lectura y que te ayude a aprender a disear circuitos electrnicos digitales. Para ir mejorando el manual,
agradeceremos la comunicacin de comentarios, sugerencias y correcciones a las direccin de correo
electrnico susana.borromeo@urjc.es.

Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

2.Vivado Design Suite WebPACK Edition y NexysTM4 de Digilent.


El entorno de diseo que vamos a utilizaremos el Vivado Design Suite WebPack de Xilinx [8] Se trata de
una versin gratuita que soporta las familias Artix-7 (7A35T - 7A200T), Kintex-7 (7K70T, 7K160T) y Zynq-7000
(XC7Z7010 - XC7Z7030) de Xilinx.

La placa de desarrollo que vamos a utilizar para implementar los diseos es la Nexys4 Artix-7 FPGA
Board de Digilent [9]. La placa tiene una FPGA de la familia Artix-7 (XC7A100T-1CSG324C), y un conjunto
de puertos y perifricos que nos permitirn implementar una gran cantidad de diseos. En la placa tenemos
acceso a 16 switches, 16 LEDS, displays de 7 segmentos, Salida VGA, 10/100 Ethernet, 16Mbyte RAM,
acelermetro y sensor de temperatura. La placa tiene un oscilador de 100MHz conectado al pin3. Tambin
cuenta con un conversor USB-UAR (TDI FT2232HQ), que nos permitir usar los comandos de Windows
COM para comunicar la placa con el PC.
En las Fig. 1 y la Fig. 2 se muestran una descripcin de la placa con sus componentes.

Fig. 1. Nexys 4 de Digilent

Fig. 2. Nexys4 de Digilent


La placa Nexyx4 puede alimentarse a travs del cable Digilent USB-JTAG (J6) o desde una fuente externa.
Mediante el Jumper JP3 se elige qu modo va a ser utilizado ( ver Fig. 3 )
Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

Fig. 3. Nexys4. Alimentacin

Fig. 4. Nexys 4. Alimentacin


La FPGA de la placa se puede configurar ( programar) de cuatro formas distintas :
1. Con el PC, utilizando el cable Digilent USB-JTAG (port J6, etiquetado como PROG)
2. Utilizando el puerto SPI, se puede transferir el fichero almacenado en una memoria flash.
3. Utilizando una micro SD.
4. Utilizando una memoria USB mediante el puerto USB HID.

Fig. 5. Nexys4: Configuracin


La seleccin del modo de programacin se realiza mediante los jumpers JP1 y JP2 (Ver Fig. 5). La
configuracin de la FPGA est almacenada en unos ficheros denominados bitstreams y que tienen la
extensin .bit. El software ISE o Vivado de Xilinx puede generar bitstreams a partir de ficheros VHDL,
Verilog, o esquemticos.
Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

Como ya se ha comentado anteriormente, la placa Nexys4 incluye 2 LEDs tricolor, 16 switches, 6 pulsadores,
16 LEDS. Como puede verse en la Fig. 6 los pulsadores ponen un nivel bajo cuando estn en reposo y un
nivel alto al pulsarlos. En cuanto a los LEDs, estn en configuracin de nodo comn, con lo que para su
activacin, es decir, para que luzcan necesitan un nivel alto de tensin.

Fig. 6 . Nexys 4. I/O


La placa tambin incorpora ocho displays de siete segmentos dispuestos segn la Fig. 7 con un LED en cada
segmento.

Fig. 7. Display de 7 segmentos


Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

Los nodos de los siete LED se disponen en una configuracin de nodo comn como se muestra en la Fig. 8.
De los esquemas de las Fig. 6 y Fig. 8 tanto para activar las seales de los nodos como la de los ctodos, es
decir, CA..G / DP AN0..7 las seales deben estar a nivel bajo.

Fig. 8. Displays de 7 segmentos en nodo comn


El esquema de conexin a la placa (Ver Fig. 6) crea una pantalla de multiplexado, donde las seales de
ctodo son comunes a todos los dgitos, pero slo puede iluminar los segmentos del dgito cuyo nodo
correspondiente es activado. Esta multiplexacin en el tiempo se debe realizar a una frecuencia tal que el
refresco no sea perceptible para el ojo humano. Si la velocidad de refresco es inferior a 45 Hz, puede
aparecer el efecto parpadeo. El controlador que se ha de implementar debe activar los ctodos con el patrn
correcto cuando la seal de nodo correspondiente est activada. Un ejemplo diagrama para un controlador
de cuatro dgitos se muestra en la Fig. 9

Fig. 9. Displays de 7 segmentos:Multiplexado en el tiempo

A medida que vayamos avanzando con la prctica iremos aprendiendo la funcionalidad de la placa. An
as se puede consultar en la pgina de Digilent [9], donde podis encontrar el Manual del usuario
(Refrence Manual), los esquemticos de la placa (Schematics) y el fichero de pines de la placa (Nexys4
Master XDC File for Vivado desig)

Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

2.1. Tutorial de Vivado


Para familiarizarnos con el entorno de diseo, vamos a seguir el Tutorial de Vivado que se puede descargar
de la web de Xilinx [10]. Adems del manual en .pdf, en el enlace hay que descargar el fichero Tutorial.zip
(sources) que incluye los ficheros necesarios para realizar el tutorial y que a continuacin se enumeran:
Tutorial.vhd: cdigo VHDL del diseo a implementar

Tutorial_tb.vhd: cdigo VHDL del fichero utilizado en la simulacin funcional.

Tutorial .xdc: fichero de restriccin de usuario. Asignacin de pines

Tutorial_tcl_with_sim.tcl: fichero tcl para utilizar el modo batch. Este modo de funcionamiento no lo
vamos a utilizar en el desarrollo de este curso.

Fig. 10. Tutorial de Vivado. Flujo de diseo [10]


Un flujo de diseo tpico, es el que aparece en la Fig. 10 y consta de la creacin del modelo, en la que se
incluye la creacin del fichero de restricciones del usuario (user constraint file (.XDC)), simulacin funcional,
sntesis del diseo, implementacin, simulacin temporal y generacin del fichero de configuracin
bitstream (.bit).
La versin de VIVADO utilizada para la realizacin del manual es la 2013.X, para versiones posteriores,
puede que algunas de las opciones utilizadas puedan haber sufrido alguna modificacin.
En el tutorial se propone el diseo de un circuito sencillo que consiste en la activacin de los leds de la placa,
utilizando como entradas los switches de la misma.
El manual est dividido en 7 apartados, que se describen a continuacin, y que se encuentran numerados en
cada uno de los bloques de la la Fig. 10:

Step 1: Creacin de un proyecto en el entorno de diseo VIVADO

Step 2: Simulacin del diseo utilizando el simulador Isim

Step 3: Sntesis del diseo

Step 4: Implementacin del diseo

Step 5: Simulacin Temporal

Step 6: Generacin del Bitsteam y programacin de la FPGA

Step 7: Modo Batch usando Tcl Scripts. La utilizacin de Scripts TCL est fuera del alcance de este
curso.

En el primer apartado del tutorial (Step 1) se crea un proyecto nuevo al que se le aaden los ficheros
tutorial.vhd y tutorial. xcd.
Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

El primer paso para la creacin del proyecto es asignar el dispositivo en el que vamos a implementar el
diseo, es decir, la FPGA. Esta informacin la podemos obtener a partir de la observacin del texto del
encapsulado de la FPGA, que se muestran en la Fig. 11

tipo de
dispositivo
encapsulado
velocida
d
rango de operacin
C: comercial

CSG324
1C

Fig. 11. Interpretacin del texto de la FPGA


Una vez cargado el fichero tutoria.vhd se va a modificar el cdigo VHDL tal como se muestra en la Fig. 12

Fig. 12. Codigo VHDL modificado


Como podemos ver en la Fig. 12 el fichero VHDL contiene una cabecera aadida automticamente por la
herramienta. Esta cabecera consiste en comentarios que el diseador deberan de rellenar para identificar y
ayudar a entender el diseo. Para este ejemplo no es necesario, pero es interesante para diseos complejos.
Observa que cada lnea de la cabecera comienza por dos guiones "--" que es la manera de comentar en
VHDL. Esto es, la herramienta no analiza las lneas que contienen dos guiones y puedes poner cualquier
comentario.
Despus de la cabecera estn las referencias a las bibliotecas del IEEE1, que son necesarias para poder utilizar
los tipos de datos que emplearemos. Para nuestro caso, nos basta con utilizar la biblioteca
IEEE.STD_LOGIC_1164.
1

El IEEE (Institute of Electrical and Electronics Engineers) es la asociacin que ha estandarizado el VHDL.

Diseo digital con VHDL

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

Luego tenemos la entidad. En VHDL, la entidad define las entradas y salidas del circuito. Y no hace
referencia a la estructura o funcionalidad interna. Es como definir una caja negra. En nuestro ejemplo, la
entidad se puede representar como muestra la Fig. 13

Fig. 13. "Caja negra" que define la entidad de nuestro circuito


VIVADO ha creado los puertos de tipo STD_LOGIC, que es un tipo de dato parecido al BIT, pero que no slo
tiene los valores binarios '0' y '1', sino que puede tomar otros valores como:
'U': Unasigned. La seal no ha recibido valor
'X': La seal ha recibido valores distintos
'Z': Alta impedancia
'-': No importa (don't care)
Hay ms valores posibles que no se han incluido para no complicar innecesariamente la explicacin.
Ahora queda describir la arquitectura. En VHDL, la arquitectura describe la estructura, el funcionamiento o
el comportamiento de un circuito.
En nuestro ejemplo, nosotros queremos asignar a un puerto el valor dependiendo del valor de las entradas.
Esto se realiza con una sentencia concurrente para cada LED. El cdigo 2-1 muestra cmo se realiza en
VHDL.
architecture BEHAVIORAL of tutorial is
begin
led_int(0) <= not (swt(0));
..
end BEHAVIORAL;

Cdigo 2-1: Arquitectura que enciende un LED y apaga otro


Si nos fijamos en el cdigo 2-1, vemos que el nombre de la arquitectura (BEHAVIORAL) indica el tipo de
descripcin: en este caso la arquitectura explica el comportamiento del circuito. En realidad, aqu se puede
poner el nombre que uno quiera, aunque existe una convencin de indicar el tipo de descripcin:
BEHAVIORAL (o COMPORTAMENTAL)
STRUCTURAL (o ESTRUCTURAL)
FUNCTIONAL (o FUNCIONAL)
DATAFLOW (o FLUJO_DE_DATOS)
Ya iremos viendo qu significan estos descriptores.
Despus del nombre de la arquitectura se indica a qu entidad pertenece dicha arquitectura. En nuestro
ejemplo: "of tutorial". Indica que pertenece a la entidad tutorial. Aunque no es obligatorio, la entidad y
arquitectura se suelen describir en el mismo fichero.
Por ltimo, a partir del BEGIN se incluyen las sentencias concurrentes de nuestro circuito. En este caso, son
asignaciones. La asignacin de seales se realiza con el operador "<=".
Al modificar el cdigo VHDL, el esquemtico que nos generar nuestro cdigo (apartado 1-4-1) del manual
ser el que aparece en la Fig. 14

Diseo digital con VHDL

10

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

Fig. 14. Esquemtico ejemplo


En cuanto a la seccin 1-5-2 del tutorial, en la que se explica como aadir asignacin de puertos a distintos
pines de la FPGA, en el caso del fichero descargado de la web, tutorial.xdc ya tiene asignados todos los
puertos de entrada y salida (como puede verse en la Fig. 15) y no es necesario aadir ninguno ms. La
conexiones de los distintos interfaces entrada/salida que incluye la placa con los pines de la FPGA se
pueden encontrar en el fichero proporcionado por Digilent [9]. Adems en la placa se encuentran
serigrafados.

Fig. 15.Fichero tutorial.xdc


Para realizar la Simulacin funcional del diseo (Step 2), se utilizar el ISim Simulator que proporciona
VIVADO y el fichero tutorial_tb.vhd.

2.2. Conclusin
Con esto hemos terminado el primer ejercicio.. Hemos comprobado que la placa y la herramienta funcionan,
y ya podemos probar otros diseos ms complejos.
Resumiendo, los conceptos principales de esta prctica:
Diseo digital con VHDL

11

rea de Tecnologa Electrnica

2.Vivado Design Suite WebPACK


Edition y NexysTM4 de Digilent.

Los comentarios en VHDL empiezan con dos guiones: "--"


El VHDL no distingue entre maysculas y minsculas
Para las seales binarias normalmente se utiliza el tipo STD_LOGIC
Un diseo VHDL consta como mnimo de una entidad y una arquitectura
La entidad define las entradas y salidas del diseo
La arquitectura define el diseo internamente
Normalmente es necesario hacer referencia a la biblioteca del IEEE: STD_LOGIC_1164.

Diseo digital con VHDL

12

rea de Tecnologa Electrnica

3. Sentencias concurrentes
Antes de empezar con la prctica, se muestran a continuacin las palabras reservadas del VHDL (figura 3.1).
Estas palabras no se pueden usar para nombrar elementos de nuestro circuito: seales, entidades,
arquitecturas, ....

Figura 3.1: Lista de palabras reservadas del VHDL

3.1. Diseo de un multiplexor


El primer ejercicio consistir en crear el diseo de un multiplexor de dos entradas de datos de un bit, y por
tanto, el multiplexor tendr una seal de seleccin (un bit).
MUX
A
B

A
Z

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


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

Figura 3.2: Esquema del multiplexor (izquierda) y diseo en puertas (derecha)

3.1.1. Diseo usando puertas lgicas


Si recordamos del ao pasado, un multiplexor en puertas lgicas se describe como se muestra en la derecha
de la figura 3.2.
As que creamos un nuevo proyecto llamado gate_mux.
Crea un nuevo mdulo VHDL llamado tambin GATE_MUX con los puertos llamados igual que los de la figura
3.2. La arquitectura, en vez de llamarla BEHAVIORAL llmala GATE, para indicar que est en el nivel de puertas.
Dentro de la arquitectura, incluye la sentencia concurrente que define el esquemtico en el nivel de puertas
del multiplexor (derecha en la figura 3.2). Esta sentencia se muestra en el cdigo 3-1.
Z <= (A AND S) OR (B AND (NOT S));

Cdigo 3-1: Sentencia concurrente que define el multiplexor en puertas


A partir del cdigo 3-1 podemos observar que para un diseo en el nivel de puertas, la sintaxis es muy
similar a la sintaxis utilizada en el lgebra de Boole (que estudiamos el ao pasado). El uso de parntesis es
muy importante para determinar que operador booleano se aplica en cada caso.
Prueba a implementar el circuito en la placa haciendo que el puerto A sea el interruptor SW0, el puerto B sea el
interruptor SW1, y que la seal de seleccin sea el pulsador BTN0. Por ltimo, asocia la salida Z con el LED LD0.

Diseo digital con VHDL

13

rea de Tecnologa Electrnica

3. Sentencias concurrentes

Una vez implementado, comprueba que funciona correctamente, esto es, que segn est el pulsador
presionado, la salida toma el valor del primer interruptor o del segundo.

3.1.2. Diseo usando varias sentencias concurrentes


El cdigo 3-1 es perfectamente vlido. Sin embargo, cuando el nmero de puertas lgicas es elevado, nos
puede interesar dividir la sentencia de asignacin en varias sentencias ms sencillas. Esto se hace creando
seales intermedias. La figura 3.3 muestra el diseo en puertas del multiplexor incluyendo las seales
intermedias D y E.
A

D
Z

B
E
S

Figura 3.3: Esquema en puertas del multiplexor con seales intermedias


Antes de ser usadas, estas seales intermedias deben ser primero declaradas en la arquitectura. Las seales
se declaran antes del begin de la arquitectura. Por tanto, nuestro diseo queda como muestra el cdigo 3-2:
architecture GATE of GATE_MUX is
signal D, E : STD_LOGIC;
begin
D <= A AND S;
E <= (NOT S) AND B;
Z <= D OR E;
end GATE;

Cdigo 3-2: Sentencia concurrente que define el multiplexor en puertas


Ahora hemos usado tres sentencias concurrentes que son equivalentes a la sentencia del cdigo 3-1. Puedes
probar, si quieres, que funciona igual.
Una caracterstica fundamental de las sentencias concurrentes es que, como su nombre indica, son
concurrentes. Esto es, que se ejecutan todas a la vez. Que es como funcionan los circuitos (el hardware): todo
est ejecutndose simultneamente. Por lo tanto, da igual el orden en que se escriban, pues no hay unas que
vayan antes o despus. As, las sentencias del cdigo 3-2 se podran poner en cualquier otro orden. Por
ejemplo, el cdigo 3-3 es totalmente equivalente al del cdigo 3-2.
architecture GATE of GATE_MUX is
signal D, E : STD_LOGIC;
begin
Z <= D OR E;
D <= A AND S;
E <= (NOT S) AND B;
end GATE;

Cdigo 3-3: Sentencia concurrente que define el multiplexor en puertas


Si quieres, puedes implementar en la placa el cdigo 3-3 para comprobar que funciona igual.

3.1.3. Uso de sentencias condicionales


Usar el VHDL solamente con expresiones booleanas nos limita las capacidad de diseo. Ahora vamos a
realizar el mismo diseo usando sentencias condicionales, lo que nos resultar mucho ms entendible que
las expresiones booleanas.
Podemos utilizar una sentencia concurrente condicionada como la mostrada en el cdigo 3-4. Que es
bastante ms entendible que el cdigo en el nivel de puertas. Ya que como dice el cdigo, a Z se le asigna A
cuando S='1' y si no, se le asigna B.
Z <= A when S='1' else B;

Cdigo 3-4: Sentencia concurrente condicionada que define el multiplexor


Prueba a implementar este diseo y comprueba que funciona igual.

3.1.4. Uso de procesos


Otra alternativa es usar procesos, que los veremos con ms detalle ms adelante. Dentro del proceso, las
sentencias se tratan secuencialmente y no de manera concurrente como vimos que ocurre en la arquitectura.
As que el orden de las sentencias dentro de un proceso s es importante.
El proceso empieza con su nombre, a lo que le siguen dos puntos y la palabra reservada PROCESS. Despus de
sta se pone la lista de sensibilidad, donde se deben poner todas las seales que se leen en el proceso. Las
Diseo digital con VHDL

14

rea de Tecnologa Electrnica

3. Sentencias concurrentes

seales que se leen son: las seales que estn dentro de las condiciones (por ejemplo sentencia if) y las
seales que estn en la parte derecha de las asignaciones.
El proceso que implementa nuestro multiplexor se muestra en el cdigo 3-5.
P_MUX: Process (A,
begin
if S='1' then
Z <= A;
else
Z <= B;
end if;
end process;

B, S)

-- lista de sensibilidad: A, B, S

-- S se lee
-- A se lee
-- B se lee

Cdigo 3-5: Sentencia concurrente condicionada que define el multiplexor


El VHDL es un lenguaje muy amplio, y hay otras maneras con las que se puede describir el multiplexor. Sin
embargo, por ahora no las veremos y pasaremos a describir otros diseos.

3.2. Diseo de un multiplexor de 4 alternativas


MUX4ALT

El multiplexor anterior era demasiado sencillo. Ahora queremos


realizar un multiplexor con cuatro alternativas. La figura 3.4
muestra el esquema de este multiplexor.
Debido a que para poder seleccionar 4 alternativas la seal de
seleccin (S) debe de ser de 2 bits. Por tanto necesitamos definir un
vector. Para esto se utiliza el tipo STD_LOGIC_VECTOR.

00

01

10

11

S(1:0)

Figura 3.4: Multiplexor de 4 alternativas


Para realizar el diseo, crea un nuevo proyecto llamado mux4alt y al definir los puertos debes crear la
entrada S como un vector. Para ello, al definir los puertos, pincha en el campo Bus del puerto S, y indica que
el MSB (bit ms significativo) es 1, y el LSB (bit menos significativo) es 0. Por tanto, tendr dos bits de ancho
de bus. Observa la figura 3.5 para saber cmo debes crearlo.

Figura 3.5: Definicin de los puertos de entrada y su ancho


El resultado es la entidad mostrada en el cdigo 3-6.
entity mux4alt
Port ( A :
B :
C :
D :
S :
Z :
end mux4alt;

is
in
in
in
in
in
out

STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC_VECTOR (1 downto 0);
STD_LOGIC);

Cdigo 3-6:Entidad del multiplexor de 4 alternativas


El tipo STD_LOGIC_VECTOR es un vector de STD_LOGIC y normalmente se definen con rango descendente
terminado en cero. El rango descendente se especifica con la palabra downto.
Diseo digital con VHDL

15

rea de Tecnologa Electrnica

3. Sentencias concurrentes

La sentencia concurrente que describe este multiplexor se muestra en el cdigo 3-7. Esta sentencia es una
extensin para 4 alternativas de la vista en el cdigo 3-4. Fjate que la comparacin del valor de la seal S se
hace con comillas dobles por ser un vector.
Z <= A when S="00" else
B when S="01" else
C when S="10" else
D;

Cdigo 3-7: Sentencia concurrente condicionada que define el multiplexor


Si lo quisisemos realizar con un proceso tenemos dos maneras de hacerlo, mediante if (cdigo 3-8) o
mediante case (cdigo 3-9). Es muy importante que la ltima alternativa siempre cierre todas las
posibilidades. En el caso del IF se debe terminar con un ELSE. Y en el caso del CASE se debe de terminar con
un "when others", que significa "para el resto de posibilidades". Se deben cerrar todas las posibilidades
porque, en otro caso, la seal asignada no recibira valor y por lo tanto, se creara un elemento de memoria
(un latch probablemente) para guardar el valor que tena anteriormente. Esto ya lo veremos ms adelante,
cuando trabajemos con los elementos de memoria.
P_MUX: Process (A,B,C,D,S)
begin
if S="00" then
Z <= A;
elsif S="01" then
Z <= B;
elsif S="10" then
Z <= C;
else
Z <= D;
end if;
end process;

Cdigo 3-8:Proceso con sentencia IF

P_MUX: Process (A,B,C,D,S)


begin
case S is
when "00" =>
Z <= A;
when "01" =>
Z <= B;
when "10" =>
Z <= C;
when others =>
Z <= D;
end case;
end process;

Cdigo 3-9:Proceso con sentencia CASE

Ahora implementa en la placa este multiplexor de 4 alternativas empleando las tres formas que hemos visto
(cdigo 3-7, 3-8 y 3-9). Asocia la seal S a los dos primeros pulsadores, las cuatro alternativas (A, B, C, D) a los
cuatro primeros interruptores, y la salida Z al primer LED (LD0).

3.3. Diseo de un multiplexor de 4 bits de dato y dos alternativas


Ahora haremos un multiplexor de dos alternativas, pero cada alternativa tendr cuatro bits. Por tanto, la
salida tambin tendr 4 bits.
La entidad ser como la mostrada en el cdigo 3-10.
MUX4BITS
entity mux4bits is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
S : in STD_LOGIC;
Z : out STD_LOGIC_VECTOR (3 downto 0);
end mux4bits;

Cdigo 3-10:Entidad del multiplexor de 4 alternativas

A(3:0)

B(3:0)

Z(3:0)

Figura 3.6: Multiplexor de 4 bits de dato

La arquitectura ser igual que la usada para el multiplexor de dos alternativas con datos de un bit, ya que la
asignacin de seales utiliza la misma expresin independientemente de que las seales sean vectores o bits.
Lo que s se debe cumplir es que la seal asignada tenga el mismo nmero de bits que la da su valor.
Por tanto, se podr utilizar la misma sentencia que se utiliz en el cdigo 3-4 o el proceso del cdigo 3-5. Eso
s, sabiendo que ahora las seales A, B y Z son de 4 bits y no de un bit.
Implementa este multiplexor asociando el puerto A a los cuatro primeros interruptores (SW3, SW2, SW1 y SW0), el
puerto B al resto de interruptores (SW7, SW6, SW5 y SW4). La seal de seleccin al primer pulsador (BTN0), y la
salida Z a los cuatro primeros LED.

3.4. Conclusiones
Resumiendo, los conceptos principales de esta prctica:
Existe un grupo de palabras reservadas en VHDL que no se pueden utilizar para nombrar elementos del
circuito: seales, entidades, arquitecturas, componentes,

Diseo digital con VHDL

16

rea de Tecnologa Electrnica

3. Sentencias concurrentes

Las sentencias concurrentes, dentro de la arquitectura, se ejecutan a la vez. Por lo tanto, no importa el
orden en que aparezcan.
Dentro de los procesos, el orden de las sentencias s importa. Por lo tanto, se tratan secuencialmente.
El VHDL es un lenguaje muy amplio y existen muchas maneras de describir la misma cosa
En VHDL los valores vectoriales van en comillas dobles, por ejemplo S="00".

Diseo digital con VHDL

17

rea de Tecnologa Electrnica

4. Codificadores, decodificadores, convertidores de cdigo


En esta prctica vamos a complicar diseos de las prcticas anteriores

4.1. Convertidor de binario a 7 segmentos


En este ejercicio vamos a modificar el diseo del multiplexor de 4 bits de datos (seccin 3.3) para que adems
de mostrar el dato seleccionado por los cuatro LED, muestre el dato por un display de siete segmentos.
El esquema del circuito se muestra en la figura 4.1. En ella se muestra el multiplexor que hicimos en el
apartado 3.3 y la salida de este multiplexor la tenemos que convertir a siete segmentos. En la derecha de la
figura se han incluido los puertos. Adems de los que aparecen en el esquema, se han aadido los nodos de
los displays (puerto AN). Con los nodos se controla los displays que lucen. Tanto los nodos como los
segmentos de los displays son activos a nivel bajo. Esto es, para que luzca un segmento hay que poner un
cero-lgico. Y para activar un display tengo que poner un cero-lgico en el nodo correspondiente.
LED(3:0)

MUX4BITS
CONV_7SEG
4

A(3:0)

B(3:0)

Puertos
In
Out
A(3:0)
LED(3:0)
B(3:0)
SEG(6:0)
S
AN(3:0)

SEG(6:0)

Z(3:0)

Figura 4.1: Multiplexor y salida a 7 segmentos


As que crea un nuevo proyecto llamado mux7seg, y dentro de l crea un nuevo mdulo VHDL que tenga los
puertos mostrados en la figura 4.1.
Dentro de la arquitectura debers declarar la seal Z, que la asignars al puerto de salida LED y que usars
para convertirla en los siete segmentos. No podrs usar Z como puerto: esto es un concepto importante en
VHDL ya que los puertos de salida no se pueden leer. Por tanto, es necesario usar una variable intermedia Z
distinta del puerto de salida LED. Como la seal Z la vamos a utilizar en el convertidor de binario a siete
segmentos, la seal Z no podr ser un puerto de salida como lo era en el ejercicio del apartado 3.3.
Para hacer el convertidor de binario a siete segmentos tenemos que recordar la visualizacin de cada
nmero. En la figura 4.2 se muestran los 16 nmeros que podemos representar con 4 bits (de 0 a 15).

A
F
E

G
D

B
C

A
F

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

A
F
E

G
D

B
C

A
F

B
C

Figura 4.2: Los 16 nmeros representables con 4 bits


As que para realizar el convertidor tenemos que examinar qu numero tenemos que mostrar y encender los
segmentos correspondientes a dicho nmero. En la figura 4.3 se muestran los ejemplos para tres casos: los
nmeros 0, 1 y 2. Como se puede ver, arbitrariamente se ha asignado el bit ms significativo de SEG al
segmento A y el menos significativo (el bit 0) al segmento G. Otro orden se poda haber escogido, pero lo
importante es que se correspondan adecuadamente a la asignacin de pines de la FPGA. En la figura se han
mostrado tres ejemplos, ahora tienes t que deducir el resto.

Diseo digital con VHDL

18

4. Codificadores, decodificadores,
convertidores de cdigo

rea de Tecnologa Electrnica

Si Z="0000" mostramos el cero

A
F
E

Usamos un vector SEG(6:0) que contendr el valor de los segmento s


B

SEG(6)
SEG(5)
SEG(4)
SEG(3)
SEG(2)
SEG(1)
SEG(0)

segmento
segmento
segmento
segmento
segmento
segmento
segmento

A
B
C
D
E
F
G

Como para el cero (Z="0000") se encienden todos


los segmentos menos el G, la asignacin ser:
SEG <= "0000001"
Un cero enciende el segmento
por ser lgica negada

Bit 0 correspondiente
con los segmentos F que
estar apagado

Si Z="0001" mostramos el uno

A
F

Como para el uno (Z="0001") se encienden los


segmentos B y C, la asignacin ser:

SEG <= "1001111"

Bits correspondientes
con los segmentos B y C
que estarn luciendo

Si Z="0010" mostramos el dos

A
F

Como para el dos (Z="0010") se encienden todos


los segmentos menos el C y el F, la asignacin ser:

SEG <= "0010010"

Bits correspondientes
con los segmentos C y F
que estarn apagados

Figura 4.3: Valores del vector de los segmentos (SEG) para los nmeros 0, 1 y 2
Las sentencias concurrentes VHDL de la arquitectura debe tener el aspecto de la figura 4.4. Se puede apreciar
que hay cuatro sentencias concurrentes. Como ya hemos dicho, por la concurrencia del hardware, el orden
de estas sentencias es indiferentes. La ltima sentencia, correspondiente al convertidor a siete segmentos, se
ha dejado incompleta para que la termines t. Puedes observar que en la sentencia del convertidor se han
incluido comentarios para facilitar la comprensin del cdigo. Esto es muy importante para facilitar la
comprensin del cdigo, tanto para otras personas que lo lean, o para ti mismo cuando lo vuelvas a ver
dentro de unas semanas y no te acuerdes de nada de lo que hiciste en su da.
Z <= A when S='1' else B;
LED <= Z;

multiplexor

Asignacin de las seal Z a los LED

(no se puede usar Z como puerto de salida)

AN <= "1110";

Encendemos el nodo 0

SEG <= "0000001"


"1001111"
"0010010"
"0000110"

when
when
when
when

Z="0000"
Z="0001"
Z="0010"
Z="0011"

else
else
else
else

-----

comentarios para ayudar a identificar


el nmero y los segmentos que lucen
0:
1:
2:
3:

A,B,C,D,E,F
B,C
A,B,D,E,G
A,B,C,D,G

.....contina t con el resto de casos

Primeros 4 nmeros
del convertidor a
siete segmentos

Figura 4.4: Sentencias concurrentes de la arquitectura


Ahora, termina de hacer el convertidor a siete segmentos e implementa el diseo en la FPGA. Ten especial
cuidado de asignar los pines adecuadamente.
Cuando lo hayas hecho, comprueba que todos los nmeros se muestran correctamente.
Date cuenta lo sencillo que resulta hacer el convertidor con VHDL frente a hacerlo con esquemticos. Ahora
es el sintetizador (VIVADO) quien se encarga de optimizar el circuito, as que no tenemos que preocuparnos
de hacer los mapas de Karnaugh.

Diseo digital con VHDL

19

4. Codificadores, decodificadores,
convertidores de cdigo

rea de Tecnologa Electrnica

4.2. Decodificador de 2 a 4
Ahora haremos un decodificador de 2 a 4. El bloque del circuito y su tabla de verdad se muestra en la figura
4.5. Recordando que hace un decodificador, ste activa la salida correspondiente al nmero codificado en las
entradas. Por ejemplo, si en la entrada hay codificado un 2 en binario, se activa la salida nmero 2. Slo una
salida puede estar activa en un decodificador. Adems, el decodificador tiene una seal de habilitacin E que
hace que no se active ninguna seal de salida en caso de que valga cero.
DECOD 2a4

S0

I0

E
0
1
1
1
1

S1

I1

S2
S3

I1
X
0
0
1
1

I0
X
0
1
0
1

S3
0
0
0
0
1

S2
0
0
0
1
0

S1
0
0
1
0
0

S0
0
1
0
0
0

Figura 4.5: Puertos del decodificador y tabla de verdad


El decodificador se hace de manera similar al convertidor de siete segmentos del ejercicio anterior, slo que
cambian las salidas que se activan segn el nmero que se tenga en la entrada. La mayor novedad es la seal
de habilitacin E.
Lo que vamos a hacer en este diseo es mostrar en el display el nmero codificado en los cuatro primeros
interruptores (SW3, SW2, SW1, SW0). El nmero tambin se mostrar en los cuatro primeros LED (de LD3 a LD0).
Sin embargo, en vez de mostrarlo en el primer display, los interruptores SW7 y SW6 indicarn por qu display se
mostrar. Para ello necesitamos un decodificador, que decodifique el nmero representado por estos
interruptores active el nodo correspondiente. El esquema del circuito que queremos realizar se muestra en
la figura 4.6.
LD3-LD0
LED(3:0)
CONV_7SEG

SW3-SW0
D_IN(3:0)

SW7-SW6

BTN0

SEG_A-SEG_G
6

SEG(6:0)

I0

DECOD_2a4
S0

AN(0)

I1

S1

AN(1)

S2

AN(2)

S3

AN(3)

Queremos que se habilite


cuando no est presionado
el pulsador BTN0

AN3-AN0

Controlamos qu
display se va a
encender

Negamos porque los displays se


controlan con lgica inversa

Figura 4.6: Esquema del circuito del decodificador completo


En el dibujo podemos ver que el circuito tiene dos partes diferenciadas. La parte de arriba (en la figura)
realiza la conversin de siete segmentos, esta parte ya la sabes hacer del apartado anterior. La parte de abajo
se encarga de controlar qu display va a lucir. Cuando I="00" se debe activar el primer display, cuando I="01"
se debe activar el segundo display, el tercero cuando I="10" y el cuarto cuando I="11". Todo esto siempre
cuando no est presionado el pulsador BTN0, ya que va a funcionar como habilitacin.
El decodificador con habilitacin lo podemos hacer con sentencias concurrentes (cdigo 4-1) o con un
proceso (cdigo 4-2). Ambas formas producen circuitos equivalentes, y hay ms posibilidades.
En el decodificador realizado con la sentencia concurrente (cdigo 4-1) se ha utilizado una seal auxiliar
S_DECOD que luego se va a invertir debido a que los nodos funcionan con lgica negada. En el cdigo del
proceso las salidas se han codificado directamente con lgica negada. Algo similar se ha hecho con la seal
de habilitacin, en el cdigo 4-1 se ha negado y luego se ha comprobado si vale 0. Mientras que en el proceso

Diseo digital con VHDL

20

4. Codificadores, decodificadores,
convertidores de cdigo

rea de Tecnologa Electrnica

directamente se comprueba si vale uno. El VHDL permite elegir la manera que ms te guste. El cdigo 4-1
usa inversores y se parece ms al esquema de la figura 4.6. El cdigo 4-2 quizs sea ms fcil de entender.
P_DECOD: Process (E, I)
begin
if E='1' then
AN <= (others =>'1'); -- AN <= "1111";
else
case I is
when "00" =>
AN <= "1110";
when "01" =>
AN <= "1101";
when "10" =>
AN <= "1011";
when others => -- "11"
AN <= "0111";
end case;
end if;
end process;

E_NEG <= NOT E;


S_DECOD <= "0000" when E_NEG='0' else
"0001" when I="00" else
"0010" when I="01" else
"0100" when I="10" else
"1000"; -- when I="11"
-- invertimos para tener logica negada
AN <= NOT (S_DECOD);

Cdigo 4-1:Decodificador con sentencia concurrente

Cdigo 4-2:Decodificador con proceso


Por ltimo, fjate en la primera asignacin del cdigo 4-2: "AN <= (others => '1');". Esta expresin asigna
un uno a todos los bits de la seal AN. Con ello nos ahorramos contar el nmero de bits que tenemos que
asignar.
Ya es hora de implementar el circuito propuesto: Crea un nuevo proyecto llamado decod2a4 y crea un nuevo
mdulo VHDL con los puertos mostrados en la figura 4.6. Los puertos que tengan ms de un bit, cralos
como vectores. En la figura 4.6 se indica a qu elementos de la placa debes asignar los puertos. Por ejemplo,
la entrada I(1:0) la asocias a los interruptores SW7 y SW6. La entrada D_IN(3:0) la asocias a los interruptores
SW3, SW2, SW1 y SW0. Y as todos los dems.
Una vez que lo tengas implementado comprueba:
Que el display muestra correctamente el nmero codificado en los 4 primeros interruptores (SW3-SW0)
Que al cambiar los interruptores SW7 y SW6 se cambia el display que indica el nmero.
Que al presionar el pulsador de la habilitacin (BTN0) ningn display no luce
Que el nmero codificado en los 4 primeros interruptores tambin se muestra por los 4 primeros LED.

4.3. Codificador de 8 a 3
Ahora vamos a realizar la operacin inversa a la decodificacin. Tendremos 8 entradas sin codificar (los 8
interruptores) y mostraremos en el primer display de siete segmentos el nmero de interruptor que est
activo. Hay ciertas condiciones:
En caso de que haya ms de un interruptor activo, se mostrar el mayor (el ms significativo es prioritario).
En caso de que no hay ningn interruptor encendido, no mostraremos nada por el display.
El nmero binario tambin se mostrar por los 3 primeros LED.
El codificador tendr una seal de habilitacin EI, si sta est deshabilitada se mostrar un signo menos
(segmento G) en los cuatro displays.
La seal de habilitacin EI ser el pulsador BTN0. Cuando est pulsado, se deshabilitar el codificador.
Para recordar del ao pasado, el esquema y la tabla de verdad del codificador se muestra en la figura 4.7
I0
I1
I2
I3
I4
I5
I6
I7
EI

CODIF

EO
S0
S1
S2
A

EI
0
1
1
1
1
1
1
1
1
1

I7
X
0
0
0
0
0
0
0
0
1

I6
X
0
0
0
0
0
0
0
1
X

I5
X
0
0
0
0
0
0
1
X
X

I4
X
0
0
0
0
0
1
X
X
X

I3
X
0
0
0
0
1
X
X
X
X

I2
X
0
0
0
1
X
X
X
X
X

I1
X
0
0
1
X
X
X
X
X
X

I0
X
0
1
X
X
X
X
X
X
X

S2
0
0
0
0
0
0
1
1
1
1

S1
0
0
0
0
1
1
0
0
1
1

S0
0
0
0
1
0
1
0
1
0
1

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

Figura 4.7: Esquema y tabla de verdad del codificador de 8 a 3


Un posible esquema del circuito se muestra en la figura 4.8, y en la figura 4.9 hay una descripcin VHDL.

Diseo digital con VHDL

21

4. Codificadores, decodificadores,
convertidores de cdigo

rea de Tecnologa Electrnica

SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7

I0
I1
I2
I3
I4
I5
I6
I7

BTN0

CODIF

LED0
LED1
LED2

Si est deshabilitado (EI='0')


muestro un "-" (segmento G)

EO
S0
S1
S2
A

CONV_7SEG

numero(0)
numero(1)
numero(2)

D0
D1
D2

"1111110"

SEG_AUX(6:0)

MUX6BITS
0

SEG(6:0)

D3

activo

Como slo hay 3 bits, el cuarto


va a cero (nmero entre 0 y 7)

EI

Si no hay ninguna entrada


activa se apagan todos los
display (todos los nodos a 1)
Si hay alguna entrada activa
se enciende el primer display

"1111"
"1110"

Si no est habilitado se encienden todos


los displays (todos los nodos a 0)

"0000"

AN(3:0)

Figura 4.8: Esquema de bloques del codificador


P_CODIF: Process (BTN0, SW)
begin
if BTN0 = '1' then
numero <= "000";
activo <= '0';
else
activo <= '1';
if SW(7) = '1' then
numero <= "111";
elsif SW(6) = '1' then
numero <= "110";
elsif SW(5) = '1' then
numero <= "101";
elsif SW(4) = '1' then
numero <= "100";
elsif SW(3) = '1' then
numero <= "011";
elsif SW(2) = '1' then
numero <= "010";
elsif SW(1) = '1' then
numero <= "001";
elsif SW(0) = '1' then
numero <= "000";
else
numero <= "000";
activo <= '0';
end if;
end if;
end process;
LED

<= numero;

Para no ponerla en
todas las
condiciones, se
puede poner la
asignacin por
defecto al
principio
Codifica los
interruptores
en un nmero
binario
Y cuando haya
que asignar otro
valor se incluye
en esa condicin

Lleva el nmero codificado a los LED

seg_aux <= "0001111" when numero="111" else -"0100000" when numero="110" else -"0100100" when numero="101" else -"1001100" when numero="100" else -"0000110" when numero="011" else -"0010010" when numero="010" else -"1001111" when numero="001" else -"0000001"; -- when numero="000" -- 0
SEG <= seg_aux when BTN0='0' else "1111110";
AN <= "0000" when BTN0='1' else
"1111" when activo = '0' else
"1110"; -- BTN0 ='1' AND activo = '1'

7
6
5
4
3
2
1

Convierte el
nmero a siete
segmentos
Inhabilita los segmentos si se
pulsa BTN0 (pone un signo "-")

Controla que

displays lucen

Figura 4.9: Sentencias VHDL del esquema de la figura 4.8

Diseo digital con VHDL

22

rea de Tecnologa Electrnica

4. Codificadores, decodificadores,
convertidores de cdigo

No existe una nica manera para describir el circuito. Por ejemplo, la sentencia que convierte el nmero a
siete segmentos y la de habilitacin de los segmentos se pueden agrupar en una sola. Con esto nos
ahorramos la seal intermedia seg_aux. Compara los cdigos 4-3 y 4-4, son equivalentes.
seg_aux <= "0001111" when numero="111" else
"0100000" when numero="110" else
"0100100" when numero="101" else
"1001100" when numero="100" else
"0000110" when numero="011" else
"0010010" when numero="010" else
"1001111" when numero="001" else
"0000001"; -- when numero="000"
SEG <= seg_aux when BTN0='0' else "1111110";

Cdigo 4-3: Habilitacin con seal auxiliar

SEG <= "1111110" when BTN0='1' else


"0001111" when numero="111" else
"0100000" when numero="110" else
"0100100" when numero="101" else
"1001100" when numero="100" else
"0000110" when numero="011" else
"0010010" when numero="010" else
"1001111" when numero="001" else
"0000001"; -- when numero="000"

Cdigo 4-4: Habilitacin dentro de la sentencia

Otra alternativa es usar un slo proceso para todo. Esta forma puede que sea ms fcil de entender, aunque
puede hacer que nos olvidemos del circuito que se va a generar. ste quizs es uno de los problemas ms
importantes del los lenguajes de descripcin de hardware: distancian al diseador del circuito que se va a
generar, pudiendo hacerle creer que est haciendo un programa software.
LED

<= numero;

P_CODIF: Process (BTN0, SW)


begin
if BTN0 = '1' then
-- esta deshabilitado
AN <= "0000";
-- se encienden todos los displays
numero <= "000";
SEG <= "1111110";
-- mostramos un guion
else
AN <= "1110";
-- se enciende el display de la derecha
if SW(7) = '1' then
numero <= "111";
SEG <= "0001111"; -- 7
elsif SW(6) = '1' then
numero <= "110";
SEG <= "0100000"; -- 6
elsif SW(5) = '1' then
numero <= "101";
SEG <= "0100100"; -- 5
elsif SW(4) = '1' then
numero <= "100";
SEG <= "1001100"; -- 4
elsif SW(3) = '1' then
numero <= "011";
SEG <= "0000110"; -- 3
elsif SW(2) = '1' then
numero <= "010";
SEG <= "0010010"; -- 2
elsif SW(1) = '1' then
numero <= "001";
SEG <= "1001111"; -- 1
elsif SW(0) = '1' then
numero <= "000";
SEG <= "0000001"; -- 0
else -- no hay ninguno activo
numero <= "000";
SEG <= "XXXXXXX"; -- da igual, no se muestra ningun numero
AN <= "1111"; --se apagan todos los displays
end if;
end if;
end process;

Cdigo 4-5: Otra alternativa al circuito de la figura 4.8, todo en un mismo proceso

4.4. Conclusiones
Resumiendo, los conceptos principales de esta prctica:
Los puertos de salida no se pueden leer, si lo quisiese hacer tendra que crear una seal auxiliar que luego
la asignara al puerto.
Se pueden inicializar todos los bits de un vector a un mismo valor usando la expresin " others => '1'"
El decodificador activa una nica salida
El VHDL y el sintetizador nos ahorra realizar las simplificaciones lgicas que hacamos por Karnaugh

Diseo digital con VHDL

23

rea de Tecnologa Electrnica

4. Codificadores, decodificadores,
convertidores de cdigo

Una seal slo se debe escribir (asignar) en una sentencia concurrente o proceso. Si se asigna en ms de
una, estaremos creando un cortocircuito. Podemos estar diciendo que un cable est a 0 y 1 a la vez.
Los lenguajes de descripcin de hardware (HDL) junto con la sntesis automtica nos facilitan mucho la
tarea del diseo. Sin embargo, pueden hacer que nos perdamos la referencia sobre el circuito hardware que
estamos diseando, haciendo que diseemos de forma similar a un programa software.

Diseo digital con VHDL

24

rea de Tecnologa Electrnica

Referencias

Referencias
[1] F. Machado Problemas Resueltos de Electrnica Digital. http://eciencia.urjc.es/handle/10115/5727
[2] F. Machado, S. Borromeo, N. Malpica, Diseo digital con esquemticos y FPGA, Ed. Dykinson,
2009.
[3] IEEE, Institute of Electrical and Electronics Engineers. Hhttp://www.ieee.org
[4] IEEE Standard for VHDL Register Transfer Level (RTL) Synthesis, IEEE Std 1076.6
[5] IEEE Standard for VHDL Register Transfer Level (RTL) Synthesis, IEEE Std 1076.6
[6] F. Machado, S.Borromeo Diseo de circuitos digitales con VHDL.
http://hdl.handle.net/10115/4045
[7]
Creative
Commons.
http://creativecommons.org/
Licencia
del
manual:
http://creativecommons.org/licenses/byncnd/3.0/
[8] http://www.xilinx.com/support/download.html
[9] http://www.digilentinc.com/Products/Detail.cfm?Prod=NEXYS4
[10]
http://www.xilinx.com/support/documentation/university/Vivado-Teaching/HDLDesign/2013x/Nexys4/Verilog/docs-pdf/Vivado_tutorial.pdf

Diseo digital con VHDL

25

Você também pode gostar