Podręcznik
4. Dekompozycja liniowa
Dekompozycja liniowa polega na łączeniu zmiennych w pary i wprowadzaniu ich za pośrednictwem bramek EXOR do głównego układu realizującego detekcję i klasyfikację (czyli indeksowanie) danych. Jest to istotne, gdyż prowadzi do dalszego redukowania liczby wejść w generatorach indeksu. I pewnie z tych powodów dekompozycja liniowa jest intensywnie wykorzystywana w syntezie funkcji generowania indeksów [3.20].
W dotychczasowych rozwiązaniach problem dekompozycji liniowej ogranicza się do syntezy silnie nieokreślonych funkcji boolowskich, o specyficznej własności: |Dn| = k. Ograniczenie tego problemu do funkcji, w których wszystkie wektory wyjściowe są różne, jest niepotrzebne, gdyż problem ten można sprowadzić do ogólniejszego zadania syntezy systemów funkcji boolowskich o dowolnych wyjściach. Inaczej mówiąc lepiej przyjąć założenie, że liczność zbioru wektorów wyjściowych Y funkcji F jest ≤ |Dn|.
Ogólnie rzecz biorąc problem można sprowadzić do wskazania warunków jakie muszą być spełnione, aby funkcja F posiadała dekompozycję z dwu-argumentowymi funkcjami G.
F = H(G1(X1), G2(X2),..., xn),
Funkcję G nazywać można g-argumentem, stosownie do ogólnej teorii dekompozycji funkcji boolowskich. Przyjmujemy również założenie, że w dekompozycji liniowej stosujemy funkcje o zredukowanej liczbie argumentów, czyli tzw. minimalno-argumentowe reprezentacje funkcji F.
Przy tak postawionym zagadnieniu wygodne jest stosowanie uporządkowanego i zwartego sposobu reprezentowania funkcji, jakim jest rachunek podziałów. Szczegóły dotyczące tego sposobu przedstawiana funkcji zostały już omówione w rozdz. 1.4 i nie będą tu dyskutowane. Niezbędne jest jednak krótkie przypomnienie, gdyż własności podziałów będą wykorzystywane do skonstruowania metody syntezy układów bramkowych, omawianej w dalszej części artykułu.
Rozpatrzmy funkcję logiczną zdefiniowaną w tab. 3.28, w której symbole T: 1,2,...,11 reprezentują wektory, x1,...,x5 reprezentują zmienne wejściowe, zaś y – zmienną wyjściową.
Tablica 3.28
|
T |
x1 |
x2 |
x3 |
x4 |
x5 |
y |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
|
2 |
0 |
0 |
1 |
1 |
1 |
0 |
|
3 |
0 |
1 |
0 |
1 |
0 |
0 |
|
4 |
0 |
1 |
1 |
1 |
1 |
0 |
|
5 |
0 |
1 |
1 |
0 |
0 |
0 |
|
6 |
0 |
0 |
0 |
1 |
1 |
1 |
|
7 |
0 |
1 |
0 |
0 |
0 |
1 |
|
8 |
0 |
1 |
1 |
0 |
1 |
1 |
|
9 |
1 |
1 |
0 |
1 |
0 |
1 |
|
10 |
1 |
0 |
0 |
1 |
1 |
1 |
|
11 |
1 |
0 |
0 |
1 |
0 |
1 |
Dla tego przykładu, różne wartości, przyjmowane przez zmienną wejściową x4, wyznaczają podzbiory wektorów {1,5,7,8} i {2,3,4,6,9,10,11}. Dla wektorów 1,5,7 i 8, x4 = 0, dla 2,3,4,6,9,10,11, x4 = 1. Zatem wiedząc, że x4 = 0, wiemy, że wybrany został wektor 1,5,7 lub 8, nie wiemy jednak który z nich. Analogicznie wiedząc, że x3 = 1 wiemy, że wybrano symbol 2,4,5 lub 8, nie jesteśmy jednak wstanie wskazać, który z nich konkretnie. W ten sposób informacja modelowana jest przez podziały, pokrycia i systemy zbiorów.
W celu uproszczenia zapisów wektory a,b Î{0,1}n : F(a) ≠ F(b), będą reprezentowane liczbami p,q Î K = {1,..., | <i>D<sup>n</sup> </i>|}.
Niech F będzie wielowyjściową funkcją boolowską, gdzie zbiór zmiennych X = (x1,…, xn), zbiór wektorów (mintermów) M = (m1,…, mt). Przez Cpq, gdzie p, q są wektorami z M, dla których F(p) ¹ F(q) oznaczamy zbiór niezgodności, definiowany jak następuje:
Cpq = {<i>x </i></span></span></span><span lang="EN-US" style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">Î</span></span></span><i><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"> X </span></span></span></i><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif">: <i>x</i>(<i>p</i>) </span></span></span><span lang="EN-US" style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">¹</span></span></span> <i><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif">x</span></span></span></i></strong><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"><strong>(<i>q</i>)} dla p,q = 1,…,t and p < q}. (3-3)
Rodzinę zbiorów C = (C1,…, Cn), dla wszystkich Cpq oznaczać będziemy RCpq. W obliczeniach par zmiennych tworzących dekompozycję liniową posługiwać się będziemy rodziną zbiorów Cpq.
Problem wyznaczenia odpowiednich warunków, oparty jest na pojęciu funkcji rozdzielającej. O funkcji g będziemy mówić, że jest funkcją rozdzielająca (dystrybucją) pary wektorów p,q wtedy i tylko wtedy, gdy p i q należą do różnych bloków podziału P(g). W uproszczeniu można powiedzieć, że w takim przypadku funkcja g umożliwia rozdzielenie wektorów p i q.
Z przyjętej definicji wynika, że każda jednoargumentowa funkcja g(xj) = xj, gdzie xj Î Cpq jest dystrybucją p, q. Ponadto jeśli g rozdziela parę p, q, to również parę tę rozdziela funkcja
.
Wykorzystując powyższe ustalenia można teraz warunkowi dekompozycji nadać wygodniejszą postać: F = H(g1, g2,..., gt) wtedy i tylko wtedy, gdy dla każdej pary p, q: takiej, że (p,q) nie jest zawarta w jednym bloku podziału charakterystycznego PF istnieje gj rozdzielająca parę p, q. Zalety tego warunku zostaną obecnie wykorzystane do sformułowania metodyki syntezy układów w których argumenty z X = (x1,…, xn) łączone będą w pary i wprowadzane do układu H za pośrednictwem funktorów g(xi, xj) tzn. F = H(g1, g2,…, gt, xa, xb…).
Wykorzystując powyższe ustalenia można zaproponować sposób prowadzenia syntezy logicznej jako dekompozycję bezpośrednio na bramki, w odróżnieniu od dekompozycji funkcjonalnej, w której składowe są funkcjami opisanymi tablicami prawdy. Możliwe jest obliczenie podziału P(g) dla dowolnej funkcji o skończonej liczbie zmiennych wejściowych i w następnym kroku usunięcie wszystkich zbiorów Cpq, dla których g nie jest dystrybucją. Obliczamy w ten sposób dekompozycję funkcji F i zapisujemy ją w postaci:
Liczba argumentów funkcji H wynosi w tym przypadku co najwyżej n – 1, w związku z czym proces prowadzi do zmniejszenia złożoności funkcji.
jest funkcją rozdzielającą (dystrybucją) parę (p, q) wtedy i tylko wtedy gdy {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>} Ï Cpq 
Powyższe twierdzenie prowadzi do prostej metody dekomponowania funkcji i wyznaczania g = g(xi, xj) bezpośrednio ze zbiorów Cpq i podziałów P(xi), np. podziałów generowanych przez funkcję jednoargumentową g(xi) = xi.
jest dekompozycją funkcji F, wtedy i tylko wtedy, gdy {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>} Ï RCpq, gdzie RCpq jest rodziną zbiorów Cpq, dla których p oraz q należą do różnych bloków podziału wyjściowego PF.Łatwo zauważyć, że RCpq nie zawiera 3 następujących par: x1, x5; x3, x4; x3, x5.
Tablica 3.29
|
p,q |
Cpq |
|
1,6 |
x4,x5 |
|
1,11 |
x1,x4 |
|
2,8 |
x2,x4 |
|
2,10 |
x1,x3 |
|
3,6 |
x2,x5 |
|
3,11 |
x1,x2 |
|
4,6 |
x2,x3 |
Stąd wniosek, że możliwe są g-argumenty reprezentowane przez dekompozycje funkcji F:
F = H(x1 Å x5, x2, x3, x4); F = H(x3 Å x4, x1, x2, x5); F = H(x3 Å x5, x1, x2, x4).
Proces obliczania dekompozycji liniowej może być wykonywany iteracyjnie, aż do uzyskania dekompozycji F = H(g1, g2,…, X) z maksymalną liczbą funkcji G, co zapewnia minimalna liczbę argumentów dla funkcji H, oczywiście łącznie z g-argumentami typu EXOR.
Twierdzenie 3.7 i test 3.1 można uogólnić na przypadek tzw. dekompozycji wielokrotnej. Wtedy dodatkowym warunkiem na istnienie dekompozycji z parą funkcji {<i>x<sub>i</sub></i> </span><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>j</sub> </i>, <i>x<sub>k</sub></i> </span><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>l</sub></i>}, jest sprawdzenie czy zbiór zmiennych {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>, <i>x<sub>k</sub></i>, <i>x<sub>l</sub></i>} jest zawarty w rodzinie RCpq.
Dla uproszczenia zapisów uzupełnienie RCpq względem rodziny wszystkich podzbiorów o liczności równej liczności analizowanych Cpq oznaczać będziemy COM(RCpq).
Dla funkcji z przykładu 3.12 w celu sprawdzenia, które g-argumenty mogą tworzyć dekompozycję wielokrotną (w tym przypadku podwójną), należy obliczyć czteroelementowe zbiory RCpq. W wyniku uzyskujemy, że wszystkie cztero-elementowe zbiory RCpq są: {<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>1</sub> <i>x</i><sub>2</sub> <i>x</i><sub>3</sub> <i>x</i><sub>5</sub>}, {<i>x</i><sub>1</sub> <i>x</i><sub>2</sub> <i>x</i><sub>3</sub> <i>x</i><sub>4}. Zatem uzupełnienie COM(RCpq) zawiera dwa zbiory {{<i>x</i><sub>1</sub> <i>x</i><sub>2</sub> <i>x</i><sub>4</sub> <i>x</i><sub>5</sub>}, {<sub> </sub><i>x</i><sub>1</sub> <i>x</i><sub>3</sub> <i>x</i><sub>4</sub> <i>x</i><sub>5</sub>}} i jeden z nich reprezentuje zmienne g-argumentów x1 Å x5, x3 Å x4. Na tej podstawie stwierdzamy, że funkcja z przykładu 3.12 ma dekompozycję: F = H(x1 Å x5, x3 Å x4, x2).
Inne uogólnienie Twierdzenia 3.7 dotyczy dekompozycji nierozłącznej. W tym przypadku dodatkowy warunek na istnienie dekompozycji z parą funkcji {<i>x<sub>i</sub></i> </span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"> <i>x<sub>j</sub> </i>, <i>x<sub>j</sub></i> </span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"> <i>x<sub>k</sub></i>} polega na sprawdzeniu, czy zbiór zmiennych {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>, <i>x<sub>k</sub></i>} jest zawarty w rodzinie RCpq.
Omówioną metodykę obliczania dekompozycji liniowej skonfrontujemy teraz z algorytmem zaproponowanym w [3.20]. Obliczenia przeprowadzimy dla funkcji reprezentującej koder 1 z 10 – tab. 3.30.
Tablica 3.30
|
|
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
x8 |
x9 |
x10 |
y1 |
y2 |
y3 |
y4 |
y5 |
y6 |
|
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
|
2 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
3 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
4 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|
5 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
6 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
|
7 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
|
9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
10 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
Dla funkcji tej w [3.20] obliczono dekompozycję liniową z 6 g-argumentami, które w tab. 3.30 oznaczono y1,…, y6:
F = H(x1 Åx6, x3 Åx7, x3 Åx9, x4Åx8, x4 Åx10, x5Åx6)
Obliczenia wykonano za pomocą heurystycznego algorytmu s-min. Ponieważ w uzyskanym rozwiązaniu nie ma zmiennej x2, wygodnie będzie wprowadzić nowe oznaczenia zmiennych, zgodnie z tabelą 3.31.
Tablica 3.31
|
x1 |
x3 |
x4 |
x5 |
x6 |
x7 |
x8 |
x9 |
x10 |
|
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a7 |
a8 |
a9 |
Przy tych oznaczeniach uzyskuje się nowa tablicę kodera podaną w tabeli 3.32, jak też nowe wyrażenie na uzyskaną w [3.20] dekompozycję
F = H(a1 Åa5, a2 Åa6, a2 Åa8, a3Åa7, a3 Åa9, a4Åa5)
Tablica 3.32
|
|
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a7 |
a8 |
a9 |
|
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
3 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
4 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
|
5 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
|
6 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
7 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
8 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
|
9 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
10 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Dla uproszczonego wg tabeli 3.32 kodera 1 z 10 obliczamy rodzinę RCpq, a następnie COM(RCpq). W wyniku uzyskujemy: uzupełnienie rodziny RCpq ma pusty zbiór par, ale zawiera wszystkie możliwe (84) podzbiory trój-elementowe zbioru {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, <i>a</i><sub>3,</sub> <i>a</i><sub>4</sub>,<sub> </sub><i>a</i><sub>5</sub>, <i>a</i><sub>6</sub>, <i>a</i><sub>7</sub>, <i>a</i><sub>8</sub>, <i>a</i><sub>9</sub>}. Stąd wniosek, że dla kodera 1 z 10 istnieje dekompozycja nierozłączna wielokrotna reprezentowana trójelementowymi podzbiorami zbioru {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, <i>a</i><sub>3,</sub> <i>a</i><sub>4</sub>,<sub> </sub><i>a</i><sub>5</sub>, <i>a</i><sub>6</sub>, <i>a</i><sub>7</sub>, <i>a</i><sub>8</sub>, <i>a</i><sub>9</sub>}, czyli
F = H(aiÅaj, ajÅak, al Åam, am Åan, ap Åaq, aq Åar) (3-4)
Tym samym potwierdza to istnienie dekompozycji:
F = H(a1 Åa5, a2 Åa6, a2 Åa8, a3Åa7, a3 Åa9, a4Åa5)
uzyskanej w [3.20], przy czym należy podkreślić, że dekompozycja taka istnieje dla wszystkich możliwych trójek:
ai aj ak,
al am an,
ap aq ar
Zatem przy zastosowaniu metody z [3.20] znalezienie jakiegokolwiek rozwiązania nie było trudne.
Wykazana własność dekompozycji (wg (3-4)) pozwala zapisać dekompozycję kodera 1 z 10 w naturalnym porządku zmiennych
F = H(a1 Å a2, a2 Å a3, a4 Å a5, a5 Å a6, a7 Å a8, a8 Å a9) = H(b1, b2, b3, b4, b5, b6), (3-5)
któremu odpowiada tablica indeksów przedstawiona w tabeli 3.33.
Tablica 3.33
|
b1 |
b2 |
b3 |
b4 |
b5 |
b6 |
f |
|
1 |
0 |
0 |
0 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
2 |
|
1 |
1 |
0 |
0 |
0 |
0 |
3 |
|
0 |
1 |
0 |
0 |
0 |
0 |
4 |
|
0 |
0 |
1 |
0 |
0 |
0 |
5 |
|
0 |
0 |
1 |
1 |
0 |
0 |
6 |
|
0 |
0 |
0 |
1 |
0 |
0 |
7 |
|
0 |
0 |
0 |
0 |
1 |
0 |
8 |
|
0 |
0 |
0 |
0 |
1 |
1 |
9 |
|
0 |
0 |
0 |
0 |
0 |
1 |
10 |
W rozwiązaniu tym indeksy są reprezentowane wektorami 6-bitowymi b1 b2 b3 b4 b5 b6.
Można przypuszczać, że stosując raz jeszcze metodykę zbiorów niezgodności uzyskamy rozwiązanie z mniejszą liczbą bitów. Ponieważ rodzina zbiorów niezgodności zawiera wszystkie możliwe pary bi bj, 12 zbiorów trójelementowych oraz żadnego zbioru 5 i 6 elementowego, znalezienie dekompozycji liniowej jest możliwe wyłącznie dla funkcji typu {<i>x<sub>i</sub></i> <span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>j</sub> </i>, <i>x<sub>j</sub></i> </span><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>k</sub></i>}.
Z przeglądu w RCpq zbiorów trójelementowych:
1. b1, b3, b4;
2. b1, b5, b6;
3. b1, b2, b3;
4. b1, b2, b4;
5. b1, b2, b5;
6. b1, b2, b6;
7. b2, b3, b4;
8. b2, b5, b6;
9. b3, b5, b6;
10. b3, b4, b5;
11. b3, b4, b6;
12. b4, b5, b6;
wynika, że trójelementowymi zbiorami bi, bj, bk możliwymi do utworzenia dekompozycji nierozłącznej są {<i>b</i><sub>1</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>1</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>6</sub>}, {<i>b</i><sub>1</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>1</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>6</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>6</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>6</sub>}. Ponieważ są wśród nich dwa zbiory rozłączne: {<i>b</i><sub>1</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>5</sub>} i {<i>b</i><sub>2</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>6</sub>}, a ponadto w COM(RCpq) jest zbiór 6 elementowy b1, b2, b3, b4, b5, b6, spełnione są warunki istnienia dekompozycji: F = H(b1 Å b3, b3 Å b5, b2 Å b4, b4 Å b6). W rezultacie indeksy kodera 1 z 10 są 4-bitowe (tab. 3.34) i jest to rozwiązanie lepsze niż w [3.20].
Tablica 3.34
|
y1 |
y2 |
y3 |
y4 |
h |
|
1 |
0 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0 |
2 |
|
1 |
0 |
1 |
0 |
3 |
|
0 |
0 |
1 |
0 |
4 |
|
1 |
1 |
0 |
0 |
5 |
|
1 |
1 |
1 |
1 |
6 |
|
0 |
0 |
1 |
1 |
7 |
|
0 |
1 |
0 |
0 |
8 |
|
0 |
1 |
0 |
5 |
9 |
|
0 |
0 |
0 |
1 |
10 |








