Considerando a função abaixo, pede-se:
f=\sum(0,2,3,7,9,11,13,14)+d(12,15)
Implemente usando dois decodificadores 3 \times 8 mais lógica adicional.

Passo 1

O enunciado pede que se implemente a função booleana dada por
f=\sum(0,2,3,7,9,11,13,14)+d(12,15),
usando dois decodificadores 3\times8 mais lógica adicional.
Informações chave que temos:
  • A função é de quatro variáveis (porque há minterms de 0 a 15). Vou nomear as variáveis como A,B,C,D com A sendo o bit mais significativo (MSB) e D o menos significativo (LSB).
  • Os minterms com saída 1 são \;0,2,3,7,9,11,13,14.
  • Os minterms como “don’t care” são \;12,15.
  • Deve-se usar exatamente dois decodificadores 3\times8 (cada um tem 3 entradas e 8 saídas) e lógica complementar extra (AND/OR/NOT) quando necessário.

Passo 2

Entendendo o que faz um decodificador 3\times8 e como usá‑lo aqui (aula rápida mas completa).
  • Um decodificador 3\times8 tem 3 entradas (vou usar B,C,D como entradas dos decodificadores) e 8 saídas o_0,\dots,o_7. Quando habilitado (enable = 1), exatamente uma saída o_i fica igual a 1, onde i é o número binário formado por (B,C,D); as outras saídas ficam 0.
  • Se o enable = 0, todas as saídas ficam 0.
  • Logo, se eu usar dois decodificadores com as mesmas entradas B,C,D, e usar A (ou sua negação) como sinal de enable, obtenho as duas metades da tabela de verdade da função de 4 variáveis:
    • Decodificador D_0: habilitado por \bar A — gera os minterms m_0 a m_7 quando A=0.
    • Decodificador D_1: habilitado por A — gera os minterms m_8 a m_{15} quando A=1.
  • Cada saída do decodificador corresponde a um produto literal (um minterm). Por exemplo, a saída o_0 do decodificador habilitado por \bar A corresponde ao produto \bar A\bar B\bar C\bar D (isto é, minterm 0).

Passo 3

Mapeamento dos minterms para as saídas dos dois decodificadores (vou nomear as saídas do decodificador com \overline{A} habilitado como y_0,\dots,y_7 e as do com A habilitado como z_0,\dots,z_7). Lembrete: índice i em y_i ou z_i corresponde ao valor decimal de (B,C,D).
  • Quando A=0 (decodificador y):
    • m_0 \rightarrow y_0
    • m_2 \rightarrow y_2
    • m_3 \rightarrow y_3
    • m_7 \rightarrow y_7
      (porque os minterms 0,2,3,7 têm A=0.)
  • Quando A=1 (decodificador z):
    • m_9 \rightarrow z_1 (pois 9=8+1, e (B,C,D)=001 é índice 1)
    • m_{11} \rightarrow z_3
    • m_{13} \rightarrow z_5
    • m_{14} \rightarrow z_6
    • os don’t-cares 12\rightarrow z_4 e 15\rightarrow z_7 estão disponíveis se quisermos usá‑los para simplificar.

Passo 4

Expressão direta usando as saídas dos decodificadores (solução direta e clara).
  • Cada saída y_i ou z_j já representa um produto literal com o enable aplicado. Assim a implementação direta é fazer a OR (somador lógico) das saídas correspondentes:
f = y_0 + y_2 + y_3 + y_7 + z_1 + z_3 + z_5 + z_6.
  • Em palavras de circuito:
    • Ligar entradas B,C,D aos três inputs de ambos os decodificadores.
    • Ligar o enable do primeiro decodificador em \bar A (usa-se um inversor em A para obter \bar A).
    • Ligar o enable do segundo decodificador diretamente em A.
    • Fazer uma porta OR que receba as oito saídas listadas acima; a saída dessa OR é f.
  • Essa é a implementação mais direta usando exatamente dois decodificadores 3\times8 mais uma porta OR (ou uma árvore de ORs) e um inversor para \bar A.

Passo 5

(Opcional, para otimizar) Simplificação da função usando mapa de Karnaugh e os don’t‑cares — para diminuir o número de entradas da OR ou usar portas lógicas simples em vez de muitas entradas OR.
  • Montei o mapa e usei d(12,15) para agrupar maior número de 1’s. Uma escolha de cobertura ótima dá (passo a passo da simplificação algébrica):
    1. Agrupando coluna C D = 11 (usando o don’t‑care 15) obtemos o termo \;C D, que cobre m_3,m_7,m_{11} (e usa m_{15} como X).
    2. Agrupando (m_0,m_2) obtém-se \;\bar A\bar B\bar D (elimina C).
    3. Agrupando (m_9,m_{13}) obtém-se \;A\bar C D (pois C=0,D=1,A=1).
    4. Usando m_{14} junto com m_{15} (don’t care) obtém‑se \;A B C.
  • Com isso uma forma simplificada é
f = C D + \bar A\bar B\bar D + A\bar C D + A B C.
  • Dá para reduzir um pouco mais o termo envolvendo CD e A\bar C D: note que
C D + A\bar C D = D(C + A\bar C) = D(C + A),
logo uma forma ainda mais compacta é
f = D(A + C) + \bar A\bar B\bar D + A B C.
  • Essa expressão é útil porque usa poucas portas AND/OR/NOT (por exemplo: um AND simples para D(A+C), outro AND para \bar A\bar B\bar D, outro para ABC, e uma OR final). Se for permitido usar portas lógicas além dos decodificadores, essa forma reduz hardware em relação a OR de 8 sinais.

Passo 6

Como escolher entre as duas implementações (prática para a prova):
  • Se a instrução pedir literalmente “usar dois decodificadores 3\times8 mais lógica adicional” sem otimização específica, a implementação direta do Passo 4 (OR das oito saídas selecionadas, enables \bar A e A) é a mais simples, rápida e aceita em prova.
  • Se na prova for valorizada economia de portas, apresente também a expressão simplificada do Passo 5 e diga que se pode implementar com dois decodificadores (para gerar minterms que se queira) e mais algumas portas AND/OR/NOT conforme a expressão simplificada. Por exemplo, pode-se não usar os decodificadores para todos os termos: calcular diretamente D(A+C) com um OR e um AND, e gerar \bar A\bar B\bar D com uma pequena rede de ANDs/NOTs, etc.

Resposta

Implementação direta com dois decodificadores 3\times8: ligar B,C,D às entradas dos dois decodificadores; habilitar o primeiro por \bar A e o segundo por A; fazer a OR das saídas
f = y_0 + y_2 + y_3 + y_7 + z_1 + z_3 + z_5 + z_6.
Forma simplificada (menos portas adicionais):
f = C D + \bar A\bar B\bar D + A\bar C D + A B C
ou, simplificando um pouco,
f = D(A + C) + \bar A\bar B\bar D + A B C.

Exercícios relacionados