Revisão: Fundamentos de Circuitos Digitais
Apresentação
Este material é destinado aos estudantes de Ciência da Computação e Engenharia de Computação que ingressam em Organização de Computadores sem ter cursado previamente Fundamentos de Circuitos Digitais.
A seleção de tópicos segue um único critério: o que é efetivamente pré-requisito para acompanhar a ementa de Organização de Computadores. São cinco tópicos — sistemas de numeração, portas lógicas, álgebra booleana, codificadores/decodificadores e circuitos aritméticos —, cobertos na medida exata em que aparecem na disciplina.
Use a tabela abaixo para decidir quais seções revisar com calma e quais você já pode apenas percorrer rapidamente.
Como este material se conecta com Organização de Computadores
| Seção deste material | Onde será usado em Organização de Computadores |
|---|---|
| 1. Sistemas de numeração e códigos | Codificação de instruções, endereçamento de memória, representação de dados |
| 2. Portas lógicas | Construção interna da ULA e da unidade de controle |
| 3. Álgebra booleana | Formalização do comportamento dos circuitos da CPU |
| 4. Codificadores e decodificadores | Decodificação de instruções (opcode) e seleção de endereços de memória |
| 5. Circuitos aritméticos | Unidade Lógica e Aritmética (ULA) |
Como estudar
Cada seção contém: motivação, conceitos, exemplos resolvidos passo a passo e um resumo. Ao final do documento há uma lista de exercícios com gabarito comentado.
Ao longo do texto, o traço superior que indica o complemento é representado por apóstrofo: A' significa "A negado" (na notação com traço, escreve-se Ā). O produto lógico (AND) é indicado por · ou pela simples justaposição (A·B = AB), e a soma lógica (OR) por +.
Objetivos
Ao final deste material você deve ser capaz de:
- Converter valores entre os sistemas binário, octal, decimal e hexadecimal, e explicar por que o hexadecimal é usado para representar instruções e endereços de memória.
- Determinar a saída de portas lógicas (AND, OR, NOT, NAND, NOR, XOR, XNOR) e escrever a expressão booleana de um circuito combinacional simples.
- Aplicar os postulados, propriedades e teoremas de De Morgan da álgebra booleana para demonstrar a equivalência entre duas expressões.
- Explicar o funcionamento de codificadores e decodificadores, relacionando-os à decodificação de opcodes e à seleção de endereços de memória.
- Construir a lógica de um somador completo e de um somador em cascata, e explicar como a subtração é implementada por complemento de 2.
1. Sistemas de Numeração e Códigos
1.1 Por que isso importa
Todo o conteúdo de Organização de Computadores depende desta base. Uma instrução de máquina é, fisicamente, um conjunto de bits; um endereço de memória é um número binário; o conteúdo de um registrador é uma sequência de bits que só ganha significado quando sabemos qual convenção de representação está sendo usada. Ao escrever um programa em linguagem de máquina no simulador didático da disciplina, você estará manipulando diretamente números em binário e hexadecimal.
1.2 Sistemas posicionais
Em um sistema posicional de base b, cada dígito é multiplicado por uma potência de b determinada por sua posição:
N = dₙ·bⁿ + ... + d₂·b² + d₁·b¹ + d₀·b⁰
| Sistema | Base | Dígitos válidos |
|---|---|---|
| Decimal | 10 | 0–9 |
| Binário | 2 | 0, 1 |
| Octal | 8 | 0–7 |
| Hexadecimal | 16 | 0–9, A–F |
No hexadecimal, as letras representam os valores: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.
O binário é o sistema natural dos circuitos digitais, porque cada dígito corresponde a um dos dois estados estáveis de um dispositivo eletrônico (por exemplo, dois níveis de tensão). O hexadecimal não tem existência física: é apenas uma notação compacta para o binário, adotada porque escrever 9C é menos propenso a erro do que escrever 10011100.
1.3 Conversão de base b para decimal
Basta aplicar a soma ponderada.
Exemplo 1.1 — Converter 10011100₂ para decimal.
| Bit | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| Peso | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
128 + 16 + 8 + 4 = 156
Logo, 10011100₂ = 156₁₀.
Exemplo 1.2 — Converter 9C₁₆ para decimal.
9 × 16¹ + 12 × 16⁰ = 144 + 12 = 156
Logo, 9C₁₆ = 156₁₀.
Exemplo 1.3 — Converter 234₈ para decimal.
2 × 8² + 3 × 8¹ + 4 × 8⁰ = 128 + 24 + 4 = 156
Note que 10011100₂, 9C₁₆, 234₈ e 156₁₀ são quatro representações do mesmo valor.
1.4 Conversão de decimal para base b
Método das divisões sucessivas: divide-se o número pela base, anotando os restos, até que o quociente seja zero. A resposta é a sequência de restos lida de baixo para cima.
Exemplo 1.4 — Converter 45₁₀ para binário.
| Divisão | Quociente | Resto |
|---|---|---|
| 45 ÷ 2 | 22 | 1 |
| 22 ÷ 2 | 11 | 0 |
| 11 ÷ 2 | 5 | 1 |
| 5 ÷ 2 | 2 | 1 |
| 2 ÷ 2 | 1 | 0 |
| 1 ÷ 2 | 0 | 1 |
Lendo os restos de baixo para cima: 45₁₀ = 101101₂.
Verificação: 32 + 8 + 4 + 1 = 45 ✔
1.5 Conversão entre binário, octal e hexadecimal
Como 8 = 2³ e 16 = 2⁴, a conversão é imediata por agrupamento de bits, sem passar pelo decimal. Os agrupamentos são feitos a partir da direita, completando com zeros à esquerda se necessário.
- Binário ↔ Octal: grupos de 3 bits
- Binário ↔ Hexadecimal: grupos de 4 bits
Exemplo 1.5 — Converter 110101110₂ para hexadecimal e octal.
Para hexadecimal (grupos de 4, da direita para a esquerda):
1 1010 1110 → 0001 1010 1110
1 A E
110101110₂ = 1AE₁₆
Para octal (grupos de 3):
110 101 110
6 5 6
110101110₂ = 656₈
Esta é exatamente a razão pela qual o hexadecimal é usado para escrever instruções de máquina: cada dígito hexadecimal representa exatamente 4 bits, e a tradução é mecânica.
1.6 Tabela de referência
| Decimal | Binário | Octal | Hexadecimal |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
1.7 Faixa de representação
Com n bits é possível representar 2ⁿ combinações distintas. Para números inteiros sem sinal, a faixa é de 0 a 2ⁿ − 1.
| Bits | Combinações | Faixa (sem sinal) |
|---|---|---|
| 4 | 16 | 0 a 15 |
| 8 | 256 | 0 a 255 |
| 12 | 4.096 | 0 a 4.095 |
| 16 | 65.536 | 0 a 65.535 |
Essa relação será usada constantemente em Organização de Computadores. Por exemplo: se o barramento de endereços de um processador tem 12 linhas, ele consegue endereçar 2¹² = 4.096 posições de memória. Se o opcode de uma instrução ocupa 4 bits, o conjunto de instruções pode ter no máximo 2⁴ = 16 instruções diferentes.
1.8 Codificação da informação
Nem toda sequência de bits representa um número na forma posicional. Frequentemente os bits são usados como um código, isto é, uma convenção arbitrária que associa combinações binárias a símbolos.
Código BCD 8421
No BCD (Binary Coded Decimal), cada dígito decimal é codificado separadamente em 4 bits, com os pesos 8-4-2-1.
Exemplo 1.6 — Representar 156 em BCD e comparar com o binário puro.
Dígito: 1 5 6
BCD: 0001 0101 0110 → 0001 0101 0110 (12 bits)
Binário puro de 156: 10011100 (8 bits)
São representações completamente diferentes. O BCD ocupa mais bits, mas facilita a exibição em displays decimais, pois cada dígito pode ser tratado isoladamente.
Como o BCD usa apenas as combinações de 0000 a 1001, seis combinações são inválidas: 1010, 1011, 1100, 1101, 1110 e 1111.
Código ASCII
O ASCII associa caracteres a valores numéricos de 7 bits (0 a 127), normalmente armazenados em 1 byte.
| Caractere | Decimal | Binário | Hexadecimal |
|---|---|---|---|
| espaço | 32 | 0100000 | 20 |
| '0' | 48 | 0110000 | 30 |
| '9' | 57 | 0111001 | 39 |
| 'A' | 65 | 1000001 | 41 |
| 'Z' | 90 | 1011010 | 5A |
| 'a' | 97 | 1100001 | 61 |
| 'z' | 122 | 1111010 | 7A |
Duas propriedades úteis, ambas consequência da organização da tabela:
- O caractere
'7'tem código 55, não 7. Para obter o valor numérico de um dígito ASCII, subtrai-se 48 (o código de'0'): 55 − 48 = 7. - A diferença entre uma letra maiúscula e sua minúscula correspondente é sempre 32, ou seja, apenas o bit de peso 32 (o bit 5) muda:
'A'é1000001e'a'é1100001.
1.9 Resumo da seção 1
- Um mesmo valor tem representações diferentes em bases diferentes; a base não muda o valor.
- Conversão para decimal: soma ponderada. Conversão a partir do decimal: divisões sucessivas, restos lidos de baixo para cima.
- Binário → hexadecimal: grupos de 4 bits. Binário → octal: grupos de 3 bits.
- Com n bits obtêm-se 2ⁿ combinações — relação que determina o tamanho da memória endereçável e o número máximo de instruções.
- BCD codifica cada dígito decimal separadamente e não equivale ao binário puro.
- ASCII é uma convenção de codificação de caracteres, não uma representação numérica posicional.
Os sistemas de numeração e a codificação da informação são tratados em TOCCI, WIDMER e MOSS. Sistemas digitais: princípios e aplicações. Pearson, 2018 (Ac.131146), e em DELGADO, José. Arquitetura de computadores. LTC, 2017 (Ac.5013563).
2. Portas Lógicas
2.1 Por que isso importa
As portas lógicas são os blocos elementares a partir dos quais todo o hardware de um computador é construído. A ULA que você estudará na unidade sobre CPU é um arranjo de portas lógicas; a unidade de controle que interpreta o opcode de uma instrução também. Compreender as portas é o que permite deixar de tratar a CPU como uma caixa-preta.
2.2 Variáveis e níveis lógicos
Em lógica digital trabalhamos com variáveis que assumem apenas dois valores: 0 e 1. Fisicamente, esses valores correspondem a faixas de tensão (por exemplo, próxima de 0 V e próxima da tensão de alimentação). A tabela-verdade de um circuito lista a saída para todas as combinações possíveis de entrada. Um circuito com n entradas tem uma tabela-verdade com 2ⁿ linhas.
2.3 Portas básicas
Porta AND (E)
A saída é 1 somente quando todas as entradas são 1.
Expressão: S = A · B
| A | B | S |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Porta OR (OU)
A saída é 1 quando pelo menos uma entrada é 1.
Expressão: S = A + B
| A | B | S |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Porta NOT (NÃO / inversor)
Inverte o valor da entrada. É a única porta básica com uma só entrada.
Expressão: S = A'
| A | S |
|---|---|
| 0 | 1 |
| 1 | 0 |
2.4 Portas derivadas
Porta NAND (NÃO E)
Equivale a uma AND seguida de um inversor.
Expressão: S = (A · B)'
| A | B | S |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Porta NOR (NÃO OU)
Equivale a uma OR seguida de um inversor.
Expressão: S = (A + B)'
| A | B | S |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
Porta XOR (OU-Exclusivo)
A saída é 1 quando as entradas são diferentes.
Expressão: S = A ⊕ B = A'·B + A·B'
| A | B | S |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
A XOR é a porta mais importante desta seção para Organização de Computadores: ela é o núcleo do somador binário, como veremos na seção 5. Uma leitura útil: a XOR detecta desigualdade.
Porta XNOR (Coincidência)
A saída é 1 quando as entradas são iguais. É a XOR negada.
Expressão: S = (A ⊕ B)' = A·B + A'·B'
| A | B | S |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
A XNOR é a base dos comparadores digitais: para verificar se dois registradores contêm o mesmo valor, compara-se bit a bit com XNORs e combinam-se os resultados com uma AND.
2.5 Tabela comparativa
| A | B | AND | OR | NAND | NOR | XOR | XNOR |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
2.6 De circuitos a expressões
Para obter a expressão booleana de um circuito, percorre-se o diagrama da entrada para a saída, anotando o resultado de cada porta.
Exemplo 2.1 — Um circuito recebe A, B e C. As entradas A e B alimentam uma porta AND; a saída dessa AND alimenta uma porta OR junto com C; a saída da OR passa por um inversor.
Passo a passo:
- Saída da AND:
A·B - Saída da OR:
A·B + C - Saída do inversor:
S = (A·B + C)'
2.7 Universalidade da NAND
A porta NAND é chamada de porta universal porque qualquer função lógica pode ser construída apenas com NANDs. Isso tem consequência prática direta: fabricantes podem produzir circuitos integrados inteiros com um único tipo de porta.
| Função | Construção com NAND |
|---|---|
| NOT | A' = (A NAND A) |
| AND | A·B = (A NAND B) NAND (A NAND B) |
| OR | A+B = (A NAND A) NAND (B NAND B) |
A construção da OR a partir de NANDs é uma aplicação direta do teorema de De Morgan, que veremos na próxima seção. A porta NOR também é universal, pelo mesmo motivo.
2.8 Resumo da seção 2
- Portas básicas: AND (todas em 1), OR (pelo menos uma em 1), NOT (inverte).
- Portas derivadas: NAND e NOR (versões negadas), XOR (detecta diferença), XNOR (detecta igualdade).
- Um circuito de n entradas tem tabela-verdade de 2ⁿ linhas.
- XOR é a base da soma binária; XNOR é a base da comparação.
- NAND e NOR são portas universais.
CAPUANO, Francisco Gabriel. Sistemas digitais: circuitos combinacionais e sequenciais. Érica, 2014 (Ac.5012157), Capítulo 1 — Funções e Portas Lógicas.
3. Álgebra Booleana
3.1 Por que isso importa
A álgebra booleana é a linguagem formal que descreve o comportamento dos circuitos digitais. Em Organização de Computadores, ela aparece quando precisamos justificar por que um determinado arranjo de portas produz o resultado esperado — por exemplo, ao demonstrar que duas formas diferentes de expressar a saída de carry de um somador são equivalentes, ou ao entender as operações lógicas implementadas pela ULA.
Formulada por George Boole no século XIX e aplicada a circuitos de comutação por Claude Shannon em 1937, ela opera sobre variáveis que assumem apenas dois valores, com três operações fundamentais: complementação (NOT), adição lógica (OR) e multiplicação lógica (AND).
Esta seção cobre postulados, propriedades e teoremas — o suficiente para aplicar as regras e demonstrar equivalências entre expressões booleanas.
3.2 Postulados
Os postulados são as regras fundamentais, verificáveis diretamente pelas tabelas-verdade das portas correspondentes.
Postulados da complementação
Se A = 0, então A' = 1
Se A = 1, então A' = 0
(A')' = A ← dupla negação
Postulados da adição (OR)
A + 0 = A
A + 1 = 1
A + A = A
A + A' = 1
Postulados da multiplicação (AND)
A · 0 = 0
A · 1 = A
A · A = A
A · A' = 0
Vale observar o contraste com a álgebra convencional: A + A = A (e não 2A), e A · A = A (e não A²). Isso ocorre porque as variáveis só assumem os valores 0 e 1.
Dois postulados merecem destaque por serem usados constantemente em hardware:
A · 1 = AeA · 0 = 0: uma porta AND funciona como uma chave habilitadora. Mantendo uma entrada em 1, o sinal da outra passa; colocando-a em 0, o sinal é bloqueado. É assim que se controla o fluxo de dados nos barramentos internos da CPU.A + 0 = AeA + 1 = 1: uma porta OR funciona como uma chave forçadora — com uma entrada em 1, a saída é 1 independentemente do resto.
3.3 Propriedades
Comutativa
A + B = B + A
A · B = B · A
Associativa
(A + B) + C = A + (B + C)
(A · B) · C = A · (B · C)
Consequência prática: uma operação AND ou OR sobre várias variáveis pode ser implementada com portas de duas entradas em qualquer agrupamento.
Distributiva
A · (B + C) = A·B + A·C
A álgebra booleana possui ainda uma segunda forma distributiva que não tem equivalente na álgebra convencional:
A + (B · C) = (A + B) · (A + C)
Vale conferir: monte a tabela-verdade das duas formas para as 8 combinações de A, B e C e compare as colunas de resultado.
3.4 Teoremas de De Morgan
Os teoremas de De Morgan estabelecem a relação entre as operações AND e OR sob complementação. São os resultados mais usados de toda a álgebra booleana.
1º Teorema
(A + B)' = A' · B'
"O complemento de uma soma é igual ao produto dos complementos."
| A | B | A+B | (A+B)' | A' | B' | A'·B' |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 |
As colunas destacadas são idênticas em todas as linhas: os teoremas de De Morgan se demonstram por verificação exaustiva da tabela-verdade.
2º Teorema
(A · B)' = A' + B'
"O complemento de um produto é igual à soma dos complementos."
| A | B | A·B | (A·B)' | A' | B' | A'+B' |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 |
Generalização
Os teoremas valem para qualquer número de variáveis:
(A + B + C)' = A' · B' · C'
(A · B · C)' = A' + B' + C'
Regra prática
Para aplicar De Morgan a uma expressão:
- Troque cada
+por·e cada·por+. - Complemente cada variável.
Exemplo 3.1 — Aplicar De Morgan a S = (A·B + C)'.
S = (A·B + C)'
= (A·B)' · C' ← 1º teorema
= (A' + B') · C' ← 2º teorema aplicado ao primeiro termo
Esta é exatamente a saída do circuito do Exemplo 2.1, agora expressa de outra forma. As duas expressões descrevem circuitos fisicamente diferentes, mas com comportamento idêntico — e é essa equivalência que De Morgan permite demonstrar.
Exemplo 3.2 — Por que A + B = (A' NAND B')?
A' NAND B' = (A' · B')' ← definição de NAND
= (A+B)'' ← 1º teorema de De Morgan, na direção inversa
= A + B ← dupla negação
Fica demonstrada a construção da porta OR a partir de NANDs, apresentada na seção 2.7.
3.5 Identidades auxiliares
As identidades a seguir são consequências dos postulados e propriedades. Todas podem ser demonstradas algebricamente ou verificadas por tabela-verdade.
| Identidade | Nome |
|---|---|
A + A·B = A | Absorção |
A · (A + B) = A | Absorção (forma dual) |
A + A'·B = A + B | — |
A · (A' + B) = A·B | — |
A·B + A'·C + B·C = A·B + A'·C | Consenso |
Demonstração da absorção (A + A·B = A):
A + A·B = A·1 + A·B ← postulado A = A·1
= A·(1 + B) ← propriedade distributiva
= A·1 ← postulado 1 + B = 1
= A ← postulado A·1 = A
3.6 Princípio da dualidade
Observando as tabelas acima, nota-se que os postulados e propriedades vêm sempre em pares. O princípio da dualidade formaliza isso: dada uma identidade booleana válida, obtém-se outra identidade válida trocando-se todos os + por ·, todos os · por +, todos os 0 por 1 e todos os 1 por 0.
| Identidade | Dual |
|---|---|
A + 0 = A | A · 1 = A |
A + 1 = 1 | A · 0 = 0 |
A + A' = 1 | A · A' = 0 |
A + A·B = A | A · (A + B) = A |
Na prática, isso reduz pela metade o número de regras a memorizar.
3.7 Resumo da seção 3
- A álgebra booleana opera sobre variáveis de dois valores, com as operações NOT, OR e AND.
- Postulados essenciais:
A+0=A,A+1=1,A+A=A,A+A'=1,A·0=0,A·1=A,A·A=A,A·A'=0. - Propriedades comutativa, associativa e distributiva valem; além disso,
A + B·C = (A+B)·(A+C), que não tem análogo na álgebra convencional. - De Morgan:
(A+B)' = A'·B'e(A·B)' = A'+B'. Regra prática: trocar operadores e complementar variáveis. - O princípio da dualidade organiza todo o conjunto de regras em pares.
CAPUANO, Francisco Gabriel. Sistemas digitais: circuitos combinacionais e sequenciais. Érica, 2014 (Ac.5012157), Capítulo 2, seções 2.3 a 2.6 — Postulados, Propriedades, Teoremas de De Morgan e Identidades auxiliares.
4. Codificadores e Decodificadores
4.1 Por que isso importa
Esta é a seção que mais diretamente antecipa o funcionamento interno de um processador. Quando a CPU busca uma instrução na memória, é um decodificador que interpreta o opcode e ativa os sinais de controle correspondentes. Quando a CPU coloca um endereço no barramento, é um decodificador de endereços que seleciona qual posição da memória será acessada. O "D" de "busca-decodificação-execução", no ciclo de instrução, é literalmente este circuito.
4.2 Circuitos combinacionais
Um circuito é combinacional quando sua saída depende exclusivamente da combinação atual das entradas. Não há memória do que ocorreu antes: as mesmas entradas produzem sempre as mesmas saídas.
Isso os distingue dos circuitos sequenciais, cuja saída depende também do estado anterior — a base dos flip-flops e registradores, que você estudará na unidade sobre memória.
4.3 Codificadores
Um codificador converte a informação presente em até 2ⁿ linhas de entrada (das quais apenas uma está ativa por vez) para um código binário de n bits. O "até" é importante: o codificador decimal/binário a seguir tem 10 entradas e 4 saídas, embora 4 bits permitissem distinguir 16 entradas — as 6 combinações restantes simplesmente não são usadas.
Codificador decimal/binário
Possui 10 entradas (D0 a D9) e 4 saídas (A, B, C, D), gerando o código BCD 8421 correspondente ao dígito acionado. A saída A tem peso 8 e a saída D, peso 1.
Nesta seção, seguindo a convenção de Capuano, as saídas se chamam A, B, C e D, enquanto as entradas se chamam D0 a D9. A saída D (peso 1) não deve ser confundida com o prefixo das entradas: na expressão D = D1 + D3 + ..., o D isolado à esquerda é a saída de peso 1. Note também que aqui A, B e C são saídas, ao contrário da seção 4.4, onde A, B e C são as entradas do decodificador.
| Entrada ativa | A (8) | B (4) | C (2) | D (1) |
|---|---|---|---|---|
| D0 | 0 | 0 | 0 | 0 |
| D1 | 0 | 0 | 0 | 1 |
| D2 | 0 | 0 | 1 | 0 |
| D3 | 0 | 0 | 1 | 1 |
| D4 | 0 | 1 | 0 | 0 |
| D5 | 0 | 1 | 0 | 1 |
| D6 | 0 | 1 | 1 | 0 |
| D7 | 0 | 1 | 1 | 1 |
| D8 | 1 | 0 | 0 | 0 |
| D9 | 1 | 0 | 0 | 1 |
As expressões de saída obtêm-se lendo, para cada coluna, quais entradas produzem 1:
A = D8 + D9
B = D4 + D5 + D6 + D7
C = D2 + D3 + D6 + D7
D = D1 + D3 + D5 + D7 + D9
Ou seja, o codificador é implementado com quatro portas OR. A entrada D0 não aparece em nenhuma expressão, porque o código de 0 é 0000.
Aplicação típica: um teclado numérico, em que a tecla pressionada precisa ser convertida no código binário que o sistema processa.
4.4 Decodificadores
Um decodificador faz a operação inversa: recebe um código binário de n bits e ativa exatamente uma das 2ⁿ saídas.
Decodificador 3 para 8
| A | B | C | Saída ativa |
|---|---|---|---|
| 0 | 0 | 0 | S0 |
| 0 | 0 | 1 | S1 |
| 0 | 1 | 0 | S2 |
| 0 | 1 | 1 | S3 |
| 1 | 0 | 0 | S4 |
| 1 | 0 | 1 | S5 |
| 1 | 1 | 0 | S6 |
| 1 | 1 | 1 | S7 |
Cada saída corresponde a um mintermo — um produto que vale 1 para uma única combinação de entradas:
S0 = A'·B'·C'
S1 = A'·B'·C
S2 = A'·B ·C'
S3 = A'·B ·C
S4 = A ·B'·C'
S5 = A ·B'·C
S6 = A ·B ·C'
S7 = A ·B ·C
O decodificador é, portanto, implementado com oito portas AND de três entradas, cada uma recebendo as variáveis diretas ou complementadas conforme o mintermo.
Note a estrutura: em cada linha da tabela, exatamente uma saída vale 1 e todas as demais valem 0. É essa propriedade que torna o decodificador útil para seleção.
Aplicação: decodificação de endereços
Considere uma memória com 8 posições. O processador coloca um endereço de 3 bits no barramento de endereços; o decodificador 3-para-8 ativa a linha de seleção da posição correspondente, e apenas ela responde. Generalizando: um decodificador de n para 2ⁿ permite endereçar 2ⁿ posições de memória com apenas n linhas de endereço.
Aplicação: decodificação de instruções
Se o opcode de uma instrução ocupa 4 bits, um decodificador 4-para-16 pode ativar uma linha distinta para cada uma das 16 instruções possíveis do conjunto. Cada linha ativada dispara a sequência de sinais de controle daquela instrução. Você reencontrará exatamente essa estrutura ao estudar a arquitetura didática desta disciplina.
4.5 Resumo da seção 4
- Circuitos combinacionais: saída depende apenas das entradas atuais, sem memória.
- Codificador: até 2ⁿ entradas → código binário de n bits. Implementado com portas OR.
- Decodificador: n entradas → 2ⁿ saídas, com exatamente uma ativa. Implementado com portas AND (mintermos).
- Decodificadores são a base da seleção de endereços de memória e da decodificação de opcodes.
CAPUANO, Francisco Gabriel. Sistemas digitais: circuitos combinacionais e sequenciais. Érica, 2014 (Ac.5012157), Capítulo 3, seções 3.2 e 3.3 — Códigos, Codificadores e Decodificadores.
5. Circuitos Aritméticos
5.1 Por que isso importa
Esta seção responde a uma pergunta central de Organização de Computadores: como um circuito faz contas? A ULA (Unidade Lógica e Aritmética), que você estudará na unidade sobre CPU, é construída sobre os circuitos apresentados aqui. Quando uma instrução de soma é executada no simulador da disciplina, é um somador completo, replicado bit a bit, que produz o resultado.
5.2 Meio Somador (Half Adder)
O meio somador realiza a soma de dois bits, produzindo a soma (S) e o "vai-um" ou carry de saída (Cout).
As quatro somas possíveis:
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10
Note o último caso: 1 + 1 = 2, que em binário é 10 — dois bits. Por isso são necessárias duas saídas.
| A | B | S | Cout |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Comparando a coluna S com a tabela da porta XOR, e a coluna Cout com a da porta AND:
S = A ⊕ B
Cout = A · B
O meio somador é, portanto, uma porta XOR e uma porta AND. Este é o resultado que justifica a importância dada à XOR na seção 2.
Limitação: o meio somador não possui entrada de carry. Ele só serve para o bit menos significativo de uma soma, pois não há como propagar o "vai-um" vindo da posição anterior.
5.3 Somador Completo (Full Adder)
O somador completo resolve essa limitação, acrescentando uma terceira entrada: o carry de entrada (Cin), vindo da posição imediatamente anterior.
| A | B | Cin | S | Cout | (soma decimal) |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 | 2 |
| 1 | 0 | 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 | 2 |
| 1 | 1 | 0 | 0 | 1 | 2 |
| 1 | 1 | 1 | 1 | 1 | 3 |
A última coluna mostra a soma aritmética A + B + Cin. Verifique a coerência: o par (Cout, S) é a representação binária de 2 bits desse valor. Por exemplo, na última linha, 1+1+1 = 3 = 11₂, logo Cout = 1 e S = 1.
As expressões:
S = A ⊕ B ⊕ Cin
Cout = A·B + Cin·(A ⊕ B)
Uma forma alternativa e igualmente válida para o carry:
Cout = A·B + A·Cin + B·Cin
As duas formas são equivalentes — confira linha a linha na tabela acima. A segunda tem leitura intuitiva: há vai-um sempre que pelo menos duas das três entradas valem 1 (é uma função de maioria).
Estruturalmente, um somador completo pode ser construído com dois meios somadores e uma porta OR: o primeiro soma A e B; o segundo soma esse resultado parcial com Cin; a OR combina os dois carries parciais.
5.4 Somador em cascata (Ripple-Carry)
Para somar números de vários bits, encadeiam-se somadores completos, ligando o Cout de cada estágio ao Cin do estágio seguinte.
Exemplo 5.1 — Somar 1011₂ (11) e 0110₂ (6) com um somador de 4 bits.
carry: 1 1 1 0
1 0 1 1 (11)
+ 0 1 1 0 ( 6)
─────────────────
1 0 0 0 1 (17)
Acompanhando bit a bit, da direita para a esquerda:
| Posição | A | B | Cin | S | Cout |
|---|---|---|---|---|---|
| 0 (LSB) | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 |
| 2 | 0 | 1 | 1 | 0 | 1 |
| 3 (MSB) | 1 | 0 | 1 | 0 | 1 |
Resultado: 10001₂ = 17 ✔ (o bit mais à esquerda é o Cout final)
O Cin do primeiro estágio é 0, razão pela qual esse estágio poderia usar um meio somador. Na prática, usa-se um somador completo também na primeira posição, o que permite aproveitar o Cin para outras finalidades — como a subtração por complemento de 2 (seção 5.6).
O nome ripple-carry ("propagação ondulante") vem do fato de que cada estágio precisa esperar o carry do anterior. Isso limita a velocidade do circuito e é um tema retomado em Organização de Computadores ao se discutir o desempenho da ULA.
5.5 Meio Subtrator e Subtrator Completo
Meio Subtrator (Half Subtractor)
Calcula A − B, produzindo a diferença (D) e o "empresta-um" ou borrow de saída (Bout).
| A | B | D | Bout |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
A linha destacada é o caso 0 − 1: não sendo possível subtrair, empresta-se da posição seguinte, obtendo 10₂ − 1 = 1 com borrow 1.
D = A ⊕ B
Bout = A' · B
Compare com o meio somador: a expressão da diferença é idêntica à da soma (A ⊕ B). Muda apenas a saída de empréstimo, que é A'·B em vez de A·B.
Subtrator Completo (Full Subtractor)
Acrescenta a entrada de borrow (Bin) da posição anterior.
| A | B | Bin | D | Bout |
|---|---|---|---|---|
| 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 |
D = A ⊕ B ⊕ Bin
Bout = A'·B + A'·Bin + B·Bin
Que pode ser reescrita, por fatoração, como:
Bout = A'·(B + Bin) + B·Bin
As duas formas são equivalentes: a segunda apenas coloca A' em evidência nos dois primeiros termos.
5.6 Subtração por complemento de 2
Do ponto de vista de Organização de Computadores, esta é a informação mais relevante da seção. Processadores reais raramente incluem um circuito subtrator dedicado. Em vez disso, a subtração é realizada pelo próprio somador, usando a representação em complemento de 2.
Para obter o complemento de 2 de um número binário:
- Inverta todos os bits (complemento de 1).
- Some 1 ao resultado.
Exemplo 5.2 — Calcular 1011₂ − 0110₂ (11 − 6) usando um somador de 4 bits.
Complemento de 2 de 0110:
0110 número original (6)
1001 complemento de 1 (bits invertidos)
1001 + 1 = 1010 complemento de 2
Agora soma-se:
1011 (11)
+ 1010 (−6 em complemento de 2)
────────
1 0101
↑
descartado
O resultado é 0101₂ = 5, e de fato 11 − 6 = 5 ✔ O carry final é descartado.
Isso tem uma implicação de projeto que reaparecerá no estudo da ULA: basta acrescentar ao somador um conjunto de inversores controláveis (portas XOR com um sinal de controle) e usar o Cin do primeiro estágio para somar o 1. Com um único sinal de controle, o mesmo circuito realiza soma ou subtração — economia de hardware que explica por que a ULA é organizada dessa maneira.
Vale registrar que, em complemento de 2 com n bits, a faixa representável é de −2ⁿ⁻¹ a 2ⁿ⁻¹ − 1. Para 8 bits: de −128 a +127.
5.7 Resumo da seção 5
- Meio somador:
S = A⊕B,Cout = A·B. Sem entrada de carry. - Somador completo:
S = A⊕B⊕Cin,Cout = A·B + Cin·(A⊕B)=A·B + A·Cin + B·Cin. - Somadores em cascata (ripple-carry) permitem somar palavras de n bits; o carry propaga-se estágio a estágio.
- Meio subtrator:
D = A⊕B,Bout = A'·B. Subtrator completo:D = A⊕B⊕Bin,Bout = A'·B + A'·Bin + B·Bin. - Na prática, processadores implementam subtração como soma do complemento de 2, reaproveitando o somador — princípio construtivo da ULA.
CAPUANO, Francisco Gabriel. Sistemas digitais: circuitos combinacionais e sequenciais. Érica, 2014 (Ac.5012157), Capítulo 3, seção 3.4 — Circuitos Aritméticos. Ver também STALLINGS, William. Arquitetura e organização de computadores. Pearson, 2024 (Ac.132127), para a aritmética da ULA.
Exercícios
Seção 1 — Sistemas de Numeração
Converta 203₁₀ para: (a) binário; (b) hexadecimal; (c) octal.
Converta 101110₂ para decimal.
Converta 2F₁₆ para decimal.
Converta 7A₁₆ para binário, usando agrupamento.
Converta 11011010₂ para decimal e para hexadecimal.
Represente o número 39 em BCD 8421 e em binário puro. Explique a diferença.
Quantas posições de memória podem ser endereçadas com um barramento de endereços de 10 linhas?
Um opcode de 5 bits permite quantas instruções distintas?
Seção 2 — Portas Lógicas
Construa a tabela-verdade de S = (A + B)' · C.
Qual porta produz saída 1 apenas quando as entradas são diferentes?
Escreva a expressão booleana de um circuito em que A e B entram em uma porta XOR, e a saída dessa porta entra em uma AND junto com C.
Mostre como obter uma porta NOT usando apenas uma porta NAND.
Seção 3 — Álgebra Booleana
Aplique De Morgan a (A · B · C)'.
Aplique De Morgan a (A + B')'.
Sem construir a tabela-verdade, justifique por que A + A'·B = A + B.
Qual é o dual da identidade A + A·B = A?
Simplifique A · (A + B) usando os postulados.
Seção 4 — Codificadores e Decodificadores
Quantas saídas tem um decodificador de 4 entradas?
Escreva a expressão do mintermo correspondente à saída S5 de um decodificador 3-para-8.
Explique, em duas ou três frases, como um decodificador é usado na seleção de endereços de memória.
Por que um codificador é construído com portas OR e um decodificador com portas AND?
Seção 5 — Circuitos Aritméticos
Qual a diferença fundamental entre meio somador e somador completo?
Some 1101₂ + 0111₂ mostrando os carries de cada posição.
Calcule o complemento de 2 de 00011001₂ (25 em 8 bits).
Efetue 01000110₂ − 00011001₂ (70 − 25) usando complemento de 2.
Por que os processadores geralmente não possuem um circuito subtrator dedicado?
Referências
Principais (essenciais)
- CAPUANO, Francisco Gabriel. Sistemas digitais: circuitos combinacionais e sequenciais. São Paulo: Érica, 2014. Recurso online — Acervo Virtual. Número de chamada: Ac.5012157
- Capítulo 1 — Funções e Portas Lógicas (seção 2 deste material)
- Capítulo 2, itens 2.3 a 2.6 — Álgebra de Boole (seção 3)
- Capítulo 3, itens 3.2 a 3.4 — Circuitos Combinacionais e Aritméticos (seções 4 e 5)
Aprofundamento (opcionais)
-
TOCCI, Ronald J.; WIDMER, Neal S.; MOSS, Gregory L. Sistemas digitais: princípios e aplicações. São Paulo: Pearson Prentice Hall, 2018. Número de chamada: Ac.131146 (Bibliografia básica de Fundamentos de Circuitos Digitais e complementar de Organização de Computadores; boa cobertura de sistemas de numeração e codificação.)
-
DELGADO, José. Arquitetura de computadores. Rio de Janeiro: LTC, 2017. Recurso online — Acervo Virtual. Número de chamada: Ac.5013563 (Bibliografia básica de Organização de Computadores; faz a ponte entre circuitos digitais e organização.)
-
SILVA, Gabriel Pereira da. Arquitetura e organização de computadores: uma introdução. Rio de Janeiro: LTC, 2024. Recurso online — Acervo Virtual. Número de chamada: Ac.5063593
-
STALLINGS, William. Arquitetura e organização de computadores. São Paulo: Pearson Education, 2024. Número de chamada: Ac.132127 (Recomendado para aprofundar a aritmética da ULA e a representação em complemento de 2.)
-
BIGNELL, James. Eletrônica digital. São Paulo: Cengage Learning, 2018. Recurso online — Acervo Virtual. Número de chamada: Ac.5038600