Está en la página 1de 83

JJVS-09 1

Lenguaje VHDL
Cdigo para representar sistemas
digitales en VHDL
JJVS-09 2
Las secciones fundamentales que forman el
cdigo en VHDL son: librera (LIB!"#$ entidad
(%&'I'"# ( arquitectura (!CHI'%C')%#*
LIB!": contiene un conjunto de libreras que
contienen la definicin de datos$ estructuras$ etc*
%&'I'": %specifica las entradas+salidas del
circuito*
!,)I'%C')%: %-isten dos formas de de
describir un circuito$ estructural ( por su
comportamiento* %sta forma a su .e/ se di.ide en
flujo de datos ( algortmica*
JJVS-09 3
%&'ID!D
ENTITY 0)1 IS
23' ( !: IN BI'4
B: IN BI'4
5%L%C: IN BI'4
5!LID!: OUT BI'#4
END 0)14
JJVS-09 4
!rquitectura (estructural#
ARCHITECTURE %5')C')!L OF 0)1 IS
SIGNAL !1$B1$&35%L: BI'4
BEGIN
)6: ENTITY I&V PORT MAP (%785%L%C$ "78&35%L#4
)9: ENTITY !&D: PORT MAP (%978!$ %:78&35%L$ "78!1#4
):: ENTITY !&D: PORT MAP (B$ 5%L%C$ B1#4
);: ENTITY 3: PORT MAP (%978!1$ %:78B1$"785!LID!#4
END %5')C')!L4
JJVS-09 5
Descripcin estructural completa
ENTITY 0)1 IS
23' ( !: IN BI'4
B: IN BI'4
5%L%C: IN BI'4
5!LID!: OUT BI'#4
END 0)14
ARCHITECTURE %5')C')!L OF 0)1 IS
SIGNAL !1$B1$&35%L: BI'4
BEGIN
)6: ENTITY I&V PORT MAP (%785%L%C$ "78&35%L#4
)9: ENTITY !&D: PORT MAP (%978!$ %:78&35%L$ "78!1#4
):: ENTITY !&D: PORT MAP (B$ 5%L%C$ B1#4
);: ENTITY 3: PORT MAP (%978!1$ %:78B1$"785!LID!#4
END %5')C')!L4
JJVS-09 6
Descripcin completa
comportamental<algortmica
%&'I'" 0)1 I5
23' ( !: I& BI'4
B: I& BI'4
5%L%C: I& BI'4
5!LID!: 3)' BI'#4
%&D 0)14
arc=itecture Comportamental of 0)1 is
B%>I&
23C%55 (!$B$selec#
begin
if (selec7?6?# t=en
salida@7a4
else
salida@7b4
end if4
end process4
end Comportamental4
JJVS-09 7
Descripcin completa
comportamental<flujo de datos
%&'I'" 0)1 I5
23' ( !: I& BI'4
B: I& BI'4
5%L%C: I& BI'4
5!LID!: 3)' BI'#4
%&D 0)14
arc=itecture Alujo9 of 0)1 is
signal nosel$a-$b-: bit4
B%>I&
&osel @7 not selec4
!-@7 a !&D nosel4
B-@7 b !&D selec4
5alida@7 a- 3 b-4
end Alujo94
JJVS-09 8
Descripcin completa
comportamental<flujo de datos
(transferencia entre registros#
%&'I'" 0)1 I5
23' ( !: I& BI'4
B: I& BI'4
5%L%C: I& BI'4
5!LID!: 3)' BI'#4
%&D 0)14
arc=itecture Alujo: of 0)1 is
B%>I&
salida@7a B=en selec7?6? %L5% b4
end Alujo:4
JJVS-09 9
%ntidad
)na entidad estC compuesta por tres elementos:
1. Puertos de entrada-salida. Cada una de las seDales de entrada ( salida en una
entidad$ son llamadas puertos* Los puertos deben poseer nombre$ modo ( tipo de
datos*
2. Modos.
(a#0odo in
(b#0odo out
(c#0odo inout (puerto bidireccional con
Retroalimentacin dentro o fuera de la entidad)
(d) 0odo buffer (se comporta como salida
pero permite reali/ar retroalimentaciones internas#
Tipos de datos.
(a#stdElogic*
(b#Boolean*
(c#stdElogicE.ector (.ectores de bits#*
(d#Integer*
JJVS-09 10
%jercicio: Declare la entidad de la
!L) de cuatro bits mostrada*
!L)
In9 In: 3p5el 0odo
Cin Cout
esult %qual
%ntit( !L) is
2ort (
In9 : in stdElogicE.ector (; doBnto 6#4 << 2rimer 3perando
In: : in stdElogicE.ector (; doBnto 6#4 << 5egundo 3perando
3p5el : in stdElogicE.ector(6 to :#4 << 5elector de 3peracin
0ode : in stdElogic4 << 0odo !ritmFtico+Lgico
Cin : in stdElogic4 << !carreo de entrada
esult : out stdElogicE.ector (; doBnto 6#4 << esultado
Cout : out stdElogic4 << !carreo de salida
%qual : out stdElogic << 9 cuando In9 7 In:
#4
%nd %ntit( !L)4
JJVS-09 11
!rquitectura
)na arquitectura (architecture# se define como
la estructura que describe el funcionamiento de
una entidad*
Las arquitecturas se clasifican en:
9* %structural*
:* Auncional (comportamental#*
;* Alujo de datos*
JJVS-09 12
1212
Comparacin de los tipos de Arquitectura
Q U H A C E ? C M O E S T
C O M P U E S T A ?
Descripcin
Auncional

Descripcin
%structural
La descripcin estructural es mucho ms fcil de sintetizar que la descripcin funcional
por que se refiere a componentes fsicos concretos.
Sin embargo es ms difcil de desarrollar por que requiere de mayor experiencia del
diseador para hacer los diseos ms eficientes.
JJVS-09 13
Descripcin funcional
(comportamental#
comparador
La descripcin funcional e-pone la forma en que trabaja el
sistema4 se consideran las entradas ( salidas sin importar como
estF organi/ado en su interior*
:
:
a
b
c
arc=itecture funcional of comp is
begin
process(a$b#
begin
if a 7 b t=en
c @7?9?4
else
c @7?6?4
end if4
end process4
end funcional4
entit( comp is
2ort (
a : in 5'DEL3>ICEV%C'3 (9 doBnto 6#4
b : in 5'DEL3>ICEV%C'3 (9 doBnto 6#4
c : out 5'DEL3>IC#4
end comp4
JJVS-09 14
Ejeriio: %scriba la declaracin de
entidad para el siguiente circuito*
JJVS-09 15
'ipos de declaraciones
%n VHDL e-isten dos tipos de declaraciones:
se!e"ia#es ( o"!rre"tes*
Las secuenciales requieren (if-then-else# o (case#$
dentro de la instruccin process*
La declaracin concurrente se obtiene con when-
else o con ecuaciones booleanas*
JJVS-09 16
entit( compEconcurrente is
2ort ( a : in 5'DEL3>ICEV%C'3 (9 doBnto 6#4
b : in 5'DEL3>ICEV%C'3 (9 doBnto 6#4
c : out 5'DEL3>IC#4
end compEconcurrente4
arc=itecture concurrente of comp is
begin
c@7?9? B=en (a7b# else ?6?4
end concurrente4
arc=itecture funcional of comp is
begin
process(a$b#
begin
if a 7 b t=en
c @7?9?4
else
c @7?6?4
end if4
end process4
end funcional4
Ejeriio$ %scriba las declaraciones de las
arquitecturas secuencial ( concurrente para
un comparador de dos bits*
5ecuencial Concurrente
JJVS-09 17
Comparador de magnitud de G bits
(secuencial#
G
G
a
b
a7b
a8b
a@b
-
(
/
arc=itecture Be=a.ioral of compa is
begin
process(a$b# begin
if a7b t=en
-@7?9?4
elsif a8b t=en
(@7?9?4
else
/@7?9?4
end if4
end process4
end Be=a.ioral4
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*!LL4
use I%%%*5'DEL3>ICE!I'H*!LL4
use I%%%*5'DEL3>ICE)&5I>&%D*!LL4
entit( compa is
2ort ( a : in 5'DEL3>ICEV%C'3 (; doBnto 6#4
b : in 5'DEL3>ICEV%C'3 (; doBnto 6#4
- : out 5'DEL3>IC4
( : out 5'DEL3>IC4
/ : out 5'DEL3>IC#4
end compa4
JJVS-09 18
Declaraciones concurrentes
%n una declaracin concurrente no importa el
orden en que se escriban las seDales$ (a que el
resultado para determinada funcin sera el
mismo*
%n VHDL e-isten tres tipos de declaraciones
concurrentes:
%.De#araio"es o"diio"a#es asi&"adas a !"a
se'a# (when-else#*
(.De#araio"es o"!rre"tes asi&"adas a
se'a#es.
).Se#ei*" de !"a se'a# (with-select-when).
JJVS-09 19
Declaraciones condicionales
asignadas a una seDal (when-else#*
La declaracin +,e"-e#se se utili/a para asignar
.alores a una seDal$ determinando as la ejecucin
de una condicin propia del diseDo*
%jemplo:
a b c f
6 6 6 9
6 6 9 6
6 9 6 6
6 9 9 9
9 6 6 6
9 6 9 6
9 9 6 9
9 9 9 9
entit( tabla is
2ort ( a$b$c : in 5'DEL3>IC4
f : out 5'DEL3>IC#4
end tabla4
arc=itecture Be=a.ioral of tabla is
begin
f @7 ?9? B=en (a7?6? and b7?6? and c7?6?# else
?9? B=en (a7?6? and b7?9? and c7?9?# else
?9? B=en (a7?9? and b7?9? and c7?6?# else
?9? B=en (a7?9? and b7?9? and c7?9?# else
?6?4

end Be=a.ioral4
JJVS-09 20
3peradores lgicos
Los operadores lgicos presentan el siguiente orden ( prioridad:
9* %-presiones entre parFntesis
:* Complementos
;* Auncion !&D
G* Auncin 3
%cuacin %n VHDL
,7 a I - * ( q7a or (- and (#
"7 a I b * c I d (7not(a or (b and c#or d#

JJVS-09 21
Declaraciones concurrentes
asignadas a seDales
Las funciones de salida se describen mediane la
ecuacin booleana que describe el
comportamiento de cada una de las compuertas*
JJVS-09 22
%jemplo:
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
use I%%%*5'DEL3>ICE)&5I>&%D4
entit( logic is
port(
a$b$c$d$e$f: in 5'DEL3>IC4
-9$-:$-;: out 5'DEL3>IC#4
end logic4
9
:
;
)9:!
JG6K
9
:
;
)G:!
JG;:
L
96
K
)9:C
JG6K
)M
&!&D
9
:
;
)::!
G6JJ
M
H
G
)::B
G6JJ
.%
.(
.)
a
/

d
e
0
arc=itecture booleana of logic is
begin
-9@7 a -nor b4
-:@7 (((c and d# or (a -nor b##nand
((c and d# and(e -nor f###4
-;@7(c and d# and (e -nor f#4
end booleana4
JJVS-09 23
5eleccin de una seDal
(Bit=<select<B=en#
%sta declaracin se utili/a para asignar un .alor
a una seDal con base en el .alor de otra seDal
pre.iamente seleccionada*
a(6# a(9# C
6 6 9
6 9 6
9 6 9
9 9 6
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( arq is
port(
a : in 5'DEL3>ICEV%C'3(9 doBnto 6#4
C : out 5'DEL3>IC#4
end arq4
arc=itecture arq of arq is
begin
Bit= a select
c@7?9? B=en N66N$
?6? B=en N69N$
?9? B=en N96N$
?6? B=en ot=ers4
end arq4
JJVS-09 24
%jercicio
DiseDe un circuito combinacional que detecte
nOmeros primos de G bits* ealice la tabla de
.erdad ( elabore un programa que describa su
funcin* )tilice instrucciones del tipo with-
select-when*
arc=itecture detecta of primos is
begin
Bit= 1 select
A@7 ?9? B=en N6669N$
?9? B=en N6696N$
?9? B=en N6699N$
?9? B=en N6969N$
?9? B=en N6999N$
?9? B=en N9699N$
?9? B=en N9996N$
?6? B=en ot=ers4
end detecta4
entit( primos is
port(
1 : in 5'DEL3>ICEV%C'3(; doBnto 6 #4
A : out 5'DEL3>IC
#4
end primos4
JJVS-09 25
2rogramacin mediante
declaraciones secuenciales
! diferencia de una declaracin concurrente$
una secuencial debe ejecutarse en el orden en
que aparece ( formar parte de un proceso
(process#*

Declaracin i0-t,e"-e#se
JJVS-09 26
%jemplo de un comparador
:
:
a
b
c
arc=itecture funcional of comp is
begin
process(a$b#
begin
if a 7 b t=en
c @7?9?4
else
c @7?6?4
end if4
end process4
end funcional4
entit( comp is
2ort (
a : in 5'DEL3>ICEV%C'3 (9 doBnto 6#4
b : in 5'DEL3>ICEV%C'3 (9 doBnto 6#4
c : out 5'DEL3>IC#4
end comp4
JJVS-09 27
2ara mCs condiciones (8:#
JJVS-09 28
Comparador de magnitud de G bits
(secuencial#
G
G
a
b
a7b
a8b
a@b
-
(
/
arc=itecture Be=a.ioral of compa is
begin
process(a$b# begin
if a7b t=en
-@7?9?4
elsif a8b t=en
(@7?9?4
else
/@7?9?4
end if4
end process4
end Be=a.ioral4
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*!LL4
use I%%%*5'DEL3>ICE!I'H*!LL4
use I%%%*5'DEL3>ICE)&5I>&%D*!LL4
entit( compa is
2ort ( a : in 5'DEL3>ICEV%C'3 (; doBnto 6#4
b : in 5'DEL3>ICEV%C'3 (; doBnto 6#4
- : out 5'DEL3>IC4
( : out 5'DEL3>IC4
/ : out 5'DEL3>IC#4
end compa4
JJVS-09 29
%jercicio

DiseDe un comparador de dos nOmeros ! ( B$


cada uno formado por dos bits$ la salida del
comparador tambiFn es de dos bits ( estC
representada por la .ariable P de tal forma que
s:
!7B entonces P799
!@B entonces P769
!8B entonces P796
JJVS-09 30
3peraciones relacionales

5e usan para e.aluar la igualdad$ desigualdad


o la magnitud en una e-presin* Los
operadores de igualdad ( desigualdad se
definen en todos los tipos de datos* Los
operadores de magnitud (@$@7$8 ( 87# son
aplicados en tipos escalares*
Operador Si&"i0iado
1 I&!a#
21 Di0ere"te
3 Me"or
31 Me"or o i&!a#
4 Ma5or
41 Ma5or o i&!a#
JJVS-09 31
'ipos de datos : %scalares
5e definen mediante la palabra reser.ada RANGE.

%nteros*

TYPE b(te IS RANGE 6 '3 :MM4

TYPE inde- IS RANGE J DO6NTO 94

TYPE integer IS RANGE <:9GJGK;HGK TO:9GJGK;HGK4<<

eales

TYPE ni.el IS RANGE 6*6 TO M4

TYPE real IS RANGE <9*6%;K TO 9*6%;K4 <<predefinido

Asicos

%numerados
JJVS-09 32
'ipos lgicos estCndar
Tipo Si&"i0iado
7U7 Valor no iniciali/ado
7.7 Valor fuerte desconocido
787 3 fuerte
7%7 9 fuerte
797 !lta impedancia
767 Valor dFbil desconocido
7L7 6 dFbil
7H7 9 dFbil
7-7 &o importa (don?t care#
JJVS-09 33
Buffer tri<estado

%stos tienen di.ersas aplicaciones (a sea como


salidas de sistemas (modo buffer# o como parte
integral de un circuito*
arc=itecture secuencial of QbufferQ is
begin

process (entrada$ enable# begin
if (enable7?9?#t=en
salida@7entrada4
else
salida@7?P?4
end if4
end process4
end secuencial4
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( QbufferQ is
port(
entrada$enable : in 5'DEL3>IC4
salida : out 5'DEL3>IC
#4
end QbufferQ4
JJVS-09 34
0ultiple-ores

%mplee with-select-
when para diseDar el
circuito (no considere
las seDales 5'B9 (
5'B:#*

DiseDe el circuito
empleando
ecuaciones
booleanas*
16
H
19
M
1:
G
1;
;
"6
96
"9
99
":
9:
";
9;
!
9G
B
:
5'B9
9
5'B:
9M
P1
J
P"
L
)9
GM;L
JJVS-09 35
0ultiple-or
entit( mu-: is
port(
a$b$c$d$sel : in 5'DEL3>ICEV%C'3(9 doBnto 6#4
/ : out 5'DEL3>ICEV%C'3(9 doBnto 6#
#4
end mu-:4
arc=itecture mu-: of mu-: is
begin
Bit= sel select
/@7 a B=en N66N$
b B=en N69N$
c B=en N96N$
d B=en ot=ers4
end mu-:4
JJVS-09 36
0edio sumador
Implemente el circuito en VHDL*
JJVS-09 37
0edio sumador
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( medsum is
port(
a$b : in 5'DEL3>IC4
s$c : out 5'DEL3>IC#4
end medsum4
<<RR %nd of automaticall( maintained section
arc=itecture medsum of medsum is
begin
s@7a -or b4
c@7a and b4
end medsum4
JJVS-09 38
'area para entregar el 9:+&o.
!ultiplexor de " canales a 1
#ecodificador de $%# a & segmentos
'egistro con carga paralela( con
habilitacin externa y reset asncrono.
Sumador completo de 1 bit
JJVS-09 39
3peradores ( tipos de datos
JJVS-09 40
5obrecarga de operadores
(sintFsis#
JJVS-09 41
5obre carga de operadores
JJVS-09 42
Con.ersiones
entre
tipo de datos
JJVS-09 43
Con.ersiones
signal s9$s:$s;$sG$sM$sH :stdElogicE.ector(; doBnto 6#4
signal u9$u:$u;$uG$uM$uH$uJ :unsigned(; doBnto 6#4
begin
u9@7s94
u:@7M
s:@7u;4
s;@7M4
u9@7unsigned(s9#4
u:@7toEunsigned(M$G#4
s:@7stdElogicE.ector(u;#4
s;@7stdElogicE.ector(toEunsigned(M$G##4
{! ! error tipos de datos diferentes}
{correcto! ! !}
JJVS-09 44
Concatenacin S
JJVS-09 45
Corrimiento con el operador S
!lgunas .eces no es posible sinteti/ar un corrimiento
( se emplea el operador concatenacin (S#*
JJVS-09 46
%structuras bCsicas
mediante declaraciones secuenciales
Decodificador BCD+D%C
6
9
:
;
G
M
H
J
K
L
19
1:
1;
1G
arc=itecture secuencial of decEbcdEdec is
begin
process (-# begin
if -7N6666N t=en
s6@7?9?4
elsif -7N6669N t=en
s9@7?9?4
elsif -7N6696N t=en
s:@7?9?4
elsif -7N6699N t=en
s;@7?9?4
elsif -7N6966N t=en
sG@7?9?4
elsif -7N6969N t=en
sM@7?9?4
elsif -7N6996N t=en
sH@7?9?4
elsif -7N6999N t=en
sJ@7?9?4
elsif -7N9666N t=en
sK@7?9?4
else
sL@7?9?4
end if4
end process4
end secuencial4
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( decEbcdEdec is
port(
- : in 5'DEL3>ICEV%C'3(; doBnto 6#4
s6$s9$s:$s;$sG$sM$sH$sJ$sK$sL : out 5'DEL3>IC#4
end decEbcdEdec4
JJVS-09 47
%jercicio
(; qui/ 7 9 punto de e-amen#
DiseDe un decodificador de BCD a J segmentos*
!
B
C
D
%
A
>
9
:
G
K
JJVS-09 48
%mpleando C!5%
arc=itecture secuencial of bcdJseg is
begin
process (!# begin
case ! is
B=en N6666N 78 d@7N6666669N4
B=en N6669N 78 d@7N9669999N4
B=en N6696N 78 d@7N6696696N4
B=en N6699N 78 d@7N6666996N4
B=en N6966N 78 d@7N9669966N4
B=en N6969N 78 d@7N6966966N4
B=en N6996N 78 d@7N6966666N4
B=en N6999N 78 d@7N6669996N4
B=en N9666N 78 d@7N6666666N4
B=en N9669N 78 d@7N6666966N4
B=en ot=ers 78 d@7N9999999N4
end case4
end process4
end secuencial4
JJVS-09 49
De#araio"es o"diio"a#es
asi&"adas a !"a se'a#
JJVS-09 50
%jemplo: Codificador de prioridad
,ui/: DiseDe el codificador empleando when-else
(declaracin condicional a seDales#*
JJVS-09 51
Implementacin (9#
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( prioEencoder is
port(
r : in 5'DEL3>ICEV%C'3(G doBnto 9#4
pcode : out 5'DEL3>ICEV%C'3(: doBnto 6#
#4
end prioEencoder4
arc=itecture arqEB=en of prioEencoder is
begin
pcode@7N966N B=en r(G#7?9? else
N699N B=en r(;#7?9? else
N696N B=en r(:#7?9? else
N669N B=en r(9#7?9? else
N666N4
end arqEB=en4
JJVS-09 52
Implementacin (:#
arc=itecture arqEB=en of prioEencoder is
begin
Bit= r select
pcode@7 N966N B=en N9<<<N$
N699N B=en N69<<N$
N669N B=en N6669N$
N666N B=en ot=ers4
end arqEB=en4
JJVS-09 53
DiseDe el siguiente circuito empleando
with-select-when
JJVS-09 54
Implementacin
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( decoder is
port(
a : in 5'DEL3>ICEV%C'3(9 doBnto 6#4
en : in 5'DEL3>IC4
( : out 5'DEL3>ICEV%C'3(; doBnto 6#
#4
end decoder4
arc=itecture arqEB=en of decoder is
signal s:stdElogicE.ector(: doBnto 6 #4
begin
s@7enSa4
Bit= s select
(@7 N6666N B=en N6<<N$
N6669N B=en N966N$
N6669N B=en N969N$
N6696N B=en N996N$
N9666N B=en ot=ers4
end arqEB=en4
JJVS-09 55
Comparacin
concurrente .s secuencial
%-isten declaraciones equi.alentes en ambas
arquitecturas$ sin embargo$ un if o case permite
cualquier nOmero ( tipo de declaraciones
secuenciales es sus ramas ( as es mCs fle-ible (
.ersCtil* )n uso disciplinado puede =acer el
cdigo mCs descripti.o ( aOn =acer un circuito
mCs eficiente*
JJVS-09 56
%jemplos
JJVS-09 57
Cdigo intuiti.o
JJVS-09 58
Cdigo intuiti.o
JJVS-09 59
0emoria no asignada
2ara pre.enir este error$ deberCn seguirse las
siguientes reglas:
9*Inclu(e todas las seDales de entrada en la lista
sensible*
:*Incluir el else en el if*
;*!signar un .alor a cada seDal en cada rama*
JJVS-09 60
0emoria no asignada
JJVS-09 61
Constantes
JJVS-09 62
)so de constantes:
sumador de G bits
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
use ieee*numericEstd*all4
entit( sumadorEcEcarr( is
port(
a : in 5'DEL3>ICEV%C'3(; doBnto 6#4
b : in 5'DEL3>ICEV%C'3(; doBnto 6#4
sum : out 5'DEL3>ICEV%C'3(; doBnto 6#4
cout : out 5'DEL3>IC#4
end sumadorEcEcarr(4
arc=itecture concurrente of sumadorEcEcarr( is
signal aEe-t$bEe-t$sumEe-t : unsigned(G doBnto 6#4
begin
aEe-t@7unsigned(?6?Sa#4
bEe-t@7unsigned(?6?Sb#4
sumEe-t@7aEe-tIbEe-t4
sum@7stdElogicE.ector(sumEe-t(; doBnto 6##4
cout@7sumEe-t(G#4
end concurrente4
JJVS-09 63
)sando constantes
para el cdigo
)na mejor opcin es definir el tamaDo del sumador
como una constante$ de esta manera modificando
este .alor el cdigo sir.e para cualquier tamaDo de
sumador*
arc=itecture concurrente of sumadorEccE.ar is
constant &:integer:7K4
signal aEe-t$bEe-t$sumEe-t : unsigned(& doBnto 6#4
begin
aEe-t@7unsigned(?6?Sa#4
bEe-t@7unsigned(?6?Sb#4
sumEe-t@7aEe-t I bEe-t4
sum@7stdElogicE.ector(sumEe-t(&<9 doBnto 6##4
cout@7sumEe-t(&#4
end concurrente4
entit( sumadorEccE.ar is
port(
a : in 5'DEL3>ICEV%C'3(J doBnto 6#4
b : in 5'DEL3>ICEV%C'3(J doBnto 6#4
sum : out 5'DEL3>ICEV%C'3(J doBnto 6#4
cout : out 5'DEL3>IC#4
end sumadorEccE.ar4
Las constantes permiten tener un cdigo mCs fCcil
de entender ( mantener*
JJVS-09 64
>eneric
5e emplea para pasar informacin dentro de
una entidad ( componente* "a que el generic
no puede ser modificado dentro de la
arquitectura$ este funciona como una
constante*
JJVS-09 65
5umador con generic
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
use ieee*numericEstd*all4
entit( sumE.ar: is
generic (&:integer:7G#4
port(
b : in 5'DEL3>ICEV%C'3(&<9 doBnto 6#4
a : in 5'DEL3>ICEV%C'3(&<9 doBnto 6#4
suma : out 5'DEL3>ICEV%C'3(&<9 doBnto 6#4
cout : out 5'DEL3>IC#4
end sumE.ar:4
arc=itecture gen of sumE.ar: is
signal aEe-t$bEe-t$sumEe-t : unsigned(& doBnto 6#4
begin
aEe-t@7unsigned(?6?Sa#4
bEe-t@7unsigned(?6?Sb#4
sumEe-t@7aEe-t I bEe-t4
sum!@7stdElogicE.ector(sumEe-t(&<9 doBnto 6##4
cout@7sumEe-t(&#4
end gen4
JJVS-09 66
ecomendaciones

)se los tipos de datos std_logic ( std_logic_vector, en la


declaracin de entidad de puerto ( para las seDales internas
que en.uel.en operaciones no aritmFticas*

)se el paquete numeric_std ( sus tipos de datos unsigned (


signed para seDales internas que en.uel.en operaciones
aritmFticas*

)se la con.ersin de datos de la tabla para con.ertir seDales (


e-presiones*

)sar el tipo entero ( operadores aritmFticos para e-presiones


constantes ( arreglos pero no para sntesis (no usar como tipo
de datos para una seDal#*

)sar el tipo enumerado para los estados en una A50*


JJVS-09 67
%jemplo : >enere el cdigo
en VHDL para el siguiente circuito
Considere que (a e-isten los submdulos VHDL de =e-EtoEsseg ( dispEmu-*
JJVS-09 68
Cdigo de =e-EtoEsseg
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*!LL4
use I%%%*5'DEL3>ICE!I'H*!LL4
use I%%%*5'DEL3>ICE)&5I>&%D*!LL4
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*all4
entit( =e-EtoEsseg is
port(
=e- : in 5'DEL3>ICEV%C'3(; doBnto 6#4
dp : in stdElogic4
sseg: out 5'DEL3>ICE.ector(J doBnto 6##4
end =e-EtoEsseg4
arc=itecture secuencial of =e-EtoEsseg is
begin
process (=e-# begin
case =e- is
B=en N6666N 78 sseg(H doBnto 6#@7N9666666N4
B=en N6669N 78 sseg(H doBnto 6#@7N9999669N4
B=en N6696N 78 sseg(H doBnto 6#@7N6966966N4
B=en N6699N 78 sseg(H doBnto 6#@7N6996666N4
B=en N6966N 78 sseg(H doBnto 6#@7N6699669N4
B=en N6969N 78 sseg(H doBnto 6#@7N6696696N4
B=en N6996N 78 sseg(H doBnto 6#@7N6666696N4
B=en N6999N 78 sseg(H doBnto 6#@7N9999666N4
B=en N9666N 78 sseg(H doBnto 6#@7N6666666N4
B=en N9669N 78 sseg(H doBnto 6#@7N6696666N4
B=en N9696N 78 sseg(H doBnto 6#@7N6669666N4<<a
B=en N9699N 78 sseg(H doBnto 6#@7N6666699N4<<b
B=en N9966N 78 sseg(H doBnto 6#@7N9666996N4<<c
B=en N9969N 78 sseg(H doBnto 6#@7N6966669N4<<d
B=en N9996N 78 sseg(H doBnto 6#@7N6666966N4<<e
B=en ot=ers 78 sseg(H doBnto 6#@7N6669996N4<<f
end case4
sseg(J#@7dp4
end process4
end secuencial4
JJVS-09 69
Cdigo dispEmu- (9+:#
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*!LL4
use I%%%*5'DEL3>ICE!I'H*!LL4
use I%%%*5'DEL3>ICE)&5I>&%D*!LL4
entit( dispEmu- is
port (
clT$ reset: in stdElogic4
in;$ in:$ in9$ in6: in stdElogicE.ector(J doBnto 6#4
an: out stdElogicE.ector (; doBnto 6#4
sseg : out stdElogicE.ector (J doBnto 6##4
end dispEmu-4
JJVS-09 70
Cdigo dispEmu- (:+:#
process (sel $ in6$ in9 $ in:$ in;#
begin
case sel is
B=en N66N 78
an @7 N9996N4
sseg @7 in64
B=en N69N 78
an @7 N9969N4
sseg @7 in94
B=en N96N 78
an@7N9699N4
sseg@7in:4
B=en ot=ers 78
an@7N6999N4
sseg@7in;4
end case4
end process4
end arc=4
arc=itecture arc= of dispEmu- is
constant &: integer :79K4
signal qEreg $ qEne-t : unsigned(&<9 doBnto
6#4
signal sel: stdElogicE.ector
(9 doBnto 6#4
begin
process (clT$ reset# begin
if (reset7?9?# t=en
qEreg @7(ot=ers78?6?# 4
elsif (clT?e.ent and clT7?9?# t=en
qEreg @7 qEne-t4
end if 4
end process 4
qEne-t@7qEregI94
sel@7stdElogicE.ector(qEreg(&<9 doBnto &<:##4
JJVS-09 71
%ntidad
librar( I%%%4
use I%%%*5'DEL3>ICE99HG*!LL4
use I%%%*5'DEL3>ICE!I'H*!LL4
use I%%%*5'DEL3>ICE)&5I>&%D*!LL4
entit( =e-EtoEssegEtest is
port (
clT: in stdElogic4
sB : in stdElogicE.ector(J doBnto 6#4
an : out stdElogicE.ector(; doBnto 6#4
sseg: out stdElogicE.ector(J doBnto 6##4
end =e-EtoEssegEtest4
JJVS-09 72
!rquitectura
arc=itecture Be=a.ioral of =e-EtoEssegEtest is
signal inc: stdElogicE.ector(J doBnto 6#4
signal led;$led:$led9$led6:stdElogicE.ector(J doBnto 6#4
begin
inc@7sBI94
ssegEunitE6:entit( BorT*=e-EtoEsseg
port map(=e-78sB(; doBnto 6#$dp78?6?$sseg78led6#4
ssegEunitE9:entit( BorT*=e-EtoEsseg
port map(=e-78sB(J doBnto G#$dp78?6?$sseg78led9#4
ssegEunitE::entit( BorT*=e-EtoEsseg
port map(=e-78inc(; doBnto 6#$dp78?9?$sseg78led:#4
ssegEunitE;:entit( BorT*=e-EtoEsseg
port map(=e-78inc(J doBnto G#$dp78?9?$sseg78led;#4
dispEunit:entit( BorT*dispEmu-

port map(
clT 78 clT$ reset78?6?$
in678led6$ in9 78 led9$ in:78led:$ in;78led;$
an78an$ sseg78sseg# 4
end Be=a.ioral4


JJVS-09 73
%jercicio

Implemente los circuitos de la pCgina HK (


JM*
JJVS-09 74
5umador con signo:
(por equipo#
Considere que todos los componentes que
forman este dispositi.o (a fueron creados*
:
JJVS-09 75

Versin completa

Versin simplificada
&Omeros de punto flotante
1
s
exp f
:; () : %
: ; %
JJVS-09 76
5umador de punto flotante
JJVS-09 77
5umador fp

%l e-ponente ( mantisa tienen formato


unsigned*

La representacin es normali/ada$ el 05B


debe ser uno* 5i la magnitud de la operacin es
menor que la magnitud no cero normali/ada$
estC deberC ser con.ertida a cero*
1
s
exp f
JJVS-09 78
2asos para sumar nOmeros
de punto flotante
9* 3rdenamiento* 5eleccionar el nOmero con la magnitud ma(or*
:* !lineamiento* Cambiar el e-ponente del nOmero menor al del
nOmero ma(or$ empleando corrimientos*
;* 5uma o resta* 5umar si los nOmeros tienen el mismo signo$ (
restar en caso contrario*
G* &ormali/ar* !justar el resultado a un formato normali/ado* 'res
procedimientos pueden ser necesarios:

DespuFs de una resta pueden surgir ceros despuFs del


punto*

DespuFs de una resta el resultado puede ser tan pequeDo


que deba ser con.ertido a cero*

5i se suman puede surgir un acarreo*


JJVS-09 79
%ntidad
e-p9(;:6# e-pEout(;:6#
e-p:(;:6# fracEout(J:6#
frac9(J:6# signEout
frac:(J:6#
sign9
sign:
)M
fpEadder
JJVS-09 80
5umador de punto flotante 9+:
arc=itecture arc= of fpEadder is
signal signb$ signs: stdElogic4
signal e-pb$ e-ps$ e-pn: unsigned(; doBnto 6#4
signal fracb$ fracs$ fraca$ fracn: unsigned(J doBnto 6#4
signal sumEnorm: unsigned(J doBnto 6#4
signal e-pEdiff: unsigned(; doBnto 6#4
signal sum: unsigned(K doBnto 6#4 <<one e-tra for carr(
signal lead6: unsigned(: doBnto 6#4
begin
<< 9st stage: sort to find t=e larger number
process (sign9$ sign:$ e-p9$ e-p:$ frac9$ frac:#
begin
if (e-p9 S frac9# 8 (e-p: S frac:# t=en
signb @7 sign94
signs @7 sign:4
e-pb @7 unsigned(e-p9#4
e-ps @7 unsigned(e-p:#4
fracb @7 unsigned(frac9#4
fracs @7 unsigned(frac:#4
else
signb @7 sign:4
signs @7 sign94
e-pb @7 unsigned(e-p:#4
e-ps @7 unsigned(e-p9#4
fracb @7 unsigned(frac:#4
fracs @7 unsigned(frac9#4
end if4

<< :nd stage: align smaller number
e-pEdiff @7 e-pb < e-ps4
Bit= e-pEdiff select
fraca @7
fracs B=en N6666N$
N6N S fracs(J doBnto 9# B=en N6669N$
N66N S fracs(J doBnto :# B=en N6696N$
N666N S fracs(J doBnto :# B=en N6699N$
N6666N S fracs(J doBnto G# B=en N6966N$
N66666N S fracs(J doBnto M# B=en N6969N$
N666666N S fracs(J doBnto H# B=en N6996N$
N6666666N S fracs(J# B=en N6999N$
N66666666N
JJVS-09 81
5umador de punto flotante :+:
<< normali/e Bit= special conditions
process(sum$sumEnorm$e-pb$lead6#
begin
if sum(K#7?9? t=en << B+ carr( out4 s=ift frac to rig=t
e-pn @7 e-pb I 94
fracn @7 sum(K doBnto 9#4
elsif (lead6 8 e-pb# t=en << too small to normali/e4
e-pn @7 (ot=ers78?6?#4 << set to 6
fracn @7 (ot=ers78?6?#4
else
e-pn @7 e-pb < lead64
fracn @7 sumEnorm4
end if4
end process4
<< form output
signEout @7 signb4
e-pEout @7 stdElogicE.ector(e-pn#4
fracEout @7 stdElogicE.ector(fracn#4
end arc=4
<< ;rd stage: add+substract
sum @7 (?6? S fracb# I (?6? S fraca# B=en signb7signs else
(?6? S fracb# < (?6? S fraca#4
<< Gt= stage: normali/e
<< count leading 6s
lead6 @7 N666N B=en (sum(J#7?9?# else
N669N B=en (sum(H#7?9?# else
N696N B=en (sum(M#7?9?# else
N999N B=en (sum(G#7?9?# else
N966N B=en (sum(;#7?9?# else
N969N B=en (sum(:#7?9?# else
N996N B=en (sum(9#7?9?# else
N999N4
<< s=ift significand according to leading 6
Bit= lead6 select
sumEnorm @7
sum(J doBnto 6# B=en N666N$
sum(H doBnto 6# S ?6? B=en N669N$
sum(M doBnto 6# S N66N B=en N696N$
sum(G doBnto 6# S N666N B=en N699N$
sum(; doBnto 6# S N6666N B=en N966N$
sum(: doBnto 6# S N66666N B=en N969N$
sum(9 doBnto 6# S N666666N B=en N996N$
sum(6# S N6666666N B=en ot=ers4
JJVS-09 82
Circuito de prueba
<< instantiate fp adder
fpEaddEunit: entit( BorT*fpEadder
port map(
sign978sign9$ sign:78sign:$ e-p978e-p9$ e-p:78e-p:$
frac978frac9$ frac:78frac:$
signEout78signEout$ e-pEout78e-pEout$
fracEout78fracEout
#4
<< instantiate t=ree instances of =e- decoders
<< e-ponent
ssegEunitE6: entit( BorT*=e-EtoEsseg
port map(=e-78e-pEout$ dp78?6?$ sseg78led6#4
<< G L5Bs of fraction
ssegEunitE9: entit( BorT*=e-EtoEsseg
port map(=e-78fracEout(; doBnto 6#$
dp78?9?$ sseg78led9#4
<< G 05Bs of fraction
ssegEunitE:: entit( BorT*=e-EtoEsseg
port map(=e-78fracEout(J doBnto G#$
dp78?6?$ sseg78led:#4
<< sign
led; @7 N99999996N B=en signEout7?9? else << middle bar
N99999999N4 << blanT
<< instantiate J<seg L%D displa( time<multiple-ing module
dispEunit: entit( BorT*dispEmu-
port map(
clT78clT$ reset78?6?$
in678led6$ in978led9$ in:78led:$ in;78led;$
an78an$ sseg78sseg
#4
end arc=4
librar( ieee4
use ieee*stdElogicE99HG*all4
use ieee*numericEstd*all4
entit( fpEadderEtest is
port(
clT: in stdElogic4
sB: in stdElogicE.ector(J doBnto 6#4
btn: in stdElogicE.ector(; doBnto 6#4
an: out stdElogicE.ector(; doBnto 6#4
sseg: out stdElogicE.ector(J doBnto 6#
#4
end fpEadderEtest4
arc=itecture arc= of fpEadderEtest is
signal sign9$ sign:: stdElogic4
signal e-p9$ e-p:: stdElogicE.ector(; doBnto 6#4
signal frac9$ frac:: stdElogicE.ector(J doBnto 6#4
signal signEout: stdElogic4
signal e-pEout: stdElogicE.ector(; doBnto 6#4
signal fracEout: stdElogicE.ector(J doBnto 6#4
signal led;$ led:$ led9$ led6:
stdElogicE.ector(J doBnto 6#4
begin
<< set up t=e fp adder input signals
sign9 @7 ?6?4
e-p9 @7 N9666N4
frac9@7 ?9? S sB(9# S sB(6# S N96969N4
sign: @7 sB(J#4
e-p: @7 N9666N4
frac: @7 ?9? S sB(H doBnto 6#4
JJVS-09 83
2rCctica
Comprobar el diseDo del
sumador de punto flotante

%-isten errores en el cdigo fuente$ corregirlos*

Verificar que los resultados obtenidos en los


displa(s de siete segmentos son los correctos*

También podría gustarte