Projete um ALU com duas entradas de 8 bits e , e as entradas de controle e . A ALU deve suportar as operações descritas na Tabela 1. Use um somador de 8 bits e combinações lógicas adicionais.
Operação
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
NAND (NAND bit a bit)
1
0
1
XOR (XOR bit a bit)
1
1
0
Inverter (Inversão da ordem dos bits)
1
1
1
NOT (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 e , e três entradas de controle, que são , e . 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 , e . A tabela mostra 8 operações diferentes:
quando , ,
quando , ,
quando , ,
quando , ,
NAND quando , ,
XOR quando , ,
$S = $ Inversão de quando , ,
$S = $ NOT quando , ,
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 é o mesmo que somar o complemento de mais 1. Então, vamos usar o somador de 8 bits para tanto quanto .
Para : Basta ligar e nas entradas do somador e colocar o carry-in como 0.
Para : Inverter todos os bits de (isso é o complemento de ) 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 : Isso é igual a deslocar todos os bits de 3 posições para a esquerda. Podemos implementar isso conectando os bits de às posições correspondentes, deixando os 3 bits menos significativos como 0.
Para : Isso é igual a deslocar todos os bits de 3 posições para a direita. Os 3 bits mais significativos serão descartados ou preenchidos conforme a lógica desejada (normalmente com 0s).
Passo 5
Vamos implementar as operações lógicas bit a bit: NAND, XOR, inversão e NOT.
Para NAND : Use uma porta NAND para cada par de bits correspondentes de e .
Para XOR : Use uma porta XOR para cada par de bits correspondentes de e .
Para $S = $ Inversão de : Inverta a ordem dos bits de . Isso significa que o bit mais à esquerda vira o mais à direita e vice-versa.
Para $S = $ NOT : Inverta cada bit de individualmente usando portas NOT.
Passo 6
Agora, vamos criar a lógica de controle que decide qual operação realizar com base nos sinais , e . Para isso, usamos decodificadores que identificam a combinação específica de , e e ativam a operação correspondente.
Por exemplo:
Quando , , , ativa o subtrator para .
Quando , , , ativa o somador para .
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 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 , , .
Por exemplo:
Se está ativa, o multiplexador direciona esse resultado para .
Se XOR está ativa, o multiplexador direciona esse resultado para .
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 , e , 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.