Laboratorio de Arquitectura de Computadoras - Descripción de un sumador de 4 bits...

24
Representaci´ on en VHDL Laboratorio de Arquitectura de Computadoras Descripci´ on de un sumador de 4 bits en VHDL Oscar Alvarado Nava [email protected] Departamento de Electr´ onica Divisi´on de Ciencias B´ asicas e Ingenier´ ıa Universidad Aut´onoma Metropolitana, Unidad Azcapotzalco 17-Primavera, mayo de 2017 Oscar Alvarado Nava UAM Azcapotzalco Descripci´on de un sumador de 4 bits en VHDL 1/24

Transcript of Laboratorio de Arquitectura de Computadoras - Descripción de un sumador de 4 bits...

Representacion en VHDL

Laboratorio de Arquitectura deComputadoras

Descripcion de un sumador de 4 bits en VHDL

Oscar Alvarado Nava

[email protected]

Departamento de ElectronicaDivision de Ciencias Basicas e Ingenierıa

Universidad Autonoma Metropolitana, Unidad Azcapotzalco

17-Primavera, mayo de 2017

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 1/24

Representacion en VHDL

Contenido

1 Representacion en VHDLEstructural, generate, proceso, funcion, biblioteca ysobrecarga

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 2/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Contenido

1 Representacion en VHDLEstructural, generate, proceso, funcion, biblioteca ysobrecarga

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 3/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Entidad y adder4.vhdl

a b

ci

adder4

co

r

4 4

4

1 --Diseno Logico , Oscar Alvarado Nava

23 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 Descripcion de un sumador de 4 bits en VHDL 4/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Componente fulladd y alambres

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

c2 c1 c0co ci

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

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

u0:u1:u2:u3:

adder4

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;

2829 --senales para alambrar los fulladds

30 signal c0,c1,c2:bit;

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 5/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Instancias fulladd y alambrado (1/4)

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

c2 c1 c0co ci

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

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

u0:u1:u2:u3:

adder4

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 Descripcion de un sumador de 4 bits en VHDL 6/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Instancias fulladd y alambrado (2/4)

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

c2 c1 c0co ci

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

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

u0:u1:u2:u3:

adder4

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 Descripcion de un sumador de 4 bits en VHDL 7/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Instancias fulladd y alambrado (3/4)

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

c2 c1 c0co ci

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

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

u0:u1:u2:u3:

adder4

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 Descripcion de un sumador de 4 bits en VHDL 8/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Instancias fulladd y alambrado (4/4)

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

c2 c1 c0co ci

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

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

u0:u1:u2:u3:

adder4

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 Descripcion de un sumador de 4 bits en VHDL 9/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Circuito test bench

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

x y

cin

fulladd

couts

c2 c1 c0co ci

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

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

u0:u1:u2:u3:

adder4

tb_adder4

botona(3) botonb(3)botona(2) botonb(2)

botona(1) botonb(1)

botona(0) botonb(0)

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

sum0:

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 10/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Test bench tb adder4.vhdl (1/3)

1 --Test bench para el sumador de 4 bits

23 --entidad sin puertos

4 entity tb_adder4 is

5 end entity tb_adder4;

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

2021 --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 Descripcion de un sumador de 4 bits en VHDL 11/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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 Descripcion de un sumador de 4 bits en VHDL 12/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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;

6162 process --para botonci

63 begin

64 wait for 50 ns;

65 botonci <= ’1’;

66 wait for 50 ns;

67 botonci <= ’0’;

68 end process;

6970 end architecture beh;

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 13/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Reglas y dependencias para compilacion makefile

1 #Diseno Logico , Oscar Alvarado Nava

2 all:tb_adder4.vcd

34 tb_adder4.vcd:fulladd.o adder4.o tb_adder4.o

5 ghdl -e tb_adder4

6 ./ tb_adder4 --stop -time =200ns --vcd=tb_adder4.vcd

7 gtkwave tb_adder4.vcd ondas.sav

89 adder4.o:adder4.vhdl

10 ghdl -a adder4.vhdl

1112 fulladd.o:fulladd.vhdl

13 ghdl -a fulladd.vhdl

1415 tb_adder4.o:tb_adder4.vhdl

16 ghdl -a tb_adder4.vhdl

1718 clean:

19 rm *.o tb_adder4 *.vcd *.cf

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 14/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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 Descripcion de un sumador de 4 bits en VHDL 15/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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 Descripcion de un sumador de 4 bits en VHDL 16/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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 Descripcion de un sumador de 4 bits en VHDL 17/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Compilando el paquete en elmakefile

1 #Diseno Logico , Oscar Alvarado Nava

2 all:tb_adder4.vcd

34 tb_adder4.vcd:dl_bib.o fulladd.o adder4.o tb_adder4.o

5 ghdl -e tb_adder4

6 ./ tb_adder4 --stop -time =200ns --vcd=tb_adder4.vcd

7 gtkwave tb_adder4.vcd ondas.sav

89 adder4.o:adder4.vhdl

10 ghdl -a adder4.vhdl

1112 fulladd.o:fulladd.vhdl

13 ghdl -a fulladd.vhdl

1415 tb_adder4.o:tb_adder4.vhdl

16 ghdl -a tb_adder4.vhdl

1718 dl_bib.o:dl_bib.vhdl

19 ghdl -a dl_bib.vhdl

2021 clean:

22 rm *.o tb_adder4 *.vcd *.cf

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 18/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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 Descripcion de un sumador de 4 bits en VHDL 19/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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);

3031 end architecture beh;

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 20/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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;

45 end package dl_bib;

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

2122 end package body dl_bib;

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 21/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Llamada a funcion

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 Descripcion de un sumador de 4 bits en VHDL 22/24

Representacion en VHDL Estructural, generate, proceso, funcion, biblioteca y sobrecarga

Sobrecarga de operador aritmetico +

1 package dl_bib is

2 function "+"(a,b:bit_vector (3 downto 0);cin:bit) return bit_vector;

34 end package dl_bib;

56 package body dl_bib is

78 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 "+";

2021 end package body dl_bib;

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 23/24

Representacion en VHDL Estructural, generate, proceso, funcion, 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

1617 r <= a + b;

1819 end architecture beh;

Oscar Alvarado Nava UAM Azcapotzalco Descripcion de un sumador de 4 bits en VHDL 24/24