Projete um ALU com duas entradas de 8 bits A e B, e as entradas de controle x, y e z. A ALU deve suportar as operações descritas na Tabela 1. Use um somador de 8 bits e combinações lógicas adicionais.
x y z Operação
0 0 0 S=A-B
0 0 1 S=A+B
0 1 0 S=A * 8
0 1 1 S=A / 8
1 0 0 S=A NAND B (NAND bit a bit)
1 0 1 S=A XOR B (XOR bit a bit)
1 1 0 S= Inverter A (Inversão da ordem dos bits)
1 1 1 S= NOT A (complemento bit a bit)
Table 1: Operações desejadas na ALU.

Passo 1

Beleza, vamos lá! O exercício pede para gente projetar uma Unidade Lógica e Aritmética (ALU) que tem duas entradas de 8 bits, chamadas A e B, e três entradas de controle, que são x, y e z. A ALU precisa realizar diferentes operações dependendo dos valores desses sinais de controle, conforme a tabela fornecida. Para isso, vamos precisar usar um somador de 8 bits e algumas combinações lógicas adicionais. Vamos descobrir como montar tudo isso passo a passo!

Passo 2

Primeiro, vamos entender quais operações a nossa ALU precisa fazer de acordo com os valores de x, y e z. A tabela mostra 8 operações diferentes:
  1. S = A - B quando x=0, y=0, z=0
  2. S = A + B quando x=0, y=0, z=1
  3. S = A * 8 quando x=0, y=1, z=0
  4. S = A / 8 quando x=0, y=1, z=1
  5. S = A NAND B quando x=1, y=0, z=0
  6. S = A XOR B quando x=1, y=0, z=1
  7. $S = $ Inversão de S = quando A, x=1, y=1
  8. $S = $ NOT z=0 quando S = , A, x=1
Vamos precisar implementar cada uma dessas operações usando o somador de 8 bits e portas lógicas.

Passo 3

Vamos começar configurando o somador para realizar as operações de adição e subtração. Para isso, precisamos lembrar que subtrair B é o mesmo que somar o complemento de B mais 1. Então, vamos usar o somador de 8 bits para tanto A+B quanto A-B.
  • Para S = A + B: Basta ligar A e B nas entradas do somador e colocar o carry-in como 0.
  • Para S = A - B: Inverter todos os bits de B (isso é o complemento de B) e ligar o carry-in como 1 para completar a operação de subtração.

Passo 4

Agora, vamos ver as operações de multiplicação e divisão por 8. Essas operações podem ser realizadas facilmente usando deslocamentos de bits:
  • Para S = A * 8: Isso é igual a deslocar todos os bits de A 3 posições para a esquerda. Podemos implementar isso conectando os bits de A às posições correspondentes, deixando os 3 bits menos significativos como 0.
    A * 8 = A ll 3
  • Para S = A / 8: Isso é igual a deslocar todos os bits de A 3 posições para a direita. Os 3 bits mais significativos serão descartados ou preenchidos conforme a lógica desejada (normalmente com 0s).
    A / 8 = A gg 3

Passo 5

Vamos implementar as operações lógicas bit a bit: NAND, XOR, inversão e NOT.
  • Para S = A NAND B: Use uma porta NAND para cada par de bits correspondentes de A e B.
    Si = Ai cdot Bi
  • Para S = A XOR B: Use uma porta XOR para cada par de bits correspondentes de A e B.
    Si = Ai oplus Bi
  • Para $S = $ Inversão de S = : Inverta a ordem dos bits de A. Isso significa que o bit mais à esquerda vira o mais à direita e vice-versa.
    A
  • Para $S = $ NOT S = Reverse(A) : Inverta cada bit de S = individualmente usando portas NOT.
    A

Passo 6

Agora, vamos criar a lógica de controle que decide qual operação realizar com base nos sinais x, y e z. Para isso, usamos decodificadores que identificam a combinação específica de x, y e z e ativam a operação correspondente.
Por exemplo:
  • Quando x=0, y=0, z=0, ativa o subtrator para A - B.
  • Quando x=0, y=0, z=1, ativa o somador para A + B.
  • E assim por diante para as outras combinações.
Essas ativações podem ser feitas usando portas lógicas como AND e OR para combinar os sinais de controle e direcionar o fluxo de dados para a operação correta.

Passo 7

Finalmente, vamos usar um multiplexador de 8 bits para selecionar qual resultado será passado para a saída S com base na operação escolhida. O multiplexador vai receber todas as possíveis saídas das operações que implementamos e vai selecionar a que está ativa conforme os sinais de controle x, y, z.
Por exemplo:
  • Se S = A + B está ativa, o multiplexador direciona esse resultado para S.
  • Se S = A XOR B está ativa, o multiplexador direciona esse resultado para S.
  • E assim por diante para todas as operações.

Resposta

Pronto! Com esses passos, conseguimos projetar uma ALU de 8 bits que, dependendo dos sinais de controle x, y e z, realiza operações de soma, subtração, multiplicação e divisão por 8, além de operações lógicas como NAND, XOR, inversão e NOT. Usamos um somador de 8 bits para as operações aritméticas e portas lógicas combinadas com um multiplexador para selecionar a operação correta com base nos sinais de controle.

Exercícios relacionados