• No results found

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

Related documents