Faça o projeto (Tabela da Verdade e Diagrama Esquemático) de uma ALU de um bit com três entradas de seleção de operação S2, S1, S0, que implementa as seguintes oito funções com as duas entradas de dados A e B (além do Vem_Um) (Contemporary Logic Design - Katz e Borriello):
|l|l|l|l| hline $S2$ & $SI$ & $S0$ & Operação da ALU hline 0 & 0 & 0 & $Fi=0$ hline 0 & 0 & 1 & $Fi=B$ menos $A$ hline 0 & 1 & 0 & $Fi=A$ menos $B$ hline 0 & 1 & 1 & $Fi=A$ mais $B$ hline 1 & 0 & 0 & $Fi=A$ XOR $B$ hline 1 & 0 & 1 & $Fi=A$ OR B hline 1 & 1 & 0 & $Fi=A$ AND $B$ hline 1 & 1 & 1 & $Fi=1$ hline |l|l|l|l|l|l|l|l| hline $S2$ & $Sl$ & $S0$ & VemUm & $A$ & $B$ & $Fi$ & VaiUm hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline & & & & & & & hline Operação da ALU
0 0 0
0 0 1 menos
0 1 0 menos
0 1 1 mais
1 0 0 XOR
1 0 1 OR B
1 1 0 AND
1 1 1
Vem_Um Vai_Um

Passo 1

Vamos projetar uma ALU de 1 bit cujas entradas são S₂,S₁,S₀ (código de operação), A, B e Vem_Um (Cin), e cujas saídas são Fᵢ e Vai_Um (Cout). O conteúdo é Álgebra Booleana e lógica combinacional, usando um somador completo para as operações aritméticas e portas lógicas para as operações booleanas.

Passo 2

Para realizar adição e subtração com um único somador completo, usamos o truque da representação em complemento a dois. Qualquer operação aritmética pode ser escrita como X + Y + Cin, onde X e Y são A ou suas negações, dependendo de S₁,S₀, e Cin = Vem_Um. O somador completo calcula
Fi = X oplus Y oplus Cin,
VaiUm = X Y + X,Cin + Y,Cin

Passo 3

Definimos os sinais intermediários para as quatro operações aritméticas (quando S₂=0):
– Se (S₁,S₀)=(0,1) (código 0 0 1 → B−A): X = ¬A, Y = B, Cin = Vem_Um.
– Se (S₁,S₀)=(1,0) (código 0 1 0 → A−B): X = ¬B, Y = A, Cin = Vem_Um.
– Se (S₁,S₀)=(1,1) (código 0 1 1 → A+B): X = B, Y = A, Cin = Vem_Um.
– Se (S₁,S₀)=(0,0) (código 0 0 0 → 0): basta forçar Fᵢ=0 e Vai_Um=0.

Passo 4

Para as quatro operações lógicas (quando S₂=1) calculamos em paralelo:
– A XOR B → F₆
– A OR B → F₅
– A AND B → F₄
– constante 1 → F₇
e define-se Vai_Um=0.

Passo 5

Usamos então dois multiplexadores 8:1 controlados por (S₂,S₁,S₀). Um MUX8 seleciona Fᵢ entre {0, B−A, A−B, A+B, A⊕B, A∨B, A∧B, 1} e outro MUX8 seleciona Vai_Um entre {0, Cout_{B−A}, Cout_{A−B}, Cout_{A+B}, 0,0,0,0}.

Passo 6

A tabela de seleção condensada fica:
S₂ S₁ S₀ | Fᵢ | Vai_Um
0 0 0 | 0 | 0
0 0 1 | B − A = (¬A+B+Cin) | Cout_{B−A}
0 1 0 | A − B = (¬B+A+Cin) | Cout_{A−B}
0 1 1 | A + B + Cin | Cout_{A+B}
1 0 0 | A ⊕ B | 0
1 0 1 | A ∨ B | 0
1 1 0 | A ∧ B | 0
1 1 1 | 1 | 0

Passo 7

O diagrama esquemático geral é este:
  1. Entradas A e B passam por inversores controlados por S₁,S₀ para gerar X e Y conforme o caso.
  2. Um somador completo recebe X, Y e Cin=Vem_Um e produz S_arith e Cout_arith.
  3. Em paralelo, portas XOR, OR e AND geram S_xor, S_or, S_and, além de um sinal constante 1.
  4. Dois MUX 8:1 (um para Fᵢ, outro para Vai_Um) recebem os oito sinais aritméticos e lógicos e são controlados por (S₂,S₁,S₀).

Passo 8

Pronto! Tabela da verdade e diagrama esquemático estão definidos de forma modular e reutilizável.

Resposta

Tabela de Seleção (resumida):

S₂ S₁ S₀ | Fᵢ | Vai_Um

0 0 0 | 0 | 0
0 0 1 | B−A = ¬A + B + Cin | Cout_{B−A}
0 1 0 | A−B = A + ¬B + Cin | Cout_{A−B}
0 1 1 | A + B + Cin | Cout_{A+B}
1 0 0 | A ⊕ B | 0
1 0 1 | A ∨ B | 0
1 1 0 | A ∧ B | 0
1 1 1 | 1 | 0
Diagrama Esquemático Modular:
            +----------------------+
    A ------|                      |
    B ---+  |  Unidade Arit/Lógica |-- S_arith --+
        |  |                      |             |        +-------+
        +--|                      |             +--+-->| MUX8  |-- Fᵢ
Cin=Vem_Um --+ ±---------------------+ | ±------+
|
±---------+ ±------+ ±------+ | ±--------+
A --+ | Porta XOR| | OR | | AND | | | MUX8 |-- Vai_Um
|------>| (A⊕B) | |(A∨B) | |(A∧B) |—±->| seleção | lógica
B --+ ±---------+ ±------+ ±------+ | ±--------+
|
±--------------------------+ |
A --o----| Inversor (seletivo S₁) | |
| ±------------------------+| |
B --o–|-| Inversor (seletivo S₀) |-+ |
| ±------------------------+ |
Cin=Vem_Um ---------------------------------------------+
Onde:
– Os inversores aplicam complemento a dois para o somador, conforme explicado.
– O somador completo produz S_arith = X⊕Y⊕Cin e Cout_arith = XY + X Cin + Y Cin.
– Os dois MUX 8:1, controlados por (S₂,S₁,S₀), escolhem entre as oito funções para Fᵢ e entre {0, Cout_{B−A}, Cout_{A−B}, Cout_{A+B}, 0,0,0,0} para Vai_Um.

Exercícios relacionados