Pular para o conteúdo principal

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.

Já tem alguma base em circuitos digitais?

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 materialOnde será usado em Organização de Computadores
1. Sistemas de numeração e códigosCodificação de instruções, endereçamento de memória, representação de dados
2. Portas lógicasConstrução interna da ULA e da unidade de controle
3. Álgebra booleanaFormalização do comportamento dos circuitos da CPU
4. Codificadores e decodificadoresDecodificação de instruções (opcode) e seleção de endereços de memória
5. Circuitos aritméticosUnidade 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.

Nota sobre notação

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⁰
SistemaBaseDígitos válidos
Decimal100–9
Binário20, 1
Octal80–7
Hexadecimal160–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.

Bit10011100
Peso1286432168421
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ãoQuocienteResto
45 ÷ 2221
22 ÷ 2110
11 ÷ 251
5 ÷ 221
2 ÷ 210
1 ÷ 201

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.

Agrupamento de 110101110 em binário em blocos de 4 bits, a partir da direita, resultando em 1AE em hexadecimal

1.6 Tabela de referência

DecimalBinárioOctalHexadecimal
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F

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.

BitsCombinaçõesFaixa (sem sinal)
4160 a 15
82560 a 255
124.0960 a 4.095
1665.5360 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.

CaractereDecimalBinárioHexadecimal
espaço32010000020
'0'48011000030
'9'57011100139
'A'65100000141
'Z'9010110105A
'a'97110000161
'z'12211110107A

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' é 1000001 e '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.
Referência da seção

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

ABS
000
010
100
111

Porta OR (OU)

A saída é 1 quando pelo menos uma entrada é 1. Expressão: S = A + B

ABS
000
011
101
111

Porta NOT (NÃO / inversor)

Inverte o valor da entrada. É a única porta básica com uma só entrada. Expressão: S = A'

AS
01
10

2.4 Portas derivadas

Porta NAND (NÃO E)

Equivale a uma AND seguida de um inversor. Expressão: S = (A · B)'

ABS
001
011
101
110

Porta NOR (NÃO OU)

Equivale a uma OR seguida de um inversor. Expressão: S = (A + B)'

ABS
001
010
100
110

Porta XOR (OU-Exclusivo)

A saída é 1 quando as entradas são diferentes. Expressão: S = A ⊕ B = A'·B + A·B'

ABS
000
011
101
110

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'

ABS
001
010
100
111

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.

Simbologia ANSI e expressão booleana das sete portas lógicas: AND, OR, NOT, NAND, NOR, XOR e XNOR

2.5 Tabela comparativa

ABANDORNANDNORXORXNOR
00001101
01011010
10011010
11110001

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.

Circuito do Exemplo 2.1: A e B entram em uma porta AND, a saída entra em uma OR junto com C, e o resultado passa por um inversor, produzindo S

Passo a passo:

  1. Saída da AND: A·B
  2. Saída da OR: A·B + C
  3. 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çãoConstrução com NAND
NOTA' = (A NAND A)
ANDA·B = (A NAND B) NAND (A NAND B)
ORA+B = (A NAND A) NAND (B NAND B)

Construção de NOT, AND e OR usando apenas portas NAND

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.
Referência da seção

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

Escopo desta seção

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 = A e A · 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 = A e A + 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."

ABA+B(A+B)'A'B'A'·B'
0001111
0110100
1010010
1110000

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.

Dois circuitos equivalentes pelo 1º Teorema de De Morgan: (A+B)' à esquerda, A'·B' à direita

2º Teorema

(A · B)' = A' + B'

"O complemento de um produto é igual à soma dos complementos."

ABA·B(A·B)'A'B'A'+B'
0001111
0101101
1001011
1110000

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:

  1. Troque cada + por · e cada · por +.
  2. 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.

