Anda di halaman 1dari 15

CIRCUITOS DIGITALES TAREA N°1 VHDL

Usando el programa de simulador funcional VHDL (no considerar retardos), se


pide escribir el código VHDL y simular. Escoger como mínimo 08 problemas.
1) Diseñar usando VHDL, describir y simular para los 04 casos que los números A
(A4 A3 A2 A1) y B(B4 B3 B2 B1) sean positivos y negativos en la
representación complementaria indicada y también el resultado.
a) Sumador/restador Complemento a UNO
b) Sumador/restador Complemento a DOS.

Dígito decimal Código BCD


0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

Sumador/restador complemento a uno

Definamos variables:

 A: Entrada de 4 bits
 B: Entrada de 4 bits
 Cin: Carry (Acarreo) de entrada
 S: Salida de 4 bits
 Cout: Carry (Acarreo) de salida.

1. library IEEE ;
2. use IEEE.std_logic_1164.all;
3. entity sumador_restador is
4. port(
5. A,B : in std_logic_vector(3 downto 0);
6. Ci : in std_logic;
7. X : in std_logic; ---Selector de operación
8. S : out std_logic_vector(3 downto 0);
9. Co : out std_logic
10.);
11.end sumador_restador;
12.architecture recurrente of sumador_restador is
13.signal C :std_logic_vector(4 downto 0); --Acarreos intermedios
14.signal P :std_logic_vector(1 downto 0); --Complemento de B
15.signal V :std_logic_vector(3 downto 0); --Inversion
16.begin
17.process(A,B,Ci,X,P,V)
18.begin
19.V<=(others=> X); --Vector X de 4 bits
20.P<= B XOR V; --Complemento a uno
21.C(0)<= Ci XOR X;
22.FOR i IN 0 TO 1 loop
23.S(i)<=(A(i) XOR P(i)) XOR C(i); --Suma recurrente
24.C(i+1)<= ((A(i) AND P(i)) OR (A(i) AND C(i))) OR (P(i) AND C(i)); --Acarreo
recurrente
25.end loop;
26.end process;
27.Co<= C(2);
28.end recurrente;
Sumador/Restador complemento a dos
Definamos variables:

 A: Entrada de 4 bits
 B: Entrada de 4 bits
 Cin: Carry (Acarreo) de entrada
 S: Salida de 4 bits
 Cout: Carry (Acarreo) de salida.

29.library IEEE ;
30.use IEEE.std_logic_1164.all;
31.entity sumador_restador is
32.port(
33.A,B : in std_logic_vector(3 downto 0);
34.Ci : in std_logic;
35.X : in std_logic; ---Selector de operación
36.S : out std_logic_vector(3 downto 0);
37.Co : out std_logic
38.);
39.end sumador_restador;
40.architecture recurrente of sumador_restador is
41.signal C :std_logic_vector(4 downto 0); --Acarreos intermedios
42.signal P :std_logic_vector(2 downto 0); --Complemento de B
43.signal V :std_logic_vector(3 downto 0); --Inversion
44.begin
45.process(A,B,Ci,X,P,V)
46.begin
47.V<=(others=> X); --Vector X de 4 bits
48.P<= B XOR V; --Complemento a dos
49.C(0)<= Ci XOR X;
50.FOR i IN 0 TO 1 loop
51.S(i)<=(A(i) XOR P(i)) XOR C(i); --Suma recurrente
52.C(i+1)<= ((A(i) AND P(i)) OR (A(i) AND C(i))) OR (P(i) AND C(i)); --Acarreo
recurrente
53.end loop;
54.end process;
55.Co<= C(2);
56.end recurrente;
2) Diseñar usando VHDL, describir y simular un COMPARADOR para dos
números de 4 bits A = A3 A2 A1 A0 y B = B3 B2 B1 B0.
a. Caso que A y B están en binario natural.
b. Caso que A y B están en complemento a UNO.
c. Caso que A y B están en complemento a DOS.

