Professor: Gabriel Soares Baptista
Hoje vamos sair do nível puramente simbólico da álgebra booleana e chegar a blocos aritméticos reais.
Somadores e subtratores não surgem prontos. Eles nascem da análise de uma única coluna binária.
Primeiro listamos os casos possíveis de uma coluna. Depois extraímos a expressão lógica, minimizamos a função e desenhamos o circuito.
Um circuito aritmético de vários bits não faz a conta inteira de uma vez.
Ele resolve várias colunas de 1 bit, uma ao lado da outra.
O sinal que sobra em uma coluna alimenta a próxima:
Considere a soma $0110_2 + 0001_2$.
$$ \begin{alignedat}{5} & & 0 &\;1 &\;1 &\;0_2 &\;(6_{10}) \\ &+& 0 &\;0 &\;0 &\;1_2 &\;(1_{10}) \\ \hline & & 0 &\;1 &\;1 &\;1_2 &\;(7_{10}) \end{alignedat} $$
Nenhuma coluna ultrapassa $1$.
Por isso, não há transporte entre colunas.
Agora considere $0111_2 + 0001_2$.
$$ \begin{alignedat}{5} & & 0 &\;1 &\;1 &\;1_2 &\;(7_{10}) \\ &+& 0 &\;0 &\;0 &\;1_2 &\;(1_{10}) \\ \hline & & 1 &\;0 &\;0 &\;0_2 &\;(8_{10}) \end{alignedat} $$
Na coluna menos significativa, $1 + 1 = 10_2$.
O $0$ fica na coluna atual e o $1$ segue como carry para a próxima.
No exemplo $0111_2 + 0001_2$, o carry não aparece apenas uma vez.
Ele se propaga por várias colunas:
Uma soma binária de vários bits é uma sequência de somas de 1 bit conectadas pelo carry.
O Meio Somador soma dois bits, $A$ e $B$, sem considerar carry vindo de uma coluna anterior.
As quatro somas possíveis são:
O último caso exige duas saídas.
Quando ocorre $1 + 1 = 10_2$, a coluna atual guarda $0$ e envia $1$ para a próxima coluna.
Por isso, o bloco produz:
$$ 1 + 1 = 10_2 \Rightarrow Sum = 0, \qquad Carry\ Out = 1 $$
$$ \begin{array}{c|c||c|c} A & B & Sum & Carry\ Out \\ \hline 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 0 \\ 1 & 0 & 1 & 0 \\ 1 & 1 & 0 & 1 \end{array} $$
A coluna $Sum$ vale $1$ quando as entradas são diferentes.
A coluna $Carry\ Out$ vale $1$ quando as duas entradas são $1$.
Soma local
$$ Sum = \bar{A}B + A\bar{B} $$
$$ Sum = A \oplus B $$
Transporte
$$ Carry\ Out = A \cdot B $$
O carry só aparece no caso $A=1$ e $B=1$.
Leitura algébrica
$$ \begin{aligned} Sum &= A \oplus B \\ Carry\ Out &= A \cdot B \end{aligned} $$
Circuito
O Meio Somador resolve a primeira coluna de uma soma quando ainda não existe carry de entrada.
Em uma conta de 2 bits, a primeira coluna soma apenas $A_0 + B_0$.
$$ \begin{alignedat}{4} & & A_1 &\; A_0 \\ &+& B_1 &\; B_0 \\ \hline & & S_2 &\; S_1 &\; S_0 \end{alignedat} $$
A segunda coluna precisa somar $A_1 + B_1$ e também o carry vindo da coluna anterior.
Por isso, precisamos do Somador Completo.
O Somador Completo soma três bits ao mesmo tempo:
$$ A + B + Carry\ In $$
Ele recebe:
Esse é o bloco adequado para as colunas internas de uma soma de vários bits.
Algumas leituras aritméticas importantes são:
$$ \begin{array}{c|c|c||c|c} A & B & Carry\ In & Sum & Carry\ Out \\ \hline 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 \end{array} $$
A saída $Sum$ vale $1$ nas linhas:
$$ 001,\ 010,\ 100,\ 111 $$
Esses são exatamente os casos com número ímpar de entradas em $1$.
Logo:
$$ Sum = A \oplus B \oplus Carry\ In $$
Antes da forma reduzida, a SOP canônica da saída $Sum$ é:
$$ Sum = \bar{A}\bar{B}C_{in} + \bar{A}B\bar{C}_{in} + A\bar{B}\bar{C}_{in} + ABC_{in} $$
A leitura via XOR é a forma mais curta e mais expressiva da mesma função:
$$ Sum = A \oplus B \oplus Carry\ In $$
O transporte de saída vale $1$ nas combinações:
$$ 011,\ 101,\ 110,\ 111 $$
Usando $C$ para representar $Carry\ In$, a SOP canônica é:
$$ Carry\ Out = \bar{A}BC + A\bar{B}C + AB\bar{C} + ABC $$
Cada grupo preserva duas variáveis em $1$.
$$ Carry\ Out = AB + AC + BC $$
Substituindo $C$ por $Carry\ In$:
$$ Carry\ Out = (A \cdot B) + (A \cdot Carry\ In) + (B \cdot Carry\ In) $$
O carry aparece quando pelo menos dois dos três sinais de entrada são $1$.
Isso significa que a soma local ultrapassou o que cabe em uma única coluna binária.
Circuito da soma
Circuito do carry
Nesta montagem, o $Cin$ está ligado em $0$.
Isso faz o bloco atuar como a primeira coluna de uma soma.
O mesmo bloco é repetido oito vezes.
Cada Somador Completo resolve uma coluna da soma binária.
Leia da direita para a esquerda, começando pelo bit menos significativo:
O carry é o fio que costura a montagem inteira.
A última coluna gera o carry final $C_8$.
Esse sinal não alimenta outro bloco no somador de 8 bits.
Ele indica que o resultado não coube em 8 bits e precisaria de um nono bit.
Em uma leitura didática simples, $C_8 = 1$ indica estouro da capacidade de representação sem considerar sinal.
Assim como na adição, a subtração é feita coluna por coluna.
Considere $1101_2 - 0001_2$.
$$ \begin{alignedat}{5} & & 1 &\;1 &\;0 &\;1_2 &\;(13_{10}) \\ &-& 0 &\;0 &\;0 &\;1_2 &\;(1_{10}) \\ \hline & & 1 &\;1 &\;0 &\;0_2 &\;(12_{10}) \end{alignedat} $$
Cada coluna consegue fazer a conta sem pedir empréstimo.
Agora considere $1000_2 - 0001_2$.
$$ \begin{alignedat}{5} & & 1 &\;0 &\;0 &\;0_2 &\;(8_{10}) \\ &-& 0 &\;0 &\;0 &\;1_2 &\;(1_{10}) \\ \hline & & 0 &\;1 &\;1 &\;1_2 &\;(7_{10}) \end{alignedat} $$
Na coluna $0$, $0 - 1$ não é possível localmente.
A coluna precisa pedir empréstimo à próxima posição mais significativa.
Adição
O carry aparece quando há excesso na coluna.
$$ 1 + 1 = 10_2 $$
Subtração
O borrow aparece quando falta valor no minuendo local.
$$ 0 - 1 \Rightarrow \text{pede empréstimo} $$
O Meio Subtrator recebe duas entradas:
Ele produz duas saídas:
As subtrações básicas são:
Quando $0 - 1$ ocorre, a coluna recebe $10_2$ localmente.
$$ 0 - 1 \Rightarrow 10_2 - 1 = 1 $$
$$ \begin{array}{c|c||c|c} A & B & Difference & Borrow\ Out \\ \hline 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 \\ 1 & 0 & 1 & 0 \\ 1 & 1 & 0 & 0 \end{array} $$
A diferença segue o padrão da XOR.
O borrow só aparece quando $A=0$ e $B=1$.
Diferença
$$ Difference = A \oplus B $$
Forma canônica:
$$ Difference = \bar{A}B + A\bar{B} $$
Empréstimo
$$ Borrow\ Out = \bar{A} \cdot B $$
Essa função já está minimizada.
O Subtrator Completo subtrai três bits ao mesmo tempo:
$$ A - B - Borrow\ In $$
Ele recebe o empréstimo vindo da coluna anterior e decide se um novo empréstimo deve ser enviado adiante.
É a versão com borrow de entrada do subtrator.
Algumas leituras importantes são:
$$ \begin{array}{c|c|c||c|c} A & B & Borrow\ In & Difference & Borrow\ Out \\ \hline 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 1 & 1 \\ 0 & 1 & 1 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 \\ 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 & 1 \end{array} $$
A saída $Difference$ vale $1$ nas combinações:
$$ 001,\ 010,\ 100,\ 111 $$
De novo aparece a regra da paridade ímpar.
$$ Difference = A \oplus B \oplus Borrow\ In $$
A forma canônica explícita é:
$$ Difference = \bar{A}\bar{B}B_{in} + \bar{A}B\bar{B}_{in} + A\bar{B}\bar{B}_{in} + ABB_{in} $$
A leitura por XOR mostra a estrutura funcional de forma mais direta:
$$ Difference = A \oplus B \oplus Borrow\ In $$
O $Borrow\ Out$ vale $1$ nas combinações:
$$ 001,\ 010,\ 011,\ 111 $$
Usando $C$ para representar $Borrow\ In$, a SOP canônica é:
$$ Borrow\ Out = \bar{A}\bar{B}C + \bar{A}B\bar{C} + \bar{A}BC + ABC $$
Os grupos geram:
$$ Borrow\ Out = \bar{A}C + \bar{A}B + BC $$
Substituindo $C$ por $Borrow\ In$:
$$ Borrow\ Out = (\bar{A} \cdot Borrow\ In) + (\bar{A} \cdot B) + (B \cdot Borrow\ In) $$
O borrow aparece quando a coluna fica em dívida.
Isso ocorre quando o minuendo local é insuficiente ou quando $B$ e $Borrow\ In$ exigem valor ao mesmo tempo.
Circuito da diferença
Circuito do borrow
O princípio é o mesmo do somador.
Cada Subtrator Completo resolve uma coluna.
O $Borrow\ Out$ de uma coluna alimenta o $Borrow\ In$ da próxima.
Soma
Subtração
Na próxima aula, 13 - digital arithmetic ii, vamos avançar para multiplicação e divisão binárias usando repetição, deslocamento e composição de blocos.