Está en la página 1de 24

Representación en VHDL

Laboratorio de Arquitectura de
Computadoras
Descripción de un sumador de 4 bits en VHDL

Oscar Alvarado Nava


oan@azc.uam.mx
Departamento de Electrónica
División de Ciencias Básicas e Ingenierı́a
Universidad Autónoma Metropolitana, Unidad Azcapotzalco

17-Primavera, mayo de 2017

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 1/24
Representación en VHDL

Contenido

1 Representación en VHDL
Estructural, generate, proceso, función, biblioteca y
sobrecarga

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 2/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Contenido

1 Representación en VHDL
Estructural, generate, proceso, función, biblioteca y
sobrecarga

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 3/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Entidad y adder4.vhdl

4 4 1 -- Diseno Logico , Oscar Alvarado Nava

a b 2
3 entity adder4 is
4 port (
5 -- puertos de entrada
adder4 6
7
a : in bit_vector (3 downto 0) ;
b : in bit_vector (3 downto 0) ;
8 ci : in bit ;
co ci 9
10
-- puertos de salida
r : out bit_vector (3 downto 0) ;
11 co : out bit
4 12 );
r 13 end entity adder4 ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 4/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Componente fulladd y alambres

adder4 a(3) b(3) a(2) b(2) a(1) b(1) a(0) b(0)


u3: x y u2: x y u1: x y u0: x y
fulladd fulladd fulladd fulladd
co cout cin c2 cout cin c1 cout cin c0 cout cin ci
s s s s

r(3) r(2) r(1) r(0)

15 architecture beh of adder4 is


16 -- fulladd como componente
17 component fulladd is
18 port (
19 -- puertos de entrada
20 x : in bit ;
21 y : in bit ;
22 cin : in bit ;
23 -- puertos de salida
24 s : out bit ;
25 cout : out bit
26 );
27 end component fulladd ;
28
29 -- senales para alambrar los fulladds
30 signal c0 , c1 , c2 : bit ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 5/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Instancias fulladd y alambrado (1/4)

adder4 a(3) b(3) a(2) b(2) a(1) b(1) a(0) b(0)


u3: x y u2: x y u1: x y u0: x y
fulladd fulladd fulladd fulladd
co cout cin c2 cout cin c1 cout cin c0 cout cin ci
s s s s

r(3) r(2) r(1) r(0)

31 begin
32 u0 : fulladd
33 port map (
34 -- puertos de entrada
35 x = > a (0) ,
36 y = > b (0) ,
37 cin = > ci ,
38 -- puertos de salida
39 s = > r (0) ,
40 cout = > c0
41 ) ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 6/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Instancias fulladd y alambrado (2/4)

adder4 a(3) b(3) a(2) b(2) a(1) b(1) a(0) b(0)


u3: x y u2: x y u1: x y u0: x y
fulladd fulladd fulladd fulladd
co cout cin c2 cout cin c1 cout cin c0 cout cin ci
s s s s

r(3) r(2) r(1) r(0)

42 u1 : fulladd
43 port map (
44 -- puertos de entrada
45 x = > a (1) ,
46 y = > b (1) ,
47 cin = > c0 ,
48 -- puertos de salida
49 s = > r (1) ,
50 cout = > c1
51 ) ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 7/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Instancias fulladd y alambrado (3/4)

adder4 a(3) b(3) a(2) b(2) a(1) b(1) a(0) b(0)


u3: x y u2: x y u1: x y u0: x y
fulladd fulladd fulladd fulladd
co cout cin c2 cout cin c1 cout cin c0 cout cin ci
s s s s

r(3) r(2) r(1) r(0)

52 u2 : fulladd
53 port map (
54 -- puertos de entrada
55 x = > a (2) ,
56 y = > b (2) ,
57 cin = > c1 ,
58 -- puertos de salida
59 s = > r (2) ,
60 cout = > c2
61 ) ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 8/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Instancias fulladd y alambrado (4/4)

adder4 a(3) b(3) a(2) b(2) a(1) b(1) a(0) b(0)


u3: x y u2: x y u1: x y u0: x y
fulladd fulladd fulladd fulladd
co cout cin c2 cout cin c1 cout cin c0 cout cin ci
s s s s

r(3) r(2) r(1) r(0)

62 u3 : fulladd
63 port map (
64 -- puertos de entrada
65 x = > a (3) ,
66 y = > b (3) ,
67 cin = > c2 ,
68 -- puertos de salida
69 s = > r (3) ,
70 cout = > co
71 ) ;
72 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 9/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Circuito test bench

tb_adder4 botona(2) botonb(2) botona(0) botonb(0)


botona(3) botonb(3)
botona(1) botonb(1)
sum0:
adder4 a(3) b(3) a(2) b(2) a(1) b(1) a(0) b(0)
u3: x y u2: x y u1: x y u0: x y
fulladd fulladd fulladd fulladd
co cout cin c2 cout cin c1 cout cin c0 cout cin ci
s s s s

r(3) r(2) r(1) r(0)

ledco ledr(3) ledr(2) ledr(1) ledr(0) botonci

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 10/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Test bench tb adder4.vhdl (1/3)

