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:
  1. quando , ,
  2. quando , ,
  3. quando , ,
  4. quando , ,
  5. NAND quando , ,
  6. XOR quando , ,
  7. $S = $ Inversão de quando , ,
  8. $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.

Exercícios relacionados

Projete um contador crescente/decrescente com quatro entradas de controle: countup que habilita a contagem crescente, countdown que habilita a contagem decrescente, um clear síncrono e um set síncrono. Se duas ou mais entradas de controle são 1 s então o contador mantém seu valor corrente de contagem. Use um registrador de carga paralela.
Converta os seguintes números decimais forma binária de complemento de dois com 8 bits.
a) 6
b) 26
c) -8
d) -30
e) -60
f) -90
Projete um circuito que apresente a saída 1 a cada 99 ciclos de clock:
a) Usando um contador crescente com clear síncrono como entrada e circuitos combinacionais extras.
b) Usando um contador decrescente com carga paralela, e circuitos combinacionais extras.
c) Qual o tradeoff entre os dois projetos (itens e )?
Referência: Vahid, Frank. Digital Design with RTL Design, Verilog and VHDL. John Wiley & Sons, 2010.
Determine o valor da capacitância em paralelo necessária para corrigir uma carga de 140 kVAR com FP de 0,85 (atrasado) para um FP unitário. Suponha que a carga seja alimentada por uma linha de 110 V (RMS), 60 Hz .
Resposta: .