2.2 F¨ orenkling av booleska uttryck
2.2.2 QMC-metoden
Den grafiska metoden med Karnaugh-diagram blir givetvis oanv¨andbar d˚a antalet variabler ¨okar. F¨or st¨orre problem fordras algoritmer som kan programmeras. Den vanligaste algoritmen f¨or f¨orenkling av booleska funktioner ¨ar en metod enligt Quine och McClusky (QMC-metoden), som skall beskrivas nedan.
Vi b¨orjar med att numrera funktionstabellens rader i enlighet med det bin¨ara talsystemet. F¨or tre vari-abler identifierar vi s˚aledes de olika variabelkombinationerna enligt f¨oljande tabell.
j A B C
Proceduren ¨ar sedan f¨oljande. F¨orst uppst¨alls en funktionstabell med endast de rader f¨or vilka funktionen antar v¨ardet 1 insatta. En funktion med Karnaugh-diagrammet nedan f˚ar s˚aledes funktionstabellen i Tab.
2.1.
N¨asta steg ¨ar att unders¨oka vilka rader i tabellen som kan kombineras till en enklare term. Detta ¨ar m¨ojligt d˚a tv˚a rader ¨overensst¨ammer s˚a n¨ar som i en variabel. Raderna 0 och 2 i Tab. 2.1(a) kombineras t.ex. till den nya raden
0 0 − 0
(Detta motsvarar kombination av termer enligt A B C D + A BCD = A B D)
De p˚a detta s¨att konstruerade nya raderna samlas till en ny tabell, Tab. 2.1(b). Proceduren upprepas tills ytterligare kombinationer inte mera kan g¨oras i Tab. 2.1(c). De termer som i denna procedur inte mera kan f¨orenklas ¨ar primimplikatorer. Dessa har i Tabell 2.1 betecknats p1, p2, . . . , p7.
S˚asom vi tidigare sett, ger en disjunktion av primimplikatorerna i allm¨anhet ej ett minimalt funktionsut-tryck, eftersom alla primimplikatorer inte beh¨over medtas. F¨or att finna vilka primimplikatorer som b¨or medtas uppg¨ors en primimplikatortabell, Tabell 2.2. I denna anger kolumnerna den ursprungliga funk-tionstabellens termer (Tab. 2.1 (a)), och raderna anger primimplikatorer. De termer som inkluderas av en primimplikator anges med ”x”. Proceduren ¨ar sedan f¨oljande.
1. De kryss som f¨orekommer ensamma i en kolumn omringas ( x ). Motsvarande primimplikator ¨ar en v¨asentlig primimplikator och b¨or medtas i funktionsuttrycket. De v¨asentliga primimplikatorerna anges med asterisk∗.
2. Alla kryss som f¨orekommer i en rad med omringat x anges med klammer, [x].
3. Ange alla de kryss som f¨orekommer i en kolumn med [x] med parentes, (x). Detta anger att mot-svarande term redan ing˚ar i de primimplikatorer som medtagits och inte beh¨over beaktas i forts¨ att-ningen.
2.2. F ¨ORENKLING AV BOOLESKA UTTRYCK 25
Tabell 2.1: Stegvis f¨orenkling
(a) (b) (c)
4. V¨alj fr˚an de ˚aterst˚aende valbara primimplikatorerna (p1−p5) ett antal s˚a att de ˚aterst˚aende kryssen medtas. Ange raderna med dubbel asterisk ∗∗. Valet skall g¨oras s˚a att funktionsuttrycket blir minimalt, dvs.
• Antalet termer (primimplikatorer) ¨ar minimalt,
• Termerna (primimplikatorerna) ¨ar korta (av tv˚a primimplikatorer i tabellen ¨ar den vars rad inneh˚aller de flesta kryssen den kortare).
Tabell 2.2: Primimplikatortabell ty alla andra val skulle kr¨ava minst tre primimplikatorer. Enligt Tabell 2.2 ges det minimala funktions-uttrycket som en disjunktion av primimplikatorerna p2, p4, p6 och p7, av vilka p6 och p7 ¨ar v¨asentliga primimplikatorer. Uttrycket blir (jmf. Tab. 2.1)
B D + AD + ACD + BCD
I exemplet i Tabell 2.1 var funktionen fullst¨andigt specificerad. Proceduren kan emellertid enkelt an-passas f¨or ofullst¨andigt specificerade funktioner, med ”don’t care” funktionsv¨arden f¨or vissa variabel-kombinationer. H¨arvid inkluderar man de rader f¨or vilka funktionsv¨ardet ¨ar ospecificerat (”don’t care”) i funktionstabellen (Tab. 2.1), och bildar primimplikatorerna s˚asom ovan. Vid uppst¨allningen av primimpli-katortabellen (Tab. 2.1), l¨amnas emellertid motsvarande kolumner bort. (D˚a funktionens v¨arde f¨or dessa tillst˚and inte spelar n˚agon roll, beh¨over de ju ej beaktas d˚a primimplikatorerna v¨aljs ut. D¨aremot b¨or de beaktas i det f¨orsta skedet d˚a primimplikatorerna bildas, ty de kan endast leda till kortare primimplika-torer, ej l¨angre.) Denna procedur leder till ett minimalt funktionsuttryck f¨or ofullst¨andigt specificerade funktioner.
26 KAPITEL 2. BOOLESKA FUNKTIONER Uppgift 2.4 F¨orenkla den logiska funktionen X med f¨oljande Karnoughdiagram (- motsvar don’t care tillst˚and):
AB 00 01 11 10
C 0
1
- 1
-1 1 1
QMC-metoden kan enkelt programmeras. I Friedman Logical Design of Automation Systems (Prentice – Hall, 1990), ges ett Fortran-program primp, som f¨orenklar booleska uttryck. P˚a denna kurs hemsida s˚a finns ¨aven en Matlab-implementering av QMC-metoden tillg¨anglig, och en Scilab-version ¨ar ocks˚a under arbete.
Nedan visas en exempelk¨orning d¨ar programmet till¨ampats f¨or funktionen i Tabell 2.1 (a). Funktions-v¨ardena l¨ases in i ordningsf¨oljd, och programmet ger en f¨orteckning ¨over primimplikatorerna (observera att numreringen ej ¨overensst¨ammer med den i Tabellerna 2.1 och 2.2, primp sorterar primimplikatorer-na, s˚a de kommer i ordningen p6, p1, p2, p4, p3, p7, p5), samt anger vilka som ¨ar v¨asentliga och vilka som v¨aljs bland de valbara. I constraint table anges slutligen vilka mintermer de olika icke-v¨asentliga primimplikatorerna inkluderar (t¨acker).
% ~jboling/sst/primp
SIMPLIFICATION OF BOOLEN FUNCTIONS BY PRIME IMPLICANT ANALYSIS
**************************************************************
NUMBER OF VARIABLES : 4
INPUT FUNCTION VALUES IN TRUTH TABLE
( 16 VALUES: 1 = TRUE / 0 = FALSE / -1 = DON’T CARE ) : 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 0
*** BOOLEAN MINIMIZATION PROGRAM ***
THIS FUNCTION CONTAINS 4 VARIABLES A LISTING OF THE INPUT DATA FOLLOWS TRUE MINTERMS = 1
FALSE MINTERMS = 0
REDUNDANT MINTERMS (DON’T CARES) = -1
0 0 = 1, 1 = 0, 2 = 1, 3 = 1, 4 = 0,
5 = 1, 6 = 0, 7 = 1, 8 = 1, 9 = 0,
10 = 1, 11 = 0, 12 = 1, 13 = 1, 14 = 1,
15 = 0,
0 THE FOLLOWING IS A LIST OF THE PRIME IMPLICANTS OF THE MINIMIZED FUNCTION.
ESSENTIAL PRIME IMPLICANTS ARE SO LABELED, AND PRIME IMPLICANTS SELECTED FROM A CYCLIC CHART ARE LABELED AS CHOSEN.
2.2. F ¨ORENKLING AV BOOLESKA UTTRYCK 27
-- INDICATES A MISSING VARIABLE, 0 INDICATES A COMPLEMENTED VARIABLE AND 1 INDICATES A TRUE VARIABLE.
THE FUNCTION IS REPRESENTED BY THE SUM OF BOTH THE ESSENTIAL AND THE CHOSEN PRIME IMPLICANTS.
CONSTRAINT TABLE
Samma problem kan ocks˚a l¨osas med matlab-rutinen qmc, hittas allts˚a p˚a kursens hemsida:
>> qmc
Program for minimizing Boolean expressions with the QMC-method Either a truth table or a boolean expression should be given.
Use standard MATLAB logical operators: AND = &
OR = | NOT = ~
Logical terms should be separated with parentesis: (A | ~B) & (B |
~C) & (C | ~A) & ((A & B & C)|(~A & ~B & ~C))
Logical expression (L) or truth table (T)): T Number of variables: 4
A B C D
28 KAPITEL 2. BOOLESKA FUNKTIONER
Truth table:
i A B C D f
---0 ---0 0 0 0 1
1 0 0 0 1 0
2 0 0 1 0 1
3 0 0 1 1 1
4 0 1 0 0 0
5 0 1 0 1 1
6 0 1 1 0 0
7 0 1 1 1 1
8 1 0 0 0 1
9 1 0 0 1 0
10 1 0 1 0 1 11 1 0 1 1 0 12 1 1 0 0 1 13 1 1 0 1 1 14 1 1 1 0 1 15 1 1 1 1 0 Prime implicants:
1: 0 2 8 10 2: 8 10 12 14
3: 2 3 -
-4: 3 7 -
-5: 5 7 -
-6: 5 13 - -7: 12 13 -
-Essential prime implicants:
1 2
Chosen prime implicants:
4 6
Logical expression: (~B & ~D) | (A & ~D) | (~A & C & D) | (B & ~C & D)
Matlab-programmet klarar ocks˚a av att f¨orenkla logiska uttryck, det generar sj¨alv en sanningstabell och sedan ber¨aknar minimalt uttryck. Nedan l¨oses uppgift 2.2.
>>qmc
Program for minimizing Boolean expressions with the QMC-method Either a truth table or a boolean expression should be given.
Use standard MATLAB logical operators: AND = &
OR = | NOT = ~
Logical terms should be separated with parentesis: (A | ~B) & (B |
~C) & (C | ~A) & ((A & B & C)|(~A & ~B & ~C))
Logical expression (L) or truth table (T)): L Give logical function:
(A|~B)&(B|~C)&(C|~A)&((A&B&C)|(~A&~B&~C)) Processing....
2.2. F ¨ORENKLING AV BOOLESKA UTTRYCK 29