Escolar Documentos
Profissional Documentos
Cultura Documentos
Circuitos combinacionales
Curso 2014/2015
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
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:
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.
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.
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.
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)
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.
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
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
El IEEE (Institute of Electrical and Electronics Engineers) es la asociacin que ha estandarizado el VHDL.
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
10
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
12
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, ....
A
Z
13
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.
D
Z
B
E
S
14
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
00
01
10
11
S(1:0)
is
in
in
in
in
in
out
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC_VECTOR (1 downto 0);
STD_LOGIC);
15
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;
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).
A(3:0)
B(3:0)
Z(3:0)
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,
16
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".
17
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)
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
18
4. Codificadores, decodificadores,
convertidores de cdigo
A
F
E
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
Bit 0 correspondiente
con los segmentos F que
estar apagado
A
F
Bits correspondientes
con los segmentos B y C
que estarn luciendo
A
F
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
AN <= "1110";
Encendemos el nodo 0
when
when
when
when
Z="0000"
Z="0001"
Z="0010"
Z="0011"
else
else
else
else
-----
A,B,C,D,E,F
B,C
A,B,D,E,G
A,B,C,D,G
Primeros 4 nmeros
del convertidor a
siete segmentos
19
4. Codificadores, decodificadores,
convertidores de cdigo
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
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)
AN3-AN0
Controlamos qu
display se va a
encender
20
4. Codificadores, decodificadores,
convertidores de cdigo
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;
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
21
4. Codificadores, decodificadores,
convertidores de cdigo
SW0
SW1
SW2
SW3
SW4
SW5
SW6
SW7
I0
I1
I2
I3
I4
I5
I6
I7
BTN0
CODIF
LED0
LED1
LED2
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
EI
"1111"
"1110"
"0000"
AN(3:0)
<= 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
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
22
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";
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;
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
23
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.
24
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
25