Sistemas Digitais e Microprocessados

Aritmética Digital - I

Professor: Gabriel Soares Baptista

Introdução

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.

Ideia central

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.

Da Conta ao 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:

  • na soma, esse sinal é o carry
  • na subtração, esse sinal é o borrow

Adição Binária Simples

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.

Adição com Carry

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.

Propagação do Carry

No exemplo $0111_2 + 0001_2$, o carry não aparece apenas uma vez.

Ele se propaga por várias colunas:

  • coluna $0$: $1 + 1 = 10_2$
  • coluna $1$: $1 + 0 + 1 = 10_2$
  • coluna $2$: $1 + 0 + 1 = 10_2$
  • coluna $3$: $0 + 0 + 1 = 1$
Leitura importante

Uma soma binária de vários bits é uma sequência de somas de 1 bit conectadas pelo carry.

Meio Somador

O Meio Somador soma dois bits, $A$ e $B$, sem considerar carry vindo de uma coluna anterior.

As quatro somas possíveis são:

  • $0 + 0 = 0$
  • $0 + 1 = 1$
  • $1 + 0 = 1$
  • $1 + 1 = 10_2$

O último caso exige duas saídas.

Saídas do Meio Somador

Quando ocorre $1 + 1 = 10_2$, a coluna atual guarda $0$ e envia $1$ para a próxima coluna.

Por isso, o bloco produz:

  • Sum, o bit que permanece na coluna atual
  • Carry Out, o transporte enviado para a coluna seguinte

$$ 1 + 1 = 10_2 \Rightarrow Sum = 0, \qquad Carry\ Out = 1 $$

Tabela do Meio Somador

$$ \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$.

Expressões do Meio Somador

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$.

Circuito do Meio Somador

Leitura algébrica

$$ \begin{aligned} Sum &= A \oplus B \\ Carry\ Out &= A \cdot B \end{aligned} $$

Circuito

2026-04-27T17:03:54.915108 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ Sum A B
2026-04-27T17:03:54.927561 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ CarryOut A B

Bloco Meio Somador

HalfAdderAAHAHalf AdderA->HABBB->HASSumHA->SCCarry OutHA->C

O Meio Somador resolve a primeira coluna de uma soma quando ainda não existe carry de entrada.

Limite do Meio Somador

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.

Somador Completo

O Somador Completo soma três bits ao mesmo tempo:

$$ A + B + Carry\ In $$

Ele recebe:

  • $A$, o bit local do primeiro operando
  • $B$, o bit local do segundo operando
  • $Carry\ In$, o transporte vindo da coluna anterior

Esse é o bloco adequado para as colunas internas de uma soma de vários bits.

Casos do Somador Completo

Algumas leituras aritméticas importantes são:

  • $0 + 0 + 0 = 0 \Rightarrow Sum = 0, Carry\ Out = 0$
  • $0 + 0 + 1 = 1 \Rightarrow Sum = 1, Carry\ Out = 0$
  • $1 + 0 + 1 = 10_2 \Rightarrow Sum = 0, Carry\ Out = 1$
  • $1 + 1 + 0 = 10_2 \Rightarrow Sum = 0, Carry\ Out = 1$
  • $1 + 1 + 1 = 11_2 \Rightarrow Sum = 1, Carry\ Out = 1$

Tabela do Somador Completo

$$ \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} $$

Soma no Somador Completo

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 $$

Forma Canônica da Soma

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 $$

Carry Out no Somador Completo

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 $$

Minimização do Carry Out

BCA000110110100010111

Cada grupo preserva duas variáveis em $1$.

$$ Carry\ Out = AB + AC + BC $$

Leitura Física do Carry

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 do Somador Completo

Circuito da soma

2026-04-27T17:03:54.947912 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ Sum Cin A B

Circuito do carry

2026-04-27T17:03:54.975962 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ Cout A B A Cin B Cin

Bloco Somador Completo

FullAdderAAFAFull AdderA->FABBB->FACinCarry InCin->FASSumFA->SCoutCarry OutFA->Cout

Somador Completo no Logisim

Somador completo montado no Logisim com Cin ligado em 0.

Nesta montagem, o $Cin$ está ligado em $0$.

Isso faz o bloco atuar como a primeira coluna de uma soma.

Somador de 8 Bits

Somador de 8 bits montado no Logisim com oito somadores completos em cascata.

O mesmo bloco é repetido oito vezes.

Cada Somador Completo resolve uma coluna da soma binária.

Encadeamento em 8 Bits

Leia da direita para a esquerda, começando pelo bit menos significativo:

  • o primeiro somador recebe $A_0$, $B_0$ e $Cin = 0$
  • ele produz $S_0$ e o carry $C_1$
  • $C_1$ entra como $Cin$ do segundo bloco
  • o processo se repete até a última coluna

O carry é o fio que costura a montagem inteira.

Ripple-Carry Adder

RippleCarry8fa0FA0(A0,B0)fa1FA1(A1,B1)fa0->fa1C1fa2FA2(A2,B2)fa1->fa2C2fa3FA3(A3,B3)fa2->fa3C3fa4FA4(A4,B4)fa3->fa4C4fa5FA5(A5,B5)fa4->fa5C5fa6FA6(A6,B6)fa5->fa6C6fa7FA7(A7,B7)fa6->fa7C7

Overflow na Soma

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.

Cuidado conceitual

Em uma leitura didática simples, $C_8 = 1$ indica estouro da capacidade de representação sem considerar sinal.

Subtração Binária Simples

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.

Subtração com Borrow

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.

Carry e Borrow

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} $$

Meio Subtrator

O Meio Subtrator recebe duas entradas:

  • $A$, o minuendo
  • $B$, o subtraendo

Ele produz duas saídas:

  • Difference, o valor que fica na coluna
  • Borrow Out, o empréstimo enviado para a próxima coluna

Caso Crítico do Meio Subtrator

As subtrações básicas são:

  • $0 - 0 = 0$
  • $1 - 0 = 1$
  • $1 - 1 = 0$
  • $0 - 1$ exige empréstimo

Quando $0 - 1$ ocorre, a coluna recebe $10_2$ localmente.

$$ 0 - 1 \Rightarrow 10_2 - 1 = 1 $$

Tabela do Meio Subtrator

$$ \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$.

Expressões do Meio Subtrator

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.

Circuito do Meio Subtrator

2026-04-27T17:03:54.992994 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ Difference A B
2026-04-27T17:03:55.024573 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ BorrowOut B A
HalfSubAAHSHalf SubtractorA->HSBBB->HSDDifferenceHS->DBoBorrow OutHS->Bo

Subtrator Completo

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.

Casos do Subtrator Completo

Algumas leituras importantes são:

  • $1 - 0 - 0 = 1 \Rightarrow Difference = 1, Borrow\ Out = 0$
  • $1 - 1 - 0 = 0 \Rightarrow Difference = 0, Borrow\ Out = 0$
  • $1 - 0 - 1 = 0 \Rightarrow Difference = 0, Borrow\ Out = 0$
  • $0 - 0 - 1 \Rightarrow Difference = 1, Borrow\ Out = 1$
  • $0 - 1 - 0 \Rightarrow Difference = 1, Borrow\ Out = 1$
  • $0 - 1 - 1 \Rightarrow Difference = 0, Borrow\ Out = 1$

Tabela do Subtrator Completo

$$ \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} $$

Diferença no Subtrator Completo

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 $$

Forma Canônica da Diferença

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 $$

Borrow Out no Subtrator Completo

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 $$

Minimização do Borrow Out

BCA000110110101101011

Os grupos geram:

$$ Borrow\ Out = \bar{A}C + \bar{A}B + BC $$

Leitura Física do Borrow

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 do Subtrator Completo

Circuito da diferença

2026-04-27T17:03:55.042661 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ Difference Bin A B

Circuito do borrow

2026-04-27T17:03:55.083536 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ Bout Bin A B A B Bin

Bloco Subtrator Completo

FullSubAAFSFull SubtractorA->FSBBB->FSBinBorrow InBin->FSDDifferenceFS->DBoutBorrow OutFS->Bout

Subtrator de Vários Bits

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.

Sub6fs0FS0fs1FS1fs0->fs1fs2FS2fs1->fs2fs3FS3fs2->fs3fs4FS4fs3->fs4fs5FS5fs4->fs5

Comparação Final

Soma

  • Meio Somador: recebe $A$ e $B$
  • Somador Completo: recebe $A$, $B$ e $Carry\ In$
  • Encadeamento por $Carry\ Out$

Subtração

  • Meio Subtrator: recebe $A$ e $B$
  • Subtrator Completo: recebe $A$, $B$ e $Borrow\ In$
  • Encadeamento por $Borrow\ Out$

Próximos passos

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.