bitGateLab Digital · Aprenda
Português (Brasil)
Abrir o simulador

Aprenda › Tema 7

Somadores binários: meio somador, completo e em cascata

Leitura de 8 min · Equipe bitGateLab

Somar é a operação mais importante de um computador: com ela se subtrai, se multiplica, se calculam endereços de memória e se contam eventos. Aqui você vai construir um somador do zero: primeiro o meio somador de um bit, depois o somador completo, que aceita um carry (o "vai-um"), em seguida o somador de vários bits em cascata e, por fim, como o mesmo circuito subtrai usando complemento de 2.

Somar em binário à mão

As regras para somar dois bits são quatro: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1 e 1 + 1 = 102, ou seja, 0 com carry de 1 para a coluna seguinte. Se, além disso, chega um carry, 1 + 1 + 1 = 112: resultado 1 e carry 1. Como em decimal, soma-se coluna por coluna, da direita para a esquerda, passando o carry para a esquerda.

Meio somador

O meio somador soma dois bits, A e B, e entrega duas saídas: a soma S e o carry C.

ABCS
0000
0101
1001
1110

A coluna S é a tabela de uma XOR e a coluna C é a de uma AND. Portanto:

S = A ⊕ B    C = AB

AB SC
Meio somador: a XOR entrega a soma S e a AND entrega o carry C. Os pontos marcam onde cada entrada se ramifica para as duas portas.

Ele se chama "meio" porque não tem entrada para o carry que vem de uma coluna anterior, de modo que só serve para o bit menos significativo.

Somador completo

O somador completo soma três bits: A, B e o carry de entrada Cin. Entrega a soma S e o carry de saída Cout. Repare que o par (Cout, S) é, em binário, a quantidade de uns presentes nas entradas.

ABCinCoutS
00000
00101
01001
01110
10001
10110
11010
11111

S vale 1 quando há uma quantidade ímpar de uns: S = Σm(1, 2, 4, 7) = A ⊕ B ⊕ Cin. Cout vale 1 quando há dois ou mais uns: Cout = Σm(3, 5, 6, 7), que, simplificada, é a função maioria:

Cout = AB + ACin + BCin

Se você tentar agrupar no mapa de Karnaugh de S, verá que nenhum 1 tem um vizinho com 1: é o padrão de tabuleiro de xadrez típico da XOR, que não se simplifica em soma de produtos.

Somador completo com dois meios somadores

Uma forma prática de montá-lo é encadear dois meios somadores e uma OR:

  1. Primeiro meio somador: P = A ⊕ B e G = AB.
  2. Segundo meio somador, com P e Cin: S = P ⊕ Cin e um carry parcial P·Cin.
  3. Cout = G + P·Cin = AB + (A ⊕ B)Cin.

Essa expressão é equivalente à da maioria: se A e B valem 1, AB já gera o carry; se exatamente um deles vale 1, o carry depende de Cin. G é chamado de sinal de geração e P, de sinal de propagação.

Somador com carry em cascata

Para somar números de n bits, conectam-se n somadores completos em fila: o Cout de cada estágio entra como Cin do seguinte. O Cin do primeiro estágio é colocado em 0, e o Cout do último é o carry final. Essa estrutura é chamada de somador com carry em cascata ou ripple carry, porque o carry "se propaga" de estágio em estágio como uma onda. Na família 74HC existe um chip que contém quatro somadores completos já conectados assim (o 74HC283).

Exemplo 1: 1011 + 0110 com um somador de 4 bits. Em decimal é 11 + 6.

EstágioAiBiCinSiCout
010010
111001
201101
310101

Soma: S3S2S1S0 = 0001 com carry final 1, ou seja, 100012 = 17. Correto: 11 + 6 = 17, que não cabe em 4 bits, e por isso aparece o carry final.

O custo é o tempo. O estágio 3 não pode dar o seu resultado definitivo até receber o carry do estágio 2, que por sua vez espera o do estágio 1. Se cada estágio leva dois níveis de porta para produzir o seu carry, um somador de n bits leva da ordem de 2n atrasos de porta no pior caso. Para 64 bits isso é lento demais; por isso os processadores usam somadores com carry antecipado, que calculam os carries em paralelo a partir dos sinais G e P. No cronograma do simulador você pode ver como as saídas mudam passo a passo até se estabilizarem.

Subtrair com o mesmo somador

Como se explica em sistemas de numeração, em complemento de 2 o negativo de B é B + 1. Então:

A − B = A + B + 1

Para obter isso, basta colocar uma XOR em cada bit de B, com a outra entrada conectada a uma linha de controle M, e conectar M também ao Cin do primeiro estágio. Com M = 0 as XOR deixam B passar e Cin = 0: o circuito soma. Com M = 1 as XOR invertem B e Cin = 1 fornece o "+1": o circuito subtrai.

Exemplo 2: subtrações de 4 bits.

  1. 9 − 5: A = 1001, B = 0101, B = 1010. 1001 + 1010 + 1 = 1 0100. Descarta-se o carry final: 0100 = 4.
  2. 5 − 9: A = 0101, B = 1001, B = 0110. 0101 + 0110 + 1 = 0 1100. Sem carry final. 1100 em complemento de 2 vale −8 + 4 = −4.

Quando você subtrai números sem sinal, o carry final indica se houve empréstimo: 1 significa que A ≥ B e 0 significa que A < B.

Para números com sinal, o overflow é detectado com uma única XOR: V = C3 ⊕ C4, em que C3 é o carry que entra no último estágio e C4 o que sai dele. Se forem diferentes, o resultado não cabe em 4 bits com sinal.

Erros comuns

Experimente no simulador

Montar um somador no editor é a melhor ponte entre as portas e a aritmética. Comece com um bit e vá crescendo até quatro.

  1. Coloque duas entradas, uma XOR e uma AND, e conecte-as como no diagrama do meio somador. Gere a tabela-verdade dele.
  2. Monte um somador completo com dois meios somadores e uma OR, e confira suas 8 linhas com a tabela deste artigo.
  3. Copie o somador completo quatro vezes e encadeie os carries. Coloque o primeiro Cin em 0.
  4. Mude as entradas para 1011 e 0110 e observe se a saída é 0001 com carry final 1.
  5. Abra o cronograma, mude uma entrada que obrigue o carry a percorrer os quatro estágios (por exemplo 1111 + 0001) e observe como as saídas se estabilizam.

Exercícios

  1. Calcule S e Cout de um somador completo com A = 1, B = 0, Cin = 1.
    Resposta

    Há dois uns: S = 0 e Cout = 1 (1 + 0 + 1 = 102).

  2. Some 0111 + 0101 com um somador de 4 bits e indique os carries de cada estágio.
    Resposta

    Estágio 0: 1 + 1 = 0, carry 1. Estágio 1: 1 + 0 + 1 = 0, carry 1. Estágio 2: 1 + 1 + 1 = 1, carry 1. Estágio 3: 0 + 0 + 1 = 1, carry 0. Resultado 1100 = 12 (7 + 5).

  3. Com um somador-subtrator de 4 bits, calcule 6 − 3 e escreva qual é o valor de M.
    Resposta

    M = 1. 0110 + 1100 + 1 = 1 0011. Descarta-se o carry: 0011 = 3.

  4. Interpretando como números com sinal de 4 bits, há overflow em 0111 + 0101?
    Resposta

    Sim. 7 + 5 = 12 não cabe na faixa de −8 a +7. O resultado 1100 seria lido como −4. Os carries são C3 = 1 e C4 = 0, e V = 1 ⊕ 0 = 1.