Blocos Combinacionais

Somadores e Subtratores Binários

Este tópico aborda os blocos fundamentais para a realização de operações aritméticas em circuitos digitais: os somadores e subtratores. Esses blocos são construídos a partir de portas lógicas, aplicando os princípios da Álgebra Booleana para manipular valores binários (0 e 1).


Half-Adder (Meio-Somador)

O Half-Adder (HA) é o bloco combinacional mais básico para a operação de soma. Ele é projetado para somar dois algarismos binários (bits) de entrada.

  • Entradas: A e B
  • Saídas:
    • Soma (S): resultado da adição dos dois bits
    • Vai-um (Carry-Out): bit de “vai um” gerado, caso a soma exceda a capacidade de um único bit

Tabela Verdade do Half-Adder:

ABS (Soma)C_out (Vai-um)
0000
0110
1010
1101
Imagem ilustrativa de um Half-Adder

Implementação com Portas Lógicas:

  • Soma (S): Nota-se que a saída da Soma é 1 quando APENAS uma das entradas são 1, então essa pode ser feita com uma Porta XOR → S = A ⊕ B
  • Vai-um (C_out): Apenas quando A e B são 1, Porta AND → C_out = A ∧ B

Full-Adder (Somador Completo)

Para somar números binários com mais de um bit, é necessário considerar o “vai-um” (carry-in) da posição anterior. Para isso, usamos o Full-Adder (FA).

  • Entradas: A, B, e Carry-In (C_in)
  • Saídas:
    • Soma (S)
    • Vai-um (Carry-Out)

Tabela Verdade do Full-Adder:

ABC_inS (Soma)C_out (vai-um)
00000
00110
01010
01101
10010
10101
11001
11111

Observação:

Múltiplos Full-Adders são conectados em cascata para somar números com vários bits. Essa arquitetura é chamada de ripple-carry adder.

Somador de 4 bits

Subtrator Binário com Complemento de 2

Como vimos antes, geralmente para implementar subtrações é utilizado o complemento de 2 do subtraendo. Assim, quando queremos criar um subtrator usando portas lógicas, podemos simplesmente inverter a entrada “B” do Full-Adder adicionando uma porta NOT na entrada, e adicionando a constante 1 ao Carry In inicial do primeiro somador.

Subtrator 1 bit feito a partir de um Full-Adder
Subtrator 4 bits

Outros Blocos Combinacionais

Os blocos combinacionais são fundamentais na construção de circuitos digitais mais complexos. Além dos somadores e subtratores, há diversos outros componentes que desempenham funções lógicas e aritméticas importantes em sistemas computacionais. A seguir, apresentamos uma introdução aos principais blocos combinacionais utilizados em circuitos digitais.


Decodificadores

Decodificadores são circuitos que transformam um código binário de entrada em uma única saída ativa entre várias disponíveis. Eles são utilizados para ativar seletivamente uma linha entre muitas, a partir de uma combinação binária de controle. Por exemplo, um decodificador 2→4 possui 2 entradas e 4 saídas, ativando apenas uma saída por vez. São amplamente usados em seleção de memória, controle de periféricos e implementação de instruções em processadores.

Tabela Verdade Decodificador 2 bits de seleção:

Imagem ilustrativa de um Decodificador
E1E0S3S2S1S0
000001
010010
100100
111000

Decodificadores também podem ser criados para propósitos individuais, como por exemplo, decodificar a entrada de 4 bits binários para as saídas serem os LEDs de um display de 7 segmentos representando o respectivo número em hexadecimal, ou seja, ele pode ser construído de diferentes maneiras dependendo do contexto de utilização.

Exemplo: Sistema de Controle de Luzes de Uma Sala

Imagine uma sala com 4 interruptores diferentes que controlam 2 luzes de teto de forma combinada para criar cenários de iluminação.

  • Entradas (interruptores):
    • I0, I1, I2, I3 → cada interruptor representa um cenário de iluminação
  • Saídas (luzes):
    • L1, L0 → combinam para mostrar qual luz está acesa

Regras de funcionamento:

  • Cada interruptor aciona uma combinação específica de luzes:
InterruptorLuz L1Luz L2
I000
I101
I210
I311

Tabela Verdade

I0I1I2I3L1L0
100000
010001
001010
000111

L1 = I2 v I3  

L0 = I1 v I3


Codificadores

Codificadores realizam a operação inversa dos decodificadores: eles recebem como entrada uma entre várias linhas ativas (normalmente apenas uma é ativa por vez) e geram uma saída binária correspondente à linha ativa. Por exemplo, um codificador 4:2 recebe 4 sinais de entrada e gera um código binário de 2 bits que representa qual das 4 entradas está ativada.

Codificadores são úteis em sistemas que precisam reduzir a quantidade de linhas de sinal, como teclados, sensores e circuitos de prioridade. Uma variação importante é o codificador de prioridade, que lida com múltiplas entradas ativas, priorizando uma delas conforme um critério definido.

Exemplo de Tabela Verdade Codificador 4 bits de entrada:

E3E2E1E0S1S0
000100
001001
010010
100011
Codificador 4 entradas 2 saídas

Exemplo de utilização de um Codificador

Imagine um sistema de controle de pistas em um aeroporto. Há diferentes tipos de aeronaves solicitando uso da pista, cada uma com uma prioridade distinta:

  • P3: Avião com emergência (maior prioridade)
  • P2: Avião internacional
  • P1: Avião nacional
  • P0: Avião de carga (menor prioridade)

Para simplificar o controle, utiliza-se um codificador de prioridade 4:2. Ele recebe até quatro sinais de entrada e gera um código binário de apenas 2 bits que identifica qual tipo de voo tem prioridade no momento.

Se apenas uma entrada estiver ativa, a saída binária corresponde diretamente àquela entrada. Se várias entradas estiverem ativas simultaneamente, o codificador escolhe a de maior prioridade (Emergência > Internacional > Nacional > Carga).

P3 EmergênciaP2 InternacionalP1 NacionalP0 CargaC1C0Significado
000000Nenhum pedido
000100Avião carga
001001Avião nacional
001101Avião nacional
010010Avião internacional
010110Avião internacional
011010Avião internacional
011110Avião internacional
100011Avião emergência
100111Avião emergência
101011Avião emergência 
101111Avião emergência
110011Avião emergência 
110111Avião emergência
111011Avião emergência
111111Avião emergência

Esse codificador reduz a quantidade de variáveis necessárias para o controle, tornando o sistema mais simples e eficiente. Em vez de analisar diretamente todas as combinações possíveis (16 para 4 entradas), o sistema trabalha com apenas 2 bits de informação, facilitando o projeto e a implementação do circuito de controle da pista.


Você verá mais para frente que em projetos de máquinas de estados, codificadores podem ser úteis para simplificar a lógica de controle, especialmente quando há várias entradas que podem estar ativas simultaneamente. Por exemplo, imagine um sistema de 4 estados, com 4 entradas que geram 16 combinações possíveis de ativação (2⁴ = 16). Se cada uma dessas combinações fosse tratada individualmente, a tabela verdade e o circuito resultante seriam complexos e grandes.

Ao utilizar um codificador 4:2, é possível transformar essas 4 entradas em um código binário de apenas 2 bits. Com isso, você reduz a quantidade de variáveis necessárias para representar as entradas e simplifica a lógica que define os estados da máquina. Em vez de tratar diretamente todas as combinações das 4 entradas, o sistema passa a trabalhar com um valor codificado, facilitando o projeto e a implementação da máquina de estados.

Essa técnica é especialmente útil quando as entradas representam eventos ou condições distintas, e você deseja associar a cada uma delas um estado específico ou uma transição em seu circuito.


Multiplexadores (MUX)

Multiplexadores são circuitos que selecionam uma entre várias entradas de dados e a encaminham para uma única saída, com base em sinais de controle (seleção). Eles funcionam como “chaves digitais” que escolhem qual informação será transmitida. Um MUX 4:1, por exemplo, possui 4 entradas de dados, 2 entradas de seleção e uma única saída. 

O número de entradas de dados (Ed) depende da quantidade de entradas de seleção (Es), sendo
Ed = 2Es. O Mux passará para a saída apenas a entrada correspondente à entrada de controle selecionada.

Ilustração de um MUX
Mux 4 bits

São muito utilizados para economizar conexões e na implementação de lógica condicional, por exemplo, um multiplexador 4:1 pode ser usado em um sistema de áudio com quatro fontes diferentes (como rádio, Bluetooth, USB e auxiliar). Com dois bits de seleção, o MUX escolhe qual fonte será enviada para os alto-falantes. Isso permite trocar entre as fontes de forma prática usando apenas uma lógica de controle simples.

Funcionamento do Mux

SelS
0A
1B

Poderíamos montar uma tabela verdade de 8 linhas para cada caso envolvendo A, B e Sel. Mas podemos simplificar apenas para que quando Sel = 0, S = A e quando Sel = 1, S = B.


Shifters (Deslocadores)

Shifters são circuitos combinacionais responsáveis por deslocar os bits de um número binário para a esquerda ou para a direita. Esse deslocamento pode ocorrer de duas formas principais:

  • Deslocamento lógico: completa os espaços vazios com zeros.
  • Deslocamento aritmético: ao deslocar para a direita, mantém o bit de sinal (mais significativo), preservando o valor de números negativos em representação de complemento de dois.

Esses circuitos são bastante utilizados em:

  • Multiplicações ou divisões rápidas por potências de dois
  • Protocolos de comunicação, onde ajustes finos de bits são necessários
  • Operações com registradores, como rotação de dados

Um exemplo simples ajuda a entender:
Considere os seguintes nibbles (4 bits):

  • 0001 = 1
  • 0010 = 2
  • 0100 = 4
  • 1000 = 8

Observe que esses valores representam o mesmo padrão sendo deslocado à esquerda a cada passo. Cada deslocamento para a esquerda multiplica o valor por 2.
Da mesma forma, ao deslocar para a direita, o valor é dividido por 2, ignorando casas decimais.

Shifter 4 bits.
B seleciona de quantas “casas” será o deslocamento.

Shifters normalmente são construídos a partir de multiplexadores em paralelo, que possuem a função de deslocar o bit uma casa para a direita ou esquerda. 


Comparadores

Comparadores binários são circuitos que analisam dois números e determinam se são iguais ou qual deles é maior ou menor.

Comparadores simples verificam a igualdade bit a bit, enquanto comparadores mais sofisticados conseguem indicar se um valor é “maior que”, “menor que” ou “igual a” outro. Eles são amplamente utilizados em unidades de controle, decisões condicionais e na seleção de caminhos em arquiteturas digitais.

Verificação de igualdade

A verificação pode ser feita bit a bit com portas XOR. Se todos os bits comparados forem iguais, cada XOR será 0, então os números são iguais. Para isso, todas as saídas das portas XOR podem ser unidas por uma porta OR: se a saída final for 0, os números são iguais; se for 1, existe pelo menos um bit diferente.

Verificação de maior ou menor

Para saber qual número é maior, pode-se realizar a operação de subtração entre eles e, ao final, verificar o sinal do resultado:

  • Resultado positivo: o minuendo é maior que o subtraendo
  • Resultado negativo: o minuendo é menor que o subtraendo

É importante verificar também se os números são iguais antes de analisar apenas o sinal da subtração, para evitar uma interpretação incorreta (um falso “maior que”).


Exercícios

1. Quais portas lógicas implementam as saídas de Soma (S) e Carry-Out (C_out) de um Half-Adder?

  • a) S = OR, C_out = XOR
  • b) S = XOR, C_out = AND
  • c) S = AND, C_out = XOR
  • d) S = OR, C_out = AND

2. Para A = 1 e B = 1, quais são as saídas do Half-Adder?

  • a) S = 0 e C_out = 0
  • b) S = 1 e C_out = 0
  • c) S = 0 e C_out = 1
  • d) S = 1 e C_out = 1

3. O que caracteriza um ripple-carry adder?

  • a) Somadores conectados em série, onde o carry se propaga entre eles
  • b) Somadores independentes sem carry
  • c) Uso exclusivo de portas XOR
  • d) Realiza apenas subtração

4. Como é implementado um subtrator usando um Full-Adder?

  • a) Troca-se A por B
  • b) Inverte-se A e adiciona-se carry 1
  • c) Inverte-se B e adiciona-se carry 1
  • d) Remove-se o carry de entrada

5. Quantas entradas de seleção possui um MUX 4:1?

  • a) 1
  • b) 2
  • c) 3
  • d) 4

6. Um deslocamento lógico à esquerda em 4 bits (por 1 posição) equivale a:

  • a) Somar 1
  • b) Dividir por 2
  • c) Multiplicar por 2
  • d) Inverter o número

7. Shifters são normalmente implementados utilizando:

  • a) Portas XOR
  • b) Flip-flops
  • c) Multiplexadores em paralelo
  • d) Codificadores

8. Como determinar se A > B usando circuitos combinacionais?

  • a) Comparando bit a bit com XOR
  • b) Usando apenas um MUX
  • c) Realizando A − B e analisando o bit de sinal
  • d) Codificando ambos os números