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:
| A | B | S (Soma) | C_out (Vai-um) |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
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)
- Soma (S)
Tabela Verdade do Full-Adder:
| A | B | C_in | S (Soma) | C_out (vai-um) |
| 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 |
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.

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.


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:
| E1 | E0 | S3 | S2 | S1 | S0 |
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 0 |
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:
| Interruptor | Luz L1 | Luz L2 |
| I0 | 0 | 0 |
| I1 | 0 | 1 |
| I2 | 1 | 0 |
| I3 | 1 | 1 |
Tabela Verdade
| I0 | I1 | I2 | I3 | L1 | L0 |
| 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 | 1 |
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:
| E3 | E2 | E1 | E0 | S1 | S0 |
| 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |

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ência | P2 Internacional | P1 Nacional | P0 Carga | C1 | C0 | Significado |
| 0 | 0 | 0 | 0 | 0 | 0 | Nenhum pedido |
| 0 | 0 | 0 | 1 | 0 | 0 | Avião carga |
| 0 | 0 | 1 | 0 | 0 | 1 | Avião nacional |
| 0 | 0 | 1 | 1 | 0 | 1 | Avião nacional |
| 0 | 1 | 0 | 0 | 1 | 0 | Avião internacional |
| 0 | 1 | 0 | 1 | 1 | 0 | Avião internacional |
| 0 | 1 | 1 | 0 | 1 | 0 | Avião internacional |
| 0 | 1 | 1 | 1 | 1 | 0 | Avião internacional |
| 1 | 0 | 0 | 0 | 1 | 1 | Avião emergência |
| 1 | 0 | 0 | 1 | 1 | 1 | Avião emergência |
| 1 | 0 | 1 | 0 | 1 | 1 | Avião emergência |
| 1 | 0 | 1 | 1 | 1 | 1 | Avião emergência |
| 1 | 1 | 0 | 0 | 1 | 1 | Avião emergência |
| 1 | 1 | 0 | 1 | 1 | 1 | Avião emergência |
| 1 | 1 | 1 | 0 | 1 | 1 | Avião emergência |
| 1 | 1 | 1 | 1 | 1 | 1 | Aviã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.

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
| Sel | S |
| 0 | A |
| 1 | B |
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.

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”).