IdentidadeNome
A + A·B = AAbsorção
A · (A + B) = AAbsorção (forma dual)
A + A'·B = A + B
A · (A' + B) = A·B
A·B + A'·C + B·C = A·B + A'·CConsenso

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.

IdentidadeDual
A + 0 = AA · 1 = A
A + 1 = 1A · 0 = 0
A + A' = 1A · A' = 0
A + A·B = AA · (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.
Referência da seção

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.

Cuidado com a notação

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 ativaA (8)B (4)C (2)D (1)
D00000
D10001
D20010
D30011
D40100
D50101
D60110
D70111
D81000
D91001

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.

Codificador decimal/binário: dez entradas D0 a D9 conectadas a quatro portas OR que produzem o código BCD 8421

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

ABCSaída ativa
000S0
001S1
010S2
011S3
100S4
101S5
110S6
111S7

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.

Decodificador 3 para 8: cada uma das oito portas AND de três entradas recebe as variáveis A, B, C diretas ou complementadas, ativando exatamente um 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.

A CPU coloca um endereço de 3 bits no barramento; o decodificador 3-para-8 ativa a linha de seleção de uma única posição de memória entre as 8 disponíveis

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.
Referência da seção

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.

ABSCout
0000
0110
1010
1101

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.

Meio somador: A e B alimentam uma porta XOR (produzindo S) e uma porta AND (produzindo Cout)

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.

ABCinSCout(soma decimal)
000000
001101
010101
011012
100101
101012
110012
111113

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.

Somador completo construído a partir de duas portas XOR, duas AND e uma OR, mostrando o caminho de A, B e Cin até S e Cout

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çãoABCinSCout
0 (LSB)10010
111001
201101
3 (MSB)10101

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

Quatro somadores completos encadeados formando um somador de 4 bits: o Cout de cada estágio alimenta o Cin do estágio seguinte

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

ABDBout
0000
0111
1010
1100

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.

ABBinDBout
00000
00111
01011
01101
10010
10100
11000
11111
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:

  1. Inverta todos os bits (complemento de 1).
  2. 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.

Somador de 4 bits com um sinal de controle M: cada Bi passa por uma porta XOR controlada por M antes de entrar no somador completo, permitindo soma (M=0) ou subtração por complemento de 2 (M=1)

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.
Referência da seção

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

Q1

Converta 203₁₀ para: (a) binário; (b) hexadecimal; (c) octal.

Q2

Converta 101110₂ para decimal.

Q3

Converta 2F₁₆ para decimal.

Q4

Converta 7A₁₆ para binário, usando agrupamento.

Q5

Converta 11011010₂ para decimal e para hexadecimal.

Q6Conceitual

Represente o número 39 em BCD 8421 e em binário puro. Explique a diferença.

Q7

Quantas posições de memória podem ser endereçadas com um barramento de endereços de 10 linhas?

Q8

Um opcode de 5 bits permite quantas instruções distintas?

Seção 2 — Portas Lógicas

Q9

Construa a tabela-verdade de S = (A + B)' · C.

Q10

Qual porta produz saída 1 apenas quando as entradas são diferentes?

Q11

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.

Q12

Mostre como obter uma porta NOT usando apenas uma porta NAND.

Seção 3 — Álgebra Booleana

Q13

Aplique De Morgan a (A · B · C)'.

Q14

Aplique De Morgan a (A + B')'.

Q15

Sem construir a tabela-verdade, justifique por que A + A'·B = A + B.

Q16

Qual é o dual da identidade A + A·B = A?

Q17

Simplifique A · (A + B) usando os postulados.

Seção 4 — Codificadores e Decodificadores

Q18

Quantas saídas tem um decodificador de 4 entradas?

Q19

Escreva a expressão do mintermo correspondente à saída S5 de um decodificador 3-para-8.

Q20

Explique, em duas ou três frases, como um decodificador é usado na seleção de endereços de memória.

Q21

Por que um codificador é construído com portas OR e um decodificador com portas AND?

Seção 5 — Circuitos Aritméticos

Q22

Qual a diferença fundamental entre meio somador e somador completo?

Q23

Some 1101₂ + 0111₂ mostrando os carries de cada posição.

Q24

Calcule o complemento de 2 de 00011001₂ (25 em 8 bits).

Q25

Efetue 01000110₂ − 00011001₂ (70 − 25) usando complemento de 2.

Q26Difícil

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