Professional Documents
Culture Documents
INTRODUCCIN
SUMADORES
En electrnica un sumador es un circuito lgico que calcula la operacin suma. En
los computadores modernos se encuentra en lo que se denomina Unidad
aritmtico lgica (ALU).
Generalmente realizan las operaciones aritmticas en cdigo binario, decimal o
BCD exceso en 3, por regla general los sumadores emplean el sistema binario.
En los casos en los que se est empleando un complemento a dos para
representar numero negativos, el sumador se convertir en un sumadorsubstractor (Adder-substracter).
Tipos de sumadores
Half- adder
Full- adder
Metodo Ripple
Carry- Look- Ahead
Carry- select
SEMISUMADOR
Se denomina semisumador al circuito combinacional capaz de realizar la suma
aritmtica binaria de dos nicos bits A y B, proporcionando a su salida un bit
resultado de suma S y un bit de acarreo C. En la siguiente figura se muestra la
tabla de verdad de este circuito con sus funciones, acompaado de un esquema
del Half-Adder.
1/2
FULL ADDER
Este dispositivo nos ofrece una mejora del semisumador al cual se le aade un
acarreo de entrada.
De esta manera podemos afrontar sumas de ms de un bit para las cuales
utilizaremos el acarreo de salida del anterior en el acarreo de entrada del
siguiente. As completamos la suma correctamente.
A continuacin vemos la tabla de verdad y un esquema.
METODO RIPPLE
Un sumador de dos informaciones binarias A+B de n bits necesita realizar n sumas
parciales, empleando para ello n sumadores completos. Esto nos hace conectar el
acarreo de salida con el siguiente acarreo de entrada de manera que podamos
realizar la suma del siguiente bit con acarreo.
2/2
CARRY SELECT
3/2
se
realiza
en
paralelo
la
de
segmentos,
el
resultado
deber
ser
presentado
en
4/2
15 y el
5/2
6/2
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_arith.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
--creacin de la entidad, designacin de entradas y salidas
entity ejercicio2 is port(
clk :in std_logic;
reset,pause:in std_logic;
disp:out std_logic_vector(3 downto 0);
sal:out std_logic_vector(7 downto 0));
end ejercicio2;
begin
process (clk) proceso para ajustar la frecuencia a los 200 Hz deseados
variable i:integer;
begin
if(clk'event and clk='1')then
7/2
i:=i+1;
if(i<250000)then
clk200hz<='0';
elsif(i=500000)then
i:=0;
clk200hz<='1';
else
clk200hz<='1';
end if;
end if;
end process;
proceso para que la tarjeta funcione a 1 Hz y se pueda observar mejor el
comportamiento del --programa
process (clk)
variable i:integer;
begin
if(clk'event and clk='1')then
i:=i+1;
if(i<5000000)then
clk10hz<='0';
elsif(i=10000000)then
i:=0;
clk10hz<='1';
end if;
end if;
end process;
imprimir
begin
if(clk200hz = '0')then
disp<="1101";
aux<=dec;
8/2
case (aux) is
when "0000"=>sal<=x"C0";
when "0001"=>sal<=x"F9";
when "0010"=>sal<=x"A4";
when "0011"=>sal<=x"B0";
when "0100"=>sal<=x"99";
when "0101"=>sal<=x"92";
when "0110"=>sal<=x"83";
when "0111"=>sal<=x"F8";
when "1000"=>sal<=x"80";
when others=>sal<=x"98";
end case;
else
disp<="1110"; aux<=uni;
case (aux) is
when "0000"=>sal<=x"C0";
when "0001"=>sal<=x"F9";
when "0010"=>sal<=x"A4";
when "0011"=>sal<=x"B0";
when "0100"=>sal<=x"99";
when "0101"=>sal<=x"92";
when "0110"=>sal<=x"83";
when "0111"=>sal<=x"F8";
when "1000"=>sal<=x"80";
when others =>sal<=x"98";
end case;
end if;
end process;
9/2
if (uni<"1001") then
uni<=uni+1;
else
uni<="0000";
if (dec<"1001") then
dec<=dec+1;
else
dec<="0000";
end if;
if (dec="1001" and uni="0101")then
dec<="0000";
uni<="0000";
end if;
end if;
else
uni<=uni;
dec<=dec;
end if;
else
dec<="0000";
uni<="0000";
end if
end if;
end process;
end Behavioral;
10/
11/
12/
13/
14/
15/
NOTA: Este ltimo ejercicio fue evaluado con el ejercicio de la prctica nmero 2.
CONCLUSIONES
Gutirrez:
La principal funcin de esta prctica es mostrarnos que podemos realizar
circuitos tanto secuenciales, como combinacinales en vhdl. En su uno de los
mayores problemas que surgi al momento de realizar esta prctica fue el de
generar los diversos comparadores de frecuencia.
16/