Podręcznik
6. Redukcja argumentów
6.1. Metoda klasyczna
Z praktycznego punktu widzenia istotne są takie realizacje funkcji boolowskich, w których argumenty , stanowią podzbiór zbioru , gdyż uzyskuje się wtedy bezpośrednio realizację n-argumentowej funkcji f w układzie kombinacyjnym o t wejściach (t < n), co ma znaczenie w syntezie na typowych modułach PLD i w strukturach FPGA. Istotne jest również to, że (przy dużych n) zmniejszenie liczby argumentów z n do t upraszcza ewentualnie dalsze zabiegi optymalizacyjne, gdyż zmniejsza wymiary zadań dla procesu minimalizacji i dekompozycji. W szczególności redukcja argumentów stanowi podstawę dekompozycji równoległej, którą omówimy pod koniec niniejszego rozdziału.
Realizację funkcji f = f(x1,...,xn) taką, że:
nazywać będziemy minimalno-argumentową realizacją funkcji f wtedy i tylko wtedy, gdy nie istnieje zbiór zmiennych:
Niech a Î Bn, b Î Bn. Utwórzmy dla wektorów a,b wyrażenie boolowskie:
gdzie sumowanie jest po wszystkich i takich, że ai ¹ bi. Inaczej mówiąc, xi jest składnikiem
d(a,b) tylko wtedy, gdy wektory a oraz b mają różne składowe ai,bi. Reprezentacją argumentową funkcji f (oznaczaną dalej przez RAf) nazywać będziemy wyrażenie boolowskie:
gdzie iloczyn logiczny Ù jest brany po wszystkich parach a,b : f(a) ¹ f(b).
Można wykazać, że dla każdego rozwiązania równania RAf = 1:
istnieje funkcja h o argumentach , dla której
Dla dowodu powyższego wystarczy zauważyć, że jeżeli ,to dla każdej pary wektorów a,b : f(a) ¹ f(b), wektory oraz różnią się co najmniej jedną składową.
Jeżeli zbiór zmiennych ,spełniających równanie (2-7) jest zbiorem o możliwie najmniejszej liczności, to funkcja h jest nazywana minimalno-argumentową realizacją funkcji f [1].
Z konstrukcji wyrażenia RAf wynika, że jest to koniunkcja czynników o postaci . Rozwiązanie równania RAf = 1 jest więc typowym problemem pokrycia, a odpowiednie obliczenia można uprościć wykorzystując pojęcie elementu zasadniczego, którego rolę w redukcji argumentów spełniać będzie omówione dalej pojęcie zmiennej niezbędnej.
Rozważmy funkcję f z tablicy 2.26a. Postaramy się zmniejszyć liczbę argumentów tej funkcji usuwając z niej po jednej zmiennej. Usuwając z tablicy 2.26a kolumnę odpowiadającą zmiennej x4 uzyskujemy tablicę, w której dwa wiersze, o numerach 2 i 8, (tabl. 2.26b) są identyczne, ale wierszom tym odpowiadają różne wartości funkcji. Tablica jest więc sprzeczna. Stąd wniosek, że argumentu x4 usunąć nie można.
Tablica 2.26
|
a) |
|
b) |
|
|
|
|
|
|
|
|
c) |
|
|
|
|
|
|||||||
|
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
f |
|
|
x1 |
x2 |
x3 |
x5 |
x6 |
x7 |
f |
|
|
x2 |
x4 |
x6 |
x7 |
f |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
|
1 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
0 |
1 |
0 |
2 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
|
2 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
|
2 |
0 |
1 |
1 |
0 |
0 |
3 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
|
3 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
|
3 |
1 |
1 |
1 |
0 |
0 |
4 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
|
4 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
|
4 |
1 |
0 |
1 |
1 |
0 |
5 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
|
5 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
|
5 |
1 |
0 |
0 |
1 |
1 |
6 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
|
6 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
|
6 |
0 |
0 |
1 |
0 |
1 |
7 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
|
7 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
|
7 |
0 |
0 |
0 |
0 |
1 |
8 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
|
8 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
|
8 |
0 |
0 |
1 |
0 |
1 |
9 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
|
9 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
|
9 |
1 |
0 |
0 |
1 |
1 |
Natomiast usuwając z tablicy 2.26a zmienną x3 uzyskujemy tablicę, w której wszystkie wiersze są różne.
Można nawet usunąć jeszcze zmienne x1 i x5 (tabl. 2.26c), a łączny rezultat tych usunięć nie spowoduje pojawienia się sprzeczności. Spostrzeżenie powyższe prowadzi do następującej definicji.
Oznaczmy przez Tf (X – {<i>x<sub>i</sub></i>}) tablicę specyfikacji funkcji f uzyskaną z Tf przez usunięcie kolumny xi, gdzie Tf jest tablicą funkcji f.
Zmienną xi nazywamy zmienną niezbędną [2.6], jeżeli tablica specyfikacji Tf (X – {<i>x<sub>i</sub></i>}) jest sprzeczna.
Zmiennymi niezbędnymi funkcji f z tablicy 2.26a są x4 oraz x6, gdyż tablice Tf (X – {<i>x</i><sub>4</sub>}), Tf (X – {<i>x</i><sub>6</sub>}) są sprzeczne.
Można wykazać, że zmienna xi jest zmienną niezbędną funkcji f(x1,...,xn), jeśli istnieją wektory a, b: f(a) ¹ f(b) takie, że ai ¹ bi oraz aj = bj dla każdego j ¹ i.
Przyjmując do opisu funkcji f: Bn ® {0,1,–} podziały na zbiorze K ponumerowanych wektorów z Bn, możemy podane wyżej spostrzeżenia wyrazić analitycznie. Oznaczmy przez P(xi) podział na K realizowany zmienną xi, a przez Pf, podział wyjściowy funkcji f. Wtedy warunek na minimalno-argumentową realizację funkcji f można sprawdzić za pomocą nierówności:
Obliczymy wszystkie realizacje minimalno-argumentowe funkcji f = f(x1,...,x7), której tablica prawdy podana jest w tabl. 2.26a, z odpowiednią numeracją wektorów.
Wektory prawdziwe i fałszywe tej funkcji ponumerowano liczbami naturalnymi 1,...,9, czyli K = {1,...,9}. Mamy wtedy (przy oznaczeniach P(xi) = Pi) następujące podziały na K:
Jak już stwierdziliśmy, zmiennymi niezbędnymi tej funkcji są x4, x6. Dlatego najpierw wyznaczymy iloczyn P = P4×P6:
Blokami iloczynu P = (B1,...,B3) są B1 = {1,5,7,9}, B2 = {4,6,8}, B3 = {2,3}. W dalszych obliczeniach pomijamy blok B3, gdyż B3 jest zawarty w jednym bloku podziału Pf.
Kolejną czynnością jest obliczenie podziału ilorazowego P4×P6| Pf :
Obliczony podział ilorazowy pozwala wyznaczyć czynniki wyrażenia boolowskiego RAf. Wyznaczane są one dla każdej pary mintermów p,q, takiej, że p i q należą do jednego bloku iloczynu P4 × P6, ale do różnych bloków podziału Pf, co łatwo odczytać z podziału ilorazowego biorąc pary p,q z różnych elementów tego podziału. Przez elementy rozumiemy tu podzbiory ograniczone różnymi nawiasami. Dla każdej tak wyznaczonej pary p,q sprawdzamy na jakich pozycjach, czyli dla jakich zmiennych różnią się odpowiadające im wektory w tablicy prawdy. Na przykład, dla pary p = 1, q = 5 mamy, że odpowiednie wektory w tablicy prawdy funkcji f (tabl. 4.17a) różnią się na pozycjach x1, x2, a więc odpowiadający tej parze czynnik RA będzie C1 = x1 Ú x2. Zestawienie zmiennych, dla których różnią się pary p,q nazywać będziemy tablicą porównań. Odczytując z podziału ilorazowego (2-8) pary p,q otrzymujemy następująca listę porównań:
Redukując w zbiorach C każde Ci, dla którego istnieje , otrzymujemy równanie RA = 1 o postaci:
które przekształcamy do postaci sumo-iloczynowej:
x2x3 + x2x5 +x2x7 + x1x3x7
Na tej podstawie wyznaczamy minimalne rozwiązania o najmniejszej liczności: {<i>x</i><sub>2</sub>, <i>x</i><sub>3</sub>,<i> x</i><sub>4</sub>, <i>x</i><sub>6</sub>}, {<i>x</i><sub>2</sub>, <i>x</i><sub>4</sub>,<i> x</i><sub>5</sub>, <i>x</i><sub>6</sub>}, {<i>x</i><sub>2</sub>, <i>x</i><sub>4</sub>,<i> x</i><sub>6</sub>, <i>x</i><sub>7</sub>}. Stąd wniosek, że siedmioargumentowa funkcja f w rzeczywistości jest zależna wyłącznie od czterech argumentów. Zauważmy też, że ostatnie z podanych rozwiązań oznacza usunięcie z tablicy funkcji f kolumn odpowiadających zmiennym x1, x3, x5. Sytuacja taka była już prezentowana w tablicy 2.26c.
Skuteczność redukcji argumentów, a także jej wpływ na inne procedury logicznej pokażemy na bardziej skomplikowanym przykładzie.
Dla funkcji F podanej w tablicy 2.27 obliczyć wszystkie minimalne zbiory argumentów, od których ta funkcja zależy. Zmienne niezbędne tej funkcji to: x1, x3, x7.
Tablica 2.27
|
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
x8 |
x9 |
y1 |
y2 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
2 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
3 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
4 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
5 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
6 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
7 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
8 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
9 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
10 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
W bardziej skomplikowanych przykładach można zaobserwować wpływ redukcji argumentów na proces realizacji funkcji w postaci minimalnych wyrażeń boolowskich. Na przykład dla funkcji TL27 z tabl. 2.28 można obliczyć następujące redukty.
R1 = {<i>x</i><sub>1</sub>,<i> x</i><sub>2</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>10</sub>}
R2 = {<i>x</i><sub>1</sub>,<i> x</i><sub>2</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>8</sub>,<i> x</i><sub>10</sub>}
R3 = {<i>x</i><sub>1</sub>,<i> x</i><sub>2</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>9</sub>,<i> x</i><sub>10</sub>}
R4 = {<i>x</i><sub>1</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i></span><sub><span lang="PT-BR" style="line-height:150%">9</span></sub><span lang="PT-BR" style="line-height:150%">,<i> x</i><sub>10</sub>}
R5 = {<i>x</i><sub>1</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>8</sub>,<i> x</i><sub>9</sub>,<i> x</i><sub>10</sub>}
R6 = {<i>x</i><sub>1</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>8</sub>,<i> x</i><sub>9</sub>,<i> x</i><sub>10</sub>}
R7 = {<i>x</i><sub>2</sub>,<i> x</i><sub>3</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>10</sub>}
R8 = {<i>x</i><sub>2</sub>,<i> x</i><sub>3</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>8</sub>,<i> x</i><sub>10</sub>}
R9 = {<i>x</i><sub>3</sub>,<i> x</i><sub>4</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>9</sub>,<i> x</i><sub>10</sub>}
R10 = {<i>x</i><sub>3</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>7</sub>,<i> x</i><sub>8</sub>,<i> x</i><sub>9</sub>,<i> x</i><sub>10</sub>}
Tablica 2.28
|
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
x8 |
x9 |
x10 |
y |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
2 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
3 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
4 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
5 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
6 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
7 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
8 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
9 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
10 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
11 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
12 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
13 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
14 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
15 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
16 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
17 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
18 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
19 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
20 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
21 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
22 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
23 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
24 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
25 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
Wybierając jeden z tych zbiorów (np. R3) możemy dla zredukowanej w ten sposób funkcji zastosować inne procedury optymalizacji np. minimalizację. Uzyskamy wtedy następujące wyrażenie:
Warto podkreślić, że rozwiązanie wyznaczone za pomocą programu ESPRESSO [2.1] prowadzi do wyrażenia
zawierającego 9 argumentów. Jak widać, nie prowadzi ono do realizacji minimalno-argumentowej. Jeśli jednak procedurę minimalizacji zastosujemy do funkcji o zredukowanych argumentach, to uzyskamy wyrażenie o mniejszej liczbie składników iloczynowych.
[1] Zbiór Xt jest również nazywany reduktem [2.10].