Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sumadores básicos: Los sumadores son muy importantes no solamente en las computadoras,
sino en muchos pos de sistemas digitales en los que se procesan datos numéricos.
Comprender el funcionamiento de un sumador básico es fundamental en el estudio de los
sistemas digitales. A connuación se analiza el semisumador (HA: Half-Adder) y el sumador
completo (FA: Full Adder).
Semisumador. Recordemos las reglas básicas de la suma binaria expuestas en clase. Todas estas
operaciones se realizan mediante un circuito lógico denominado semi-sumador. Un semi-
sumador admite dos dígitos binarios en sus entradas y genera dos dígitos binarios en sus
salidas: un bit de suma y un bit de acarreo. En la figura 6.1 se muestra su símbolo las
operaciones que realiza, su tabla de verdad y el diagrama lógico que realiza dicha operación.
Sumador completo: El segundo po de sumador es el sumador completo. Este sumador acepta
dos bits de entrada y un acarreo de entrada, y genera una salida de suma y un acarreo de salida.
La diferencia principal entre un sumador completo y un semi-sumador es que el sumador
completo acepta un acarreo de entrada. El símbolo lógico de un sumador completo, su tabla de
verdad y la lógica necesaria para realizar la suma de 3 bits se muestra en la Figura 6.2.
El acarreo de salida es 1 cuando las dos entradas de la primera puerta XOR están a 1 o cuando
las dos entradas de la segunda puerta XOR están a 1. Puede comprobar esto estudiando la Tabla
de verdad. El acarreo de salida del sumador completo se obene por tanto del producto lógico
(AND) de las entradas A y B, y del producto lógico de A ⊕ B y Cin. Después se aplica la
operación OR a estos dos términos, como muestra la ecuación de salida. Esta función se
implementa y se combina con la lógica de la suma para formar un circuito sumador completo,
como se muestra en la Figura 6.2.
Para sumar dos números binarios, se necesita un sumador completo por cada bit que tengan los
números que se quieren sumar. Así, para números de dos bits se necesitan dos sumadores, para
números de cuatro bits se usaran cuatro sumadores, y así sucesivamente. La salida de acarreo
1.- Modelar (por flujo de datos) un circuito semisumador, en donde las variables de entrada
son. A y B y las de salida es Cout y Suma. Sintezarlo, simularlo e implementarlo.
Solución.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
enty SEMISUMADOR is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
Cout : out STD_LOGIC;
SUMA : out STD_LOGIC);
end SEMISUMADOR;
A<= '0', '1' AFTER 100 NS, '0' AFTER 250 NS, '1' AFTER 400 NS;
B<= '0', '1' AFTER 200 NS, '0' AFTER 300 NS, '1' AFTER 350 NS;
2.- Modelar (por flujo de datos) un circuito sumador completo, en donde las variables de
entrada son. A, B, Cin y las de salida son Cout y Suma. Sintezar, simular e implementar.
end Fulladder;
architecture Behavioral of Fulladder is
begin
Suma<= Cin xor A xor B;
Cout<= (Cin and B) or (Cin and B) or ( a and b);
end Behavioral;
a<='1', '0' aHer 100 ns, '1' aHer 250 ns, '0' aHer 400 ns, '1' aHer 550 ns;
b<='1', '0' aHer 150 ns, '1' aHer 300 ns, '0' aHer 450 ns, '1' aHer 650 ns;
Cin<='0', '1' aHer 300 ns;
3.- Modelar (por flujo de datos: booleano) con 3 circuitos sumadores completos un sumador de
tres-bits (ulizar instanciación haciendo un top para ello y usar el código del full_adder), en
donde las variables de entrada son: A[2:0], B[2:0] y Cin y las de salida es Cout y Suma[2:0].
Sintezarlo, simularlo e implementarlo, ulizando el archivo MasterNxys3.ucf.
Solución:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
enty TOP_adder3bits is
Port ( sw : in STD_LOGIC_VECTOR (5 downto 0);
led : out STD_LOGIC_VECTOR (3 downto 0);
btn : in STD_LOGIC_VECTOR (0 downto 0));
end TOP_adder3bits;
4.- Modelar (por flujo de datos: Booleano) un sumador de 16 bits (ulizar instanciación y
concatenación), en donde las variables de entrada son. X[15:0], Y[15:0] y Cin y las de salida son:
Cout y Suma[15:0]. Sintezarlo.
Solución:
ENTITY adder16 IS
PORT ( Cin : IN STD_LOGIC ;
X, Y : IN STD_LOGIC_VECTOR(15 DOWNTO 0) ;
S : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ;
Cout : OUT STD_LOGIC ) ;
END adder16 ;
5.- Modelar (por flujo de datos: booleano) un circuito semirestador, en donde las variables de
entrada son. A, B, y las de salida son bout y Sub (siguiendo el algoritmo sub = A-B). Sintezarlo,
simularlo e implementarlo.
Solución:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
enty HalfSubstractor is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
sub : out STD_LOGIC;
bout : out STD_LOGIC);
end HalfSubstractor;
6.- Modelar (por flujo de datos) un circuito restador completo, en donde las variables de
entrada son. A, B, Bin (borrow in) y las de salida son Bout y Sub, usar el algoritma A-B-bin.
Sintezarlo, simularlo e implementarlo.
Solución:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
enty FullSubstractor is
Port ( sw : in STD_LOGIC_VECTOR (2 downto 0);
led : out STD_LOGIC_VECTOR (1 downto 0));
end FullSubstractor;
signal a,b,bin,bout,sub:std_logic;
begin
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
enty sUM is
Port ( A : in STD_LOGIC_VECTOR (3 downto 0);
B : in STD_LOGIC_VECTOR (3 downto 0);
Sel : in STD_LOGIC;
Cout : out STD_LOGIC;
Resultado : out STD_LOGIC_vector (3 downto 0));
end sUM;
begin
PROCESS (A, B, SEL, TEMP)
BEGIN
IF SEL = '0' THEN
TEMP<= ('0' & A) + ('0' & B);
RESULTADO <= TEMP (3 DOWNTO 0);
Cout <= temp(4);
ELSE
TEMP<= ('0' & A) -('0' & B);
RESULTADO <= TEMP (3 DOWNTO 0);
Cout <= temp(4);
END IF;
END PROCESS;
end Behavioral;
A<= X"f", X"C" AFTER 100 NS, X"A" AFTER 200 NS, X"3" AFTER 300 NS;
B<= X"C", X"C" AFTER 100 NS, X"7" AFTER 200 NS, X"5" AFTER 300 NS;
sel <= '0', '1' aHer 200 ns;
1.- Modelar (por flujo de datos) con 4 circuitos sumador completos (ulizar instanciación), en
donde las variables de entrada son. A[3:0] y B[3:0] y las de salida es Cout y Suma[3:0], un
sumador completo de 4bits. Sintezarlo, simularlo e implementarlo, ulizando el archivo
MasterNxys3.ucf