Construa a Tabela da Verdade de um Somador_Completo que some dois bits (X e Y) levando em conta uma terceira entrada que representa o Vem-Um (Z) de uma soma anterior e produza na saída o resultado da Soma (S), além do valor do Vai-Um ©. Escreva a Função Booleana da Soma (S) em função das entradas X, Y e Z usando o operador XOR, e comprove que a Função Booleana do Vai-Um © pode ser expressa por
. Escreva uma descrição VHDL (entity e architecture) do Somador_Completo.
Passo 1
O enunciado pede para construir a Tabela da Verdade de um somador completo de três entradas (X, Y, Z), encontrar a função da Soma (S) usando XOR, provar que o Vai-Um © é dado por C = XY + XZ + YZ e, por fim, escrever a descrição VHDL (entity e architecture). Vamos usar conceitos de Álgebra Booleana e lógica digital para isso.
Passo 2
Devemos listar todas as combinações possíveis de X, Y e Z (0 ou 1) e calcular S e C. Para um somador completo, S é o bit menos significativo do resultado da soma X+Y+Z, e C é o bit mais significativo (o carry). A Tabela da Verdade fica:
X Y Z | S C
0 0 0 | 0 0
0 0 1 | 1 0
0 1 0 | 1 0
0 1 1 | 0 1
1 0 0 | 1 0
1 0 1 | 0 1
1 1 0 | 0 1
1 1 1 | 1 1
X Y Z | S C
0 0 0 | 0 0
0 0 1 | 1 0
0 1 0 | 1 0
0 1 1 | 0 1
1 0 0 | 1 0
1 0 1 | 0 1
1 1 0 | 0 1
1 1 1 | 1 1
Passo 3
Da Tabela dá para ver que S é 1 quando há um número ímpar de entradas em 1. Isso é exatamente o que faz o XOR de três bits:
Passo 4
Para C observamos que ele vale 1 sempre que pelo menos dois dentre X,Y,Z forem 1. Em Álgebra Booleana isso se expressa como soma de produtos:
Passo 5
Finalmente, a descrição VHDL usa portas lógicas padrão e o operador xor para implementar as expressões acima. Vamos definir a entity e a architecture:
Resposta
Soma:
Vai-Um:
Descrição VHDL:
entity Somador_Completo is
port(
X, Y, Z : in std_logic;
S, C : out std_logic
);
end Somador_Completo;
Descrição VHDL:
entity Somador_Completo is
port(
X, Y, Z : in std_logic;
S, C : out std_logic
);
end Somador_Completo;
architecture Behavioral of Somador_Completo is
begin
S <= X xor Y xor Z;
C <= (X and Y) or (X and Z) or (Y and Z);
end Behavioral;
begin
S <= X xor Y xor Z;
C <= (X and Y) or (X and Z) or (Y and Z);
end Behavioral;