1 -- Test bench para el sumador de 4 bits


2
3 -- entidad sin puertos
4 entity tb_adder4 is
5 end entity tb_adder4 ;
6
7 architecture beh of tb_adder4 is
8 -- sumador de 4 bits como componente
9 component adder4 is
10 port (
11 -- puertos de entrada
12 a : in bit_vector (3 downto 0) ;
13 b : in bit_vector (3 downto 0) ;
14 ci : in bit ;
15 -- puertos de salida
16 r : out bit_vector (3 downto 0) ;
17 co : out bit
18 );
19 end component adder4 ;
20
21 -- senales para alambrar e inicializacion
22 signal botona : bit_vector (3 downto 0) := " 0000 " ;
23 signal botonb : bit_vector (3 downto 0) := " 0000 " ;
24 signal botonci : bit := ’0 ’;
25 signal ledsr : bit_vector (3 downto 0) ;
26 signal ledco : bit ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 11/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Test bench tb adder4.vhdl (2/3)

28 begin
29 -- instancia y alambrado de un sumador de 4 bits
30 sum0 : adder4
31 port map (
32 -- puertos de entrada
33 a = > botona ,
34 b = > botonb ,
35 ci = > botonci ,
36 -- puertos de salida
37 r = > ledsr ,
38 co = > ledco
39 );
40 -- procesos para estimulos
41 process -- para botona
42 begin
43 wait for 10 ns ;
44 botona <= " 0001 " ;
45 wait for 10 ns ;
46 botona <= " 0101 " ;
47 wait for 10 ns ;
48 botona <= " 0111 " ;
49 wait for 100 ns ;
50 end process ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 12/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Test bench tb adder4.vhdl (3/3)

51 process -- para botonb


52 begin
53 wait for 15 ns ;
54 botonb <= " 0100 " ;
55 wait for 15 ns ;
56 botonb <= " 1100 " ;
57 wait for 15 ns ;
58 botonb <= " 0110 " ;
59 wait for 100 ns ;
60 end process ;
61
62 process -- para botonci
63 begin
64 wait for 50 ns ;
65 botonci <= ’1 ’;
66 wait for 50 ns ;
67 botonci <= ’0 ’;
68 end process ;
69
70 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 13/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Reglas y dependencias para compilación makefile

1 # Diseno Logico , Oscar Alvarado Nava


2 all : tb_adder4 . vcd
3
4 tb_adder4 . vcd : fulladd . o adder4 . o tb_adder4 . o
5 ghdl -e tb_adder4
6 ./ tb_adder4 -- stop - time =200 ns -- vcd = tb_adder4 . vcd
7 gtkwave tb_adder4 . vcd ondas . sav
8
9 adder4 . o : adder4 . vhdl
10 ghdl -a adder4 . vhdl
11
12 fulladd . o : fulladd . vhdl
13 ghdl -a fulladd . vhdl
14
15 tb_adder4 . o : tb_adder4 . vhdl
16 ghdl -a tb_adder4 . vhdl
17
18 clean :
19 rm *. o tb_adder4 *. vcd *. cf

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 14/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Paquete dl bib.vhdl

1 package dl_bib is
2 component fulladd is
3 port (
4 -- puertos de entrada
5 x : in bit ;
6 y : in bit ;
7 cin : in bit ;
8 -- puertos de salida
9 s : out bit ;
10 cout : out bit
11 );
12 end component fulladd ;
13 end package dl_bib ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 15/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Agregando paquete para los componentes

1 -- Diseno Logico , Oscar Alvarado Nava


2 use work . dl_bib . all ;
3 entity adder4 is
4 port (
5 -- puertos de entrada
6 a : in bit_vector (3 downto 0) ;
7 b : in bit_vector (3 downto 0) ;
8 ci : in bit ;
9 -- puertos de salida
10 r : out bit_vector (3 downto 0) ;
11 co : out bit
12 );
13 end entity adder4 ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 16/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Utilizando for-generate

14 architecture beh of adder4 is


15 -- el componente esta en el paquete dl_bib . vhdl
16 signal c : bit_vector (4 downto 0) ;
17 begin
18 c (0) <= ci ;
19 co <= c (3) ;
20 sum : for i in 0 to 3 generate
21 unidades : fulladd
22 port map (
23 x=>a(i),
24 y=>b(i),
25 cin = > c ( i ) ,
26 s=>r(i),
27 cout = > c ( i +1)
28 );
29 end generate sumadores ;
30 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 17/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Compilando el paquete en elmakefile

1 # Diseno Logico , Oscar Alvarado Nava


2 all : tb_adder4 . vcd
3
4 tb_adder4 . vcd : dl_bib . o fulladd . o adder4 . o tb_adder4 . o
5 ghdl -e tb_adder4
6 ./ tb_adder4 -- stop - time =200 ns -- vcd = tb_adder4 . vcd
7 gtkwave tb_adder4 . vcd ondas . sav
8
9 adder4 . o : adder4 . vhdl
10 ghdl -a adder4 . vhdl
11
12 fulladd . o : fulladd . vhdl
13 ghdl -a fulladd . vhdl
14
15 tb_adder4 . o : tb_adder4 . vhdl
16 ghdl -a tb_adder4 . vhdl
17
18 dl_bib . o : dl_bib . vhdl
19 ghdl -a dl_bib . vhdl
20
21 clean :
22 rm *. o tb_adder4 *. vcd *. cf

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 18/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Utilizando process

14 architecture beh of adder4 is


15 -- no es necesario el paquete ni el componente
16 begin
17 process (a ,b , ci )
18 variable c_o , c_i : bit ;
19 variable suma : bit_vector (3 downto 0) := " 0000 " ;
20 begin
21 c_i := ci ;
22 for i in 0 to 3 loop
23 suma ( i ) := a ( i ) xor b ( i ) xor c_i ;
24 c_o :=( a ( i ) and b ( i ) ) or ( a ( i ) and c_i ) or ( b ( i ) and c_i ) ;
25 c_i := c_o ;
26 end loop ;
27 r <= suma ;
28 co <= c_o ;
29 end process ;
30 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 19/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Utilizando function

14 architecture beh of adder4 is


15 -- no es necesario ni el paquete ni el componente
16 function suma4 (a , b : bit_vector (3 downto 0) ; cin : bit ) return bit_vector is
17 variable c_i , c_o : bit ;
18 variable suma : bit_vector (3 downto 0) := " 0000 " ;
19 begin
20 c_i := cin ;
21 for i in 0 to 3 loop
22 suma ( i ) := a ( i ) xor b ( i ) xor c_i ;
23 c_o := ( a ( i ) and b ( i ) ) or ( a ( i ) and c_i ) or ( b ( i ) and c_i ) ;
24 c_i := c_o ;
25 end loop ;
26 return suma ;
27 end function suma4 ;
28 begin
29 r <= suma4 (a ,b , ci ) ;
30
31 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 20/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Biblioteca dl bib.vhdl

1 package dl_bib is
2 -- declaracion
3 function suma4 (a , b : bit_vector (3 downto 0) ; cin : bit ) return bit_vector ;
4
5 end package dl_bib ;
6
7 package body dl_bib is
8 -- definicion
9 function suma4 (a , b : bit_vector (3 downto 0) ; cin : bit ) return bit_vector is
10 variable ci , co : bit ;
11 variable suma : bit_vector (3 downto 0) := " 0000 " ;
12 begin
13 ci := cin ;
14 for i in 0 to 3 loop
15 suma ( i ) := a ( i ) xor b ( i ) xor ci ;
16 co := ( a ( i ) and b ( i ) ) or ( a ( i ) and ci ) or ( b ( i ) and ci ) ;
17 ci := co ;
18 end loop ;
19 return suma ;
20 end function suma4 ;
21
22 end package body dl_bib ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 21/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Llamada a función

1 -- Diseno Logico , Oscar Alvarado Nava


2 use work . dl_bib . all ;
3 entity adder4 is
4 port (
5 -- puertos de entrada
6 a : in bit_vector (3 downto 0) ;
7 b : in bit_vector (3 downto 0) ;
8 ci : in bit ;
9 -- puertos de salida
10 r : out bit_vector (3 downto 0) ;
11 co : out bit
12 );
13 end entity adder4 ;
14 architecture beh of adder4 is
15 begin
16 -- Llamada a la funcion
17 r <= suma4 (a , b , cin ) ;
18 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 22/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Sobrecarga de operador aritmético +

1 package dl_bib is
2 function " + " (a , b : bit_vector (3 downto 0) ; cin : bit ) return bit_vector ;
3
4 end package dl_bib ;
5
6 package body dl_bib is
7
8 function " + " (a , b : bit_vector (3 downto 0) ; cin : bit ) return bit_vector is
9 variable ci , co : bit ;
10 variable suma : bit_vector (3 downto 0) := " 0000 " ;
11 begin
12 ci := cin ;
13 for i in 0 to 3 loop
14 suma ( i ) := a ( i ) xor b ( i ) xor ci ;
15 co := ( a ( i ) and b ( i ) ) or ( a ( i ) and ci ) or ( b ( i ) and ci ) ;
16 ci := co ;
17 end loop ;
18 return suma ;
19 end function " + " ;
20
21 end package body dl_bib ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 23/24
Representación en VHDL Estructural, generate, proceso, función, biblioteca y sobrecarga

Operador sobrecargado

1 -- Diseno Logico , Oscar Alvarado Nava


2 use work . dl_bib . all ;
3 entity adder4 is
4 port (
5 -- puertos de entrada
6 a : in bit_vector (3 downto 0) ;
7 b : in bit_vector (3 downto 0) ;
8 ci : in bit ;
9 -- puertos de salida
10 r : out bit_vector (3 downto 0) ;
11 co : out bit
12 );
13 end entity adder4 ;
14 architecture beh of adder4 is
15 begin
16
17 r <= a + b ;
18
19 end architecture beh ;

Oscar Alvarado Nava UAM Azcapotzalco Descripción de un sumador de 4 bits en VHDL 24/24

También podría gustarte