Está en la página 1de 83

Lenguaje VHDL

Cdigo para representar sistemas digitales en VHDL

JJVS-09

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'": circuito* %specifica las entradas+salidas del

! ,)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 2

%&'ID!D

JJVS-09

ENTITY 0)1 IS 23 ' ( !: B: 5%L%C: 5!LID!: END 0)14

IN IN IN OUT

BI'4 BI'4 BI'4 BI'#4


3

!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

Descripcin estructural completa


ENTITY 0)1 IS 23 ' ( !: B: 5%L%C: 5!LID!: END 0)14 IN IN BI'4 BI'4 IN BI'4 OUT BI'#4

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 completa comportamental<algortmica


%&'I'" 0)1 I5 23 ' ( !: B: 5%L%C: 5!LID!: %&D 0)14 I& BI'4 I& BI'4 I& BI'4 3)' BI'#4

JJVS-09

arc=itecture Comportamental of 0)1 is B%>I& 2 3C%55 (!$B$selec# begin if (selec7?6?# t=en salida@7a4 else salida@7b4 end if4 end process4 end Comportamental4

Descripcin completa comportamental<flujo de datos


%&'I'" 0)1 I5 23 ' ( !: B: 5%L%C: 5!LID!: %&D 0)14 I& I& I& 3)' BI'4 BI'4 BI'4 BI'#4

arc=itecture Alujo9 of 0)1 is signal nosel$a-$b-: bit4 B%>I& &osel @7 not selec4 !-@7 a !&D B-@7 b !&D 5alida@7 a- 3 end Alujo94
JJVS-09

nosel4 selec4 b-4


7

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

%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*
JJVS-09

(c#stdElogicE.ector (.ectores de bits#* (d#Integer*

%jercicio: Declare la entidad de la !L) de cuatro bits mostrada*


In9 In: 3p5el 0odo Cout

!L)

Cin

%ntit( !L) is 2ort ( In9 : In: : 3p5el : 0ode : Cin : esult : Cout : %qual : #4 in in in in in out out out

esult

%qual

stdElogicE.ector (; doBnto 6#4 stdElogicE.ector (; doBnto 6#4 stdElogicE.ector(6 to :#4 stdElogic4 stdElogic4 stdElogicE.ector (; doBnto 6#4 stdElogic4 stdElogic

<< 2rimer 3perando << 5egundo 3perando << 5elector de 3peracin << 0odo !ritmFtico+Lgico << !carreo de entrada << esultado << !carreo de salida << 9 cuando In9 7 In:
10

JJVS-09 %nd %ntit( !L)4

!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

11

Comparacin de los tipos de Arquitectura

Q U H AC E ? Descripcin Auncional

C M O E ST C O M PU E S TA ? 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 dise ador para hacer los dise os ms eficientes.

1212
JJVS-09 12

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

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

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 13 end funcional4

Ejer i io: %scriba la declaracin de entidad para el siguiente circuito*

JJVS-09

14

'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 whenelse o con ecuaciones booleanas*

JJVS-09

15

Ejer i io$ %scriba las declaraciones de las arquitecturas secuencial ( concurrente para un comparador de dos bits*

5ecuencial
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
JJVS-09

Concurrente
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
16

Comparador de magnitud de G bits (secuencial#


a G a7b a8b b G a@b ( /
arc=itecture Be=a.ioral of compa is begin process(a$b# begin 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

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
17

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 #ara io"es o"di io"a#es asi&"adas a !"a se'a# (when-else#* (.De #ara io"es o" !rre"tes asi&"adas a se'a#es. ).Se#e
JJVS-09

i*" de !"a se'a# (with-select-when).


18

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 6 6 6 6 9 9
JJVS-09

entit( tabla is 2ort ( a$b$c : in 5'DEL3>IC4 f : out 5'DEL3>IC#4 end tabla4 c 6 9 6 9 6 9 6 9 f 9 6 6 9 6 6 9 9 arc=itecture Be=a.ioral of tabla is begin f @7 ?9? B=en ?9? B=en ?9? B=en ?9? B=en ?6?4 (a7?6? and b7?6? and c7?6?# else (a7?6? and b7?9? and c7?9?# else (a7?9? and b7?9? and c7?6?# else (a7?9? and b7?9? and c7?9?# else
19

b 6 6 9 9 6 6 9 9

9 9

end Be=a.ioral4

3peradores lgicos
Los operadores lgicos presentan el siguiente orden ( prioridad: 9* %-presiones entre parFntesis :* Complementos ;* Auncion !&D G* Auncin 3 %cuacin ,7 a I - * ( "7 a I b * c I d
JJVS-09

%n VHDL q7a or (- and (# (7not(a or (b and c#or d#


20

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

21

)::!
9 ; : 9 G6JJ : ;

.%

%jemplo:

)G:!

)9:!
9 ;

JG;:

)M
.(

: JG6K L

)9:C
K 96 G JG6K

&!&D

)::B
e 0
M H G6JJ

.)

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

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

22

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# 6 6 9 9 a(9# 6 9 6 9 C 9 6 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

23

%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 withselect-when* arc=itecture detecta of primos is
begin entit( primos is port( 1 : in 5'DEL3>ICEV%C'3 (; doBnto 6 #4 A : out 5'DEL3>IC #4 end primos4 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
24

JJVS-09

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

25

%jemplo de un comparador
: :

a b

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

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
26

JJVS-09

2ara mCs condiciones (8:#

JJVS-09

27

Comparador de magnitud de G bits (secuencial#


a G a7b a8b b G a@b ( /
arc=itecture Be=a.ioral of compa is begin process(a$b# begin 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

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
28

%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

29

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 1 21 3 31 4 41 I&!a# Di0ere"te Me"or Me"or o i&!a# Ma5or Ma5or o i&!a#
30

Si&"i0i ado

JJVS-09

'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<< TYPE ni.el IS RANGE 6*6 TO M4 TYPE real IS RANGE <9*6%;K TO 9*6%;K4 <<predefinido

eales

Asicos %numerados
JJVS-09 31

'ipos lgicos estCndar


Tipo 7U7 7.7 787 7%7 797 767 7L7 7H7 7-7 Si&"i0i ado Valor no iniciali/ado Valor fuerte desconocido 3 fuerte 9 fuerte !lta impedancia Valor dFbil desconocido 6 dFbil 9 dFbil &o importa (don?t care#

JJVS-09

32

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
33

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

0ultiple-ores

%mplee with-selectwhen para diseDar el circuito (no considere las seDales 5'B9 ( 5'B:#* DiseDe el circuito empleando ecuaciones booleanas*

)9
H M G ; 96 99 9: 9; 9G : 9 9M 16 19 1: 1; "6 "9 ": "; ! B 5'B9 5'B: GM;L P1 P" J L

JJVS-09

34

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 35

0edio sumador

Implemente el circuito en VHDL*


JJVS-09 36

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 37

'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

38

3peradores ( tipos de datos

JJVS-09

39

5obrecarga de operadores (sintFsis#

JJVS-09

40

5obre carga de operadores

JJVS-09

41

Con.ersiones entre tipo de datos

JJVS-09

42

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

{! ! error tipos de datos diferentes }

u9@7unsigned(s9#4 u:@7toEunsigned(M$G#4 s:@7stdElogicE.ector(u;#4 s;@7stdElogicE.ector(toEunsigned(M$G##4

{correcto ! ! ! }

JJVS-09

43

Concatenacin S

JJVS-09

44

Corrimiento con el operador S


!lgunas .eces no es posible sinteti/ar un corrimiento ( se emplea el operador concatenacin (S#*

JJVS-09

45

%structuras bCsicas mediante declaraciones secuenciales


Decodificador BCD+D%C
6 9 : ; G M H J K L 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 46

19 1: 1; 1G

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

%jercicio (; qui/ 7 9 punto de e-amen#


DiseDe un decodificador de BCD a J segmentos*

9 : G K

! B C D % A >

JJVS-09

47

%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 48

De #ara io"es o"di io"a#es asi&"adas a !"a se'a#

JJVS-09

49

%jemplo: Codificador de prioridad

,ui/: DiseDe el codificador empleando when-else (declaracin condicional a seDales#*


JJVS-09 50

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 51

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 52

DiseDe el siguiente circuito empleando with-select-when

JJVS-09

53

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

54

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

55

%jemplos

JJVS-09

56

Cdigo intuiti.o

JJVS-09

57

Cdigo intuiti.o

JJVS-09

58

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

59

0emoria no asignada

JJVS-09

60

Constantes

JJVS-09

61

)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

62

)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 entit( sumadorEccE.ar is constant &:integer:7K4 signal aEe-t$bEe-t$sumEe-t : unsigned(& doBnto 6#4 port( begin a : in 5'DEL3>ICEV%C'3 (J doBnto 6#4 aEe-t@7unsigned(?6?Sa#4 b : in 5'DEL3>ICEV%C'3 (J doBnto 6#4 bEe-t@7unsigned(?6?Sb#4 sum : out 5'DEL3>ICEV%C'3 (J doBnto 6#4 sumEe-t@7aEe-t I bEe-t4 cout : out 5'DEL3>IC#4 sum@7stdElogicE.ector(sumEe-t(&<9 doBnto 6##4 end sumadorEccE.ar4 cout@7sumEe-t(&#4 end concurrente4

Las constantes permiten tener un cdigo mCs fCcil de entender ( mantener* JJVS-09 63

>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

64

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

65

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*
66

JJVS-09

%jemplo : >enere el cdigo en VHDL para el siguiente circuito

Considere que (a e-isten los submdulos VHDL de =e-EtoEsseg ( dispEmu-*


JJVS-09 67

Cdigo de =e-EtoEsseg
arc=itecture secuencial of =e-EtoEsseg is begin 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 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

68

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

69

Cdigo dispEmu- (:+:#


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

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
70

%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

71

!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*dispEmuport map( clT 78 clT$ reset78?6?$ in678led6$ in9 78 led9$ in:78led:$ in;78led;$ an78an$ sseg78sseg# 4 end Be=a.ioral4
JJVS-09 72

%jercicio

Implemente los circuitos de la pCgina HK ( JM*

JJVS-09

73

5umador con signo: (por equipo#

Considere que todos los componentes que forman este dispositi.o (a fueron creados*
JJVS-09 74

&Omeros de punto flotante

Versin completa
% : :; ()

Versin simplificada
% ;

1 exp f
JJVS-09 75

5umador de punto flotante

JJVS-09

76

5umador fp
1 exp f

%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*

JJVS-09

77

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*
78

JJVS-09

%ntidad
)M
e -p 9(; :6 # e -p Eo ut(; :6 # e -p :(; :6 # fracEo ut(J :6 # frac9 (J :6 # frac: (J :6 # sig n9 sig n: sig nEo ut

fpEadder
JJVS-09 79

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 JJVS-09 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

80

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

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
81

librar( ieee4 use ieee*stdElogicE99HG*all4 use ieee*numericEstd*all4

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*dispEmuport map( clT78clT$ reset78?6?$ in678led6$ in978led9$ in:78led:$ in;78led;$ 82 an78an$ sseg78sseg #4 end arc=4

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 JJVS-09 e-p: @7 N9666N4 frac: @7 ?9? S sB(H doBnto 6#4

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*

JJVS-09

83

También podría gustarte