Karnaughova mapa

Karnaughova mapa je prostředek pro minimalizaci logických obvodů. Pro pochopení Karnaughovy mapy musíme první pochopit Grayův kód.

Grayův kód

Grayův kód je binární číselná soustava, ve které se každé dvě po sobě jdoucí hodnoty liší v jedné bitové pozici.

Příkladná tabulka pro 3 bity (tučně zvýrazněný změněný bit):

ABC
000
001
011
010
110
111
101
100

Karnaughova mapa - příklad 1

Máme pravdivostní tabulku se vstupy \(A,B,C,D\) a výstupem \(Q\):

ABCDQindex bitu
000000
000111
001012
001113
010004
010105
011006
011107
100018
100119
1010110
1011111
1100112
1101113
1110014
1111015
  1. Vytvoříme tabulku pomocí indexů v pravdivostní tabulce (odvíjí se od Grayova kódu). Neboli doplníme do obrázku

Vznikne nám následující tabulka

  1. Zakroužkujeme sousedy

Musíme zakroužkovat všechny \(1\), kroužkujeme buď samostatnou \(1\) (v tomto případě je výsledek stejný jako při stavění pomocí mintermů přímo z pravdivostní tabulky, tady K-mapa nemá žádný přínos) nebo obdélníky s obsahem rovným některé mocnině \(2\) \(2,4,8...\), z čehož přímo výplývá (jako nutná podmínka), že obě dělky stran obdélníků musí být mocniny dvou.

  1. Vytvoříme výrazy
  • Růžová - \(A \cdot \overline{C}\)
  • Zelená - \(A \cdot \overline{B}\)
  • Modrá - \(\overline{B} \cdot C\)
  • Oranžová - \(\overline{A} \cdot \overline{B} \cdot \overline{C} \cdot D\)
  1. Sečteme výrazy

\((A \cdot \overline{C}) + (A \cdot \overline{B}) + (\overline{B} \cdot C ) + (\overline{A} \cdot \overline{B} \cdot \overline{C} \cdot D)\)

  1. Upravíme výraz

\(A\overline{C}+A\overline{B}+\overline{B}C+\overline{A} \cdot \overline{B} \cdot \overline{C} \cdot D = A\overline{C} + \overline{B} \cdot (A + C + \overline{A} \cdot \overline{C} \cdot D)\)

Karnaughova mapa - příklad 2

Máme pravdivostní tabulku se vstupy \(A,B,C\) a výstupem \(Q\):

ABCQ
0001
0010
0101
0110
1001
1010
1100
1110
  1. Vytvoříme si Karnaughovu mapu (tam kde jsou písmena, tak je hodnota nastavená na 1)

  1. Doplníme do tabulky

  1. Zakroužkujeme největší obdelníky a vyjádříme je

POZOR: oranžový 1x1 obdélník není optimální (maximální), lepší by byl jako 2x2 čtverec přecházející přes hranu. Je to takhle zvolen abychom ukázali, že K-Mapa dál funguje, jenom není výsledek optimální - 1x1 čtverec je potřeba vyjádřit jako 4-term, místo 2-termu pokud bychom udělali 2x2.

Vidíme, že je blok nezávislý na tom, jestli je \(A\) \(0\) nebo \(1\) , takže zahrneme jen proměnou \(B\) a \(C\)

  • \(B\) musí být \(0\)
  • \(C\) musí být \(0\)

\(Q_1 = \overline{B} * \overline{C}\)

Součin jsme použili, protože je \(*\) totožné logickému a zároveň platí (v programovacím jazyku C -->&&)

Jelikož se jedná o torus (viz. gif), můžeme označit i hodnoty, které se nacházejí "vedle sebe" (na začátku a na konci)

Vidíme, že je výraz \(Q_2\) nezávislý na proměnné \(B\) (může být \(0\) nebo \(1\))

  • \(A\) musí být \(0\)
  • \(C\) musí být \(0\)

\(Q_2 = \overline{A} * \overline{C}\)

  1. Sjednotíme výrazy

Výsledné výrazy sečteme

\(Q = Q_1 + Q_2 = (\overline{B} * \overline{C}) + (\overline{A} * \overline{C})\)

  1. Výsledný výraz si můžeme postavit v logisimu viz. obrázek

  1. Zkontrolujeme pravdivostní tabulku.
    1. Klikneme pravým tlačítkem na circuit v nabídce (základní je main)
    2. Klikneme na tlačítko Build Circuit
    3. Potvrdíme tlačítkem OK, popřípadě Yes
    4. Vybereme v nabídce Table
    5. Dostaneme tabulku viz. obrázek