1) LIBRARY IEEE;
2) USE IEEE.STD_LOGIC_1164.ALL;
3) ENTITY comparador IS
4) PORT
5) (BCD1, BCD2: IN std_logic_vector(3 DOWNTO 0);
6) Igual, Mayor, Menor: OUT std_logic);
7) END comparador;
8) ARCHITECTURE RTL OF comparador IS
9) BEGIN
10) Compara:PROCESS(BCD1, BCD2)
11) BEGIN
12) --Comparación de Igualdad.
13) IF (BCD1 = BCD2)
14) THEN Igual <= '1';
15) ELSE Igual <= '0';
16) END IF;
17) --Comparación de Mayor (svE1>svE2).
18) IF (BCD1 > BCD2)
19) THEN Mayor <= '1';
20) ELSE Mayor <= '0';
21) END IF;
22) --Comparación de Menor (svE1
23) IF (BCD1 < BCD2)
24) THEN Menor <= '1';
25) ELSE Menor <= '0';
26) END IF;
27) END PROCESS Compara;
28) END RTL;
1) LIBRARY ieee;
2) USE ieee.std_logic_1l64.all;
3) USE ieee.std_logic_unsigned.all ;
4) ENTITY ejemplo09 IS
5) PORT ( A,B: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
6) igual,mayor,menor: OUT STD_LOGIC);
7) END ejemplo09;
8) ARCHITECTURE rtl OF ejemplo09 IS
9) BEGIN
10) igual <= 'l' WHEN A = B ELSE '0';
11) mayor <= '1' WHEN A > B ELSE '0';
12) menor <='l' WHEN A < B ELSE'0';
13) END rtl;
1) LIBRARY ieee;
2) USE ieee.std_logic_1164.all;
3) USE ieee.std_logic_arith.all;
 aqui en la libreria arith radica la
 diferencia, a comparacion del
 anterior circuito
4) ENTITY ejemplo10 IS
5) PORT ( A,B: IN signed(3 DOWNTO 0);
6) igual,mayor,menor: OUT STD_LOGIC);
7) END ejemplo10;
8) ARCHITECTURE behavior OF ejemplo10 IS
9) BEGIN
10) igual <= 'l' WHEN A = B ELSE '0';
11) mayor <= '1' WHEN A > B ELSE '0';
12) menor <='l' WHEN A < B ELSE'0';
13) END behavior;
1) LIBRARY ieee;
2) USE ieee.std_logic_1l64.all;
3) LIBRARY work;
4) USE work.mux4to1_package.all;
5) ENTITY ejemplo11 IS
6) PORT(w :IN STD_LOGIC_VECTOR(0 TO 15);
7) s :IN STD_LOGTC_VECTOR(3 DOWNTO 0);
8) f :OUT STD_LOGIC );
9) END ejemplo11;
10) ARCHITECTURE Structure OF ejemplo1l IS
11) SIGNAL m:STD_LOGIC_VECTOR(O TO 3) ;
12) BEGIN
13) Mux1: mux4ro1 PORT MAP
14) (w(0),w(1),w(2),w(3),s(1 DOWNTO 0),m(0));
15) Mux2: mux4to1 PORT MAP
16) (w(4),w(5),w(6),w(7),s(1 DOWNTO 0),m(1));
17) Mux3: mux4to1 PORT MAP
18) (w(8),w(9),w(10),w(11),s(l DOWNTO 0),m(2));
19) Mux4: mux4to1 PORT MAP
20) (w(12),w(13),w(14),w(15),s(l DOWNTO 0),m(3));
21) Mux5: mux4to1 PORT MAP
22) (m(0),m(l),m(2),m(3),s(3 DOWNTO 2),f );
23) END Structure;
1) library ieee;
2) use ieee.std_logic_1164.all;
3) entity restadorbcd is
4) port(
5) a, b :IN std_logic_vector(3 DOWNTO 0);
6) ci :IN std_logic;
7) s :OUT std_logic_vector(3 DOWNTO 0);
8) co :OUT std_logic
9) );
10) end restadorBCD;
11) architecture estructural of restadorbcd is
12) component sumadorbcd4bits
13) port(
14) a, b :IN std_logic_vector(3 DOWNTO 0);
15) ci :IN std_logic;
16) s :OUT std_logic_vector(3 DOWNTO 0);
17) co :OUT std_logic
18) end component;
19) component complementoa9
20) port(
21) n :IN std_logic_vector(3 DOWNTO 0);
22) c :OUT std_logic_vector(3 DOWNTO 0)
23) );
24) end component;
25) signal x: std_logic_vector(3 downto 0);
26) begin
27) u1:complementoa9
28) port map (b,x);
29) u2:sumadorbcd4bits
30) port map (a, x, ci, s, co);
31) end estructural;
Restador BCD
Un diseño típico de un restador BCD utiliza un complemento a 9 de la entrada B (figura
20).

Figura 20. Restador BCD

La figura 21 muestra cuatro descripciones para la función complemento a 9. La señal n


es la entrada BCD y la señal c es su complemento a 9 (c = 9 – n).
Restador Binario de 4 bits
El circuito de la figura 18 muestra una descripción de un restador binario de 4 bits sin
signo empleando un sumador binario de 4 bits. La entrada de préstamo (bin) se activa
en 0, al igual que la salida de préstamo (bout). El minuendo (a) se conecta
directamente a una entrada del sumador y en la otra entrada se conecta el
complemento a 1 del substraendo (b).

Anda mungkin juga menyukai