¿Cómo puedo convertir múltiples mapas de Karnaugh en un circuito de puerta lógica?

0

Estoy diseñando un circuito convertidor de BCD 8421 a 84-2-1 BCD. La tabla de verdad es:

Decimal | ABCD | WXYZ
   0    | 0000 | 0000
   1    | 0001 | 0111
   2    | 0010 | 0100
        .      .
        .      .
        .      .
   9    | 1001 | 1111

Todo después del decimal 9 es un no importa. Comencé creando mapas de Karnaugh para cada W, X, Y, Z . De los mapas de Karnaugh, encontré las siguientes ecuaciones:

W = (A)(~B)(~C) + (~A)(B)(C+D)
X = (~A)(~C)(~D) + (~A)(~B) + (~B)(D)
Y = (~C)(D)([~A]+[~B]) + (~A)(C)(~D)
Z = (D)([~A]+[~B][~C])

Donde la multiplicación significa AND, la suma significa OR y ~ significa NO. No estoy seguro de cómo dibujar un circuito con las puertas lógicas adecuadas desde aquí. ¿Creo un circuito para cada letra y luego Y todas las salidas juntas? ¿Combino todas las expresiones (como en W + X + Y + Z o WXYZ) y simplifico las expresiones desde allí, luego creo un circuito utilizando la nueva expresión simplificada? No estoy realmente interesado en cómo se verá este circuito en particular, estoy tratando de encontrar el concepto más general de pasar de las tablas de verdad a los esquemas de circuitos.

    
pregunta kanderson8

2 respuestas

2
  

Combino todas las expresiones (como en W + X + Y + Z o WXYZ)

No. Lo que muestran las ecuaciones es cómo obtener salidas para cuatro pines separados. Si quisieras combinar los cuatro pines, deberías haberlo hecho antes cuando creaste el mapa de Karnaugh (el mapa de Karnaugh solo tendría una salida en lugar de cuatro).

Primer paso, trata los cuatro como cuatro circuitos separados:

A ─┬───────────────┐
   │               │
B ──┬─[NOT]────────[AND]┐
   ││              │    │
C ────[NOT]──┬─────┘    [OR]── W
   ││        └[OR]─┐    │
D ────────────┘    │    │
   │└──────────────[AND]┘
   └──[NOT]────────┘

 .... implementation of other circuits left as homework

A ──[NOT]────────┐
                 │
B ──[NOT]──┐     [OR]─┐
           [AND]─┘    │
C ──[NOT]──┘          [AND]── Z
                      │
D ────────────────────┘

Segundo paso, une A a A , B a B etc. Esto es obvio porque obviamente A es lo mismo que A etc.

A ─┬────┬───────────────┐
   │    │               │
B ──┬────┬─[NOT]────────[AND]┐
   ││   ││              │    │
C ───┬─────[NOT]──┬─────┘    [OR]── W
   │││  ││        └[OR]─┐    │
D ────┬────────────┘    │    │
   ││││ │└──────────────[AND]┘
   ││││ └──[NOT]────────┘
   ││││
   └───────[NOT]────────┐
    │││                 │
    └──────[NOT]──┐     [OR]─┐
     ││           [AND]─┘    │
     └─────[NOT]──┘          [AND]─ Z
      │                      │
      └──────────────────────┘

 .... implementation of other circuits left as homework

El circuito debería estar funcionando en este punto, pero si presta atención, es posible que observe que algunas partes de los circuitos W y Z comparten la misma lógica. Por ejemplo, estamos usando NOT en B y C dos veces. El siguiente paso (opcional) es refactorizar el circuito y eliminar subcircuitos y componentes redundantes / repetidos:

A ───┬──────────────────┐
     │                  │
B ────┬─[NOT]──┬────────[AND]┐
     ││        │        │    │
C ──────[NOT]───┬──┬────┘    [OR]── W
     ││        ││  │         │
     ││        ││  [OR]─┐    │
D ─┬───────────────┘    │    │
   │ ││        ││       │    │
   │ │└─────────────────[AND]┘
   │ │         ││       │
   │ └──[NOT]─┬─────────┘
   │          │││
   │          └─────────┐
   │           │└─┐     [OR]─┐
   │           │  [AND]─┘    │
   │           └──┘          [AND]─ Z
   └─────────────────────────┘

 .... implementation of other circuits left as homework
    
respondido por el slebetman
0

Otras respuestas describen la forma académica de resolver tales problemas. Esto es excelente para aprender lo básico.

Pero en el mundo real, o en su próximo proyecto, puede tener cientos de entradas / salidas a la vez. En este caso, puede utilizar el software para la minimización / síntesis.

Como ya tiene la tabla de la verdad, puede instalar fácilmente los complementos para "espresso" y "abc", que son programas gratuitos desarrollados por University of Mass / Berkeley.

documentación de espresso

El espresso es un minimizador de lógica. ABC es un motor de síntesis.

Si proporciona expreso la tabla de verdad combinada, utilizando su propio formato:

         # 2-bit by 2-bit binary adder (with no carry input)
         .i 4
         .o 3
         0000  000
         0001  001
         0010  010
         0011  011
         0100  001
         0101  010
         0110  011
         0111  100
         1000  010
         1001  011
         1010  100
         1011  101
         1100  011
         1101  100
         1110  101
         1111  110

Puede proporcionar las ecuaciones minimizadas. Utiliza un algoritmo heurístico de dos pasos, que en realidad se incluye en muchas herramientas estándar de la industria.

Alternativamente, también puede proporcionar a ABC ( documentación ) una representación booleana (como ecuación, tablas de verdad) , y muchos otros formatos), así como una lista de puertas para usar, y sintetizará el circuito para usted en términos de esas puertas. Esto incluye la refactorización y todos los otros tipos de optimización, según su elección.

    
respondido por el jbord39

Lea otras preguntas en las etiquetas