Podręcznik
3. Dekompozycja funkcjonalna – model ogólny
Niech X = {<i>x</i><sub>1</sub>,...,<i>x<sub>n</sub></i>} będzie zbiorem zmiennych wejściowych funkcji F(x1,...,xn) specyfikowanej zbiorem kostek typu fr. Niech U i V będą dwoma rozłącznymi podzbiorami zbioru X takimi, że U È V = X.
Załóżmy, że zbiór zmiennych x1,...,xn został w odpowiedniej tablicy funkcji przenumerowany w taki sposób, że U = {<i>x</i><sub>1</sub>,...,<i>x<sub>r</sub></i>} oraz V = {<i>x<sub>r </sub></i><sub>+ 1</sub>,...,<i>x<sub>n</sub></i>}. Niech dla dowolnej n-krotki x, pierwsze r składowe będą oznaczone przez xU, a ostatnie s = n – r składowe, przez xV.
Niech F będzie funkcją fr posiadającą n > 0 wejść oraz m > 0 wyjść, w której para (U,V) jest określona jak wyżej. Załóżmy, że F jest specyfikowana zbiorem kostek K. Niech G będzie funkcją fr o s = n – r wejściach i p wyjściach oraz H będzie funkcją fr o r + p wejściach i m > 0 wyjściach.
Parę (G,H) nazywamy dekompozycją szeregową rozłączną funkcji F (rys. 3.15) ze względu na (U,V), jeśli, dla każdego mintermu b odpowiedniego do K, G(bV), jest zdefiniowana a ponadto G(bV) Î {0,1}p oraz F(b) Ê H(bU,G(bV)}.
3.15. Dekompozycja szeregowa – model ogólny
Funkcja F typu fr określona zbiorem kostek K ma dekompozycję szeregową rozłączną ze względu na (U,V) wtedy i tylko wtedy, gdy istnieje nakrycie bG na K takie, że:
bV £ bG oraz
bU · bG £ bF,
gdzie bU i bV są nakryciami indukowanymi przez U i V oraz bF jest nakryciem wyjściowym.
Analogiczne twierdzenie obowiązuje również w przypadku, gdy nakrycia b zostaną zastąpione systemami zbiorów s.
Funkcja F typu fr określona zbiorem kostek K ma dekompozycję szeregową rozłączną ze względu na (U,V) wtedy i tylko wtedy, gdy istnieje system zbiorów sG na K taki, że:
sV £ sG oraz
sU · sG £ sF,
gdzie: sU = max bU oraz sV = max bV są systemami zbiorów indukowanymi przez U i V oraz sF = max bF jest odpowiednim systemem wyjściowym.
Jak wynika z powyższych twierdzeń głównym zadaniem w obliczeniu dekompozycji funkcji F przy danych zbiorach U i V jest znalezienie nakrycia bG, które spełnia warunki twierdzenia 3.4. Podział ten nie tylko weryfikuje istnienie dekompozycji, ale również pozwala na wyznaczenie tablic fr dla funkcji G i H. Wynika to z faktu, że nakrycia bV i bG oraz bU · bG i bF umożliwiają skonstruowanie odpowiednio tablic funkcji G i H. Konstrukcję tych tablic, a także metody obliczania bG omówimy dokładnie w dalszej części rozdziału. Na razie zajmiemy się podstawowymi zasadami tych obliczeń.
Skoro bG musi być konstruowany przez sklejanie bloków nakrycia bV, to dwa bloki Bi i Bj nakrycia bV są zgodne, jeśli nakrycie gij uzyskane z bV przez sklejenie Bi i Bj do jednego bloku i pozostawienie wszystkich pozostałych bloków bez zmiany, spełnia drugi warunek twierdzenia 3.4, czyli bU · gij £ bF. W przeciwnym przypadku bloki Bi i Bj są niezgodne.
Podzbiór d bloków nakrycia bV jest klasą zgodną, jeśli bloki w zbiorze d są parami zgodne. Klasa zgodna jest klasą maksymalną, jeśli nie jest podzbiorem żadnej innej klasy zgodnej. Maksymalne klasy zgodne umożliwiają konstrukcję bG. Bloki nakrycia bG powstają z klas zgodności tworzących minimalne pokrycie zbioru wszystkich bloków bV. Wyselekcjonowane według minimalnego pokrycia klasy zgodne są następnie redukowane o bloki powtarzające się i przyjmowane jako bloki nakrycia bG (lub sG), po podstawieniu pierwotnych elementów w postaci numerów kostek funkcji F .

Tablica 3.23
Uwzględniając, że
możemy obliczyć, iż sklejenie bloków B1 i B2 prowadzi do g12 = {1,2,3,7}, co po obliczeniu
pozwala wnioskować, że bU · g12 £ sF, zatem (B1, B2) jest parą zgodną. Inaczej jest z parą (B1, B3), dla której g13 = {1,2,3,6,7}, stąd,
. (B1, B3) jest więc parą niezgodną. W rezultacie wszystkie pary zgodne są następujące: (B1, B2), (B1, B6), (B2, B3), (B2, B6), (B4, B7) i (B5, B7). Łatwo więc wyznaczyć maksymalne klasy zgodne: {<i>B</i><sub>1</sub>, <i>B</i><sub>2</sub>, <i>B</i><sub>6</sub>},{<i>B</i><sub>2</sub>, <i>B</i><sub>3</sub>}, {<i>B</i><sub>4</sub>, <i>B</i><sub>7</sub>} i {<i>B</i><sub>5</sub>,<i>B</i><sub>7</sub>}. Minimalne pokrycie zbioru {<i>B</i><sub>1</sub>,..., <i>B</i><sub>7</sub>} podanymi wyżej klasami prowadzi do rozwiązania: {<i>B</i><sub>1</sub>, <i>B</i><sub>2</sub>, <i>B</i><sub>6</sub>},{<i>B</i><sub>4</sub>}, {<i>B</i><sub>3</sub>} i {<i>B</i><sub>5</sub>,<i>B</i><sub>7</sub>}. Na tej podstawie nakrycie
(po uwzględnieniu pierwotnych numerów kostek z bloków bV). Łatwo sprawdzić, że bV £ bG, ponadto
,
, czyli:
Warunki twierdzenia 3.4 są więc spełnione i odpowiednia dekompozycja istnieje. Należy więc wyznaczyć tablice opisujące funkcje G i H.
W tym celu będziemy analizowali bV £ bG, oraz bU · bG i bF. Tablica funkcji G powstaje w następujący sposób. Dla każdego bloku B nakrycia bV tworzymy kostkę, której poszczególne pozycje reprezentują wartości zmiennych wejściowych funkcji G. Wartości te dla zmiennej xi są wyznaczane w zależności od przynależności bloku B do bloku nakrycia bi. Z kolei wartość funkcji G dla obliczonej w ten sposób kostki wynika z przynależności bloku B do bloku bG.
Dla funkcji F z przykładu 3.8 otrzymana w ten sposób tablica podana jest w tablicy 3.24a.
Tablica 3.24
|
a) |
|
b) |
|
|
|
|
|
|
||||||||||
|
Blok |
x2 |
x3 |
x4 |
g1 |
g2 |
|
Blok |
x1 |
g1 |
g2 |
y1 |
y2 |
||||||
|
1,2,3 |
0 |
0 |
0 |
0 |
0 |
|
1,3,7 |
0 |
0 |
0 |
1 |
1 |
||||||
|
3,7 |
0 |
0 |
1 |
0 |
0 |
|
2,3 |
1 |
0 |
0 |
1 |
0 |
||||||
|
6,7 |
1 |
0 |
1 |
1 |
0 |
|
5 |
* |
0 |
1 |
0 |
0 |
||||||
|
5 |
1 |
1 |
0 |
0 |
1 |
|
6,7 |
0 |
1 |
0 |
1 |
1 |
||||||
|
4,6 |
1 |
1 |
1 |
1 |
1 |
|
6 |
* |
1 |
* |
– |
1 |
||||||
|
1,2 |
0 |
* |
0 |
0 |
0 |
|
4,6 |
* |
1 |
1 |
0 |
1 |
||||||
|
4 |
* |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
||||||
W analogiczny sposób tworzymy tablicę funkcji H. Każdemu blokowi B z iloczynu:
przyporządkowujemy kostkę o składowych x1, g1, g2, przy czym wartości tych składowych wynikają z przynależności bloku B do bloków nakrycia b1 oraz bG. Należy więc określić kodowanie bloków
, które tu przyjmujemy następująco: 00 dla {1,2,3,7}, 01 dla {5}, 10 dla {6,7} oraz 11 dla {4,6}. Wartości funkcji H wynikają z przynależności bloków B do poszczególnych bloków z sF. Przypomnijmy, że bloki sF (por. przykład 3.8) są kodowane następująco: 4,5, jako 00; 4,6 jako 01; 2,3,7 jako 10 oraz 1,3,6,7 jako 11. W rezultacie tablica H jest taka, jak w tablicy 3.24b.
Obliczenia tablic funkcji G i H w przykładzie 3.8, jak też obliczenie bG w przykładzie 3.9 są proste i nie wymagają stosowania wszystkich, potrzebnych do tego celu procedur. W bardziej skomplikowanych przypadkach obliczenia te wymagają stosowania dodatkowych procedur, których rolę wyjaśnimy poniżej.
Przy konstrukcji tablicy funkcji G pierwszą czynnością jest wyznaczanie kostki C odpowiadającej blokowi B z nakrycia bG oraz wartości funkcji G dla tej kostki, tj. G(C). Kostkę Ci kojarzoną z Bi nazywać będziemy reprezentantem bloku Bi. W ogólnym przypadku może się zdarzyć, że dla dwóch różnych Bi, Bj, kostki Ci, Cj będą miały niepuste przecięcie, a jednocześnie odpowiadające im wartości funkcji G będą różne:
Ci Ç Cj ¹ f, G(Ci) ¹ G(Cj)
Jest to sytuacja niedopuszczalna z punktu widzenia niesprzeczności tablicy specyfikującej funkcję.
Celem niedopuszczenia do takich sprzeczności należy odpowiednio modyfikować kostki reprezentujące bloki B Î bV. Niech C = r(B) oraz niech B1, ..., Bk oznaczają bloki z bV, dla których:
B Ì B1, G(C1) ¹ G(C)
B Ì B2, G(C2) ¹ G(C)
·
·
·
B Ì Bk, G(Ck) ¹ G(C)
gdzie: C, C1, ..., Ck są reprezentantami bloków B, B1,..., Bk.
W takiej sytuacji sprzeczność w tablicy funkcji G usuniemy zastępując kostkę C kostką (lub kostkami) obliczonymi jako różnica: C – {<i>C</i><sub>1</sub>,..., <i>C<sub>k</sub></i>}. Różnicę taką najwygodniej jest obliczyć jako przecięcie C z uzupełnieniem {<i>C</i><sub>1</sub>,..., <i>C<sub>k</sub></i>}, czyli kostka zmodyfikowana:
C’ = C Ç {<i>C</i><sub>1</sub>,..., <i>C<sub>k</sub></i>}.
Rozważmy dekompozycję funkcji F z tablicy 3.25 dla U = {<i>x</i><sub>1</sub>,<i>x</i><sub>2</sub>} i V = = {<i>x</i><sub>3</sub>,<i>x</i><sub>4</sub>,<i>x</i><sub>5</sub>,<i>x</i><sub>6</sub>}. Odpowiednie nakrycie bV jest tu następujące:
Tablica 3.25
|
|
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
y1 |
y2 |
y3 |
|
1 |
* |
0 |
1 |
* |
0 |
0 |
1 |
– |
– |
|
2 |
0 |
* |
1 |
1 |
0 |
0 |
1 |
– |
– |
|
3 |
1 |
* |
* |
* |
0 |
1 |
– |
1 |
– |
|
4 |
0 |
* |
0 |
* |
* |
1 |
– |
1 |
– |
|
5 |
1 |
* |
1 |
* |
0 |
* |
– |
– |
1 |
|
6 |
* |
* |
1 |
0 |
1 |
* |
0 |
0 |
0 |
|
7 |
* |
* |
0 |
* |
0 |
0 |
– |
– |
0 |
|
8 |
1 |
1 |
* |
* |
* |
* |
0 |
– |
– |
Łatwo sprawdzić, że nakrycie:
spełnia warunki twierdzenia 3.4, zatem dekompozycja istnieje.
Dla kolejnych bloków bV, ich reprezentantów obliczamy albo wg zawartości tych bloków w blokach nakryć bi albo bezpośrednio z tablicy 3.25, korzystając z faktu, że reprezentant bloku B jest iloczynem kostek zawartych w B. Na przykład dla B1 = {7,8}, B2 = {3,4,8}, B3 = {8},
C1 = r(B1) = 0*00 Ç **** = 0*00
C2 = r(B2) = **01 Ç 0**1 Ç **** = 0*01
C3 = r(B3) = ****
C4 = r(B3) = 0**1
Pełna tablica reprezentantów podana jest w tabl. 3.26.
Tablica 3.26
|
Blok bV |
Reprezentant |
Wyjścia |
|
B1 |
0 * 0 0 |
0 0 |
|
B2 |
0 * 0 1 |
0 0 |
|
B3 |
* * * * |
0 0 |
|
B4 |
0 * * 1 |
0 0 |
|
B5 |
1 * 0 0 |
1 1 |
|
B6 |
1 * 0 1 |
0 1 |
|
B7 |
1 0 1 * |
1 0 |
|
B8 |
1 1 0 0 |
1 1 |
Skoro B1 Í {3,4,7,8}, któremu w bG został przyporządkowany kod 00, to G(0*00) = 00. Podobnie dla B2 Í {3,4,7,8} mamy G(0*01) = 00. Zatem przyjmując, że G(C3) = 00 (B3 Í {3,4,7,8}, można więc jako wartość G dla kostki C3 przyjąć kod bloku {3,4,7,8}), konflikt znajdujemy dla kostek reprezentujących bloki B5, B6, B7, B8, stąd następująca modyfikacja C3:
{(</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">****</span></span></span><span style="line-height:150%">)} – {1</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">00, 1</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">01, 101</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">, 1100} = COMPLEMENT{1</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">00, 1</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">01, 101</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">, 1100} = {0</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">***</span></span></span><span style="line-height:150%">, </span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">11</span><span style="line-height:150%"><span style="font-family:Symbol"><span style="text-transform:uppercase">*</span></span></span><span style="line-height:150%">}.
Omawiana wyżej dekompozycja, w której zbiory U i V są rozłączne, jest przypadkiem szczególnym dekompozycji, dla której założenie U Ç V = f jest nieistotne. Istotne jest jedynie założenie dotyczące sensownej liczby wejść do poszczególnych komponentów.
Niech U i V będą podzbiorami X takimi, że U È V = X. Załóżmy, że zmienne x1,...,xn są uporządkowane w taki sposób, iż U = {<i>x</i><sub>1</sub>,...,<i>x<sub>r</sub></i>} i V = {<i>x<sub>n</sub></i><sub>–<i>s</i>+1</sub>,...,<i>x<sub>n</sub></i>}.
Niech F będzie funkcją o n > 0 wejściach i m > 0 wyjściach, i niech (U,V) będzie określone jak wyżej. Zakładamy też, że F jest specyfikowana zbiorem kostek K. Niech G będzie funkcją o s wejściach i p wyjściach, natomiast H funkcją fr o r + p wejściach i m wyjściach. Parę (G,H) nazywamy dekompozycją funkcji F ze względu na (U,V), jeśli dla każdego mintermu b odpowiedniego do K, G(bV) Î {0,1}p oraz
F(b) Ê H(bU, G(bV)).
Jeśli istnieje nakrycie bG na K takie, że:
bV £ bG, oraz
bU · bG £ bF,
to F ma dekompozycję szeregową ze względu na (U,V).
Dla funkcji z tablicy 3.23 rozważmy dekompozycję nierozłączną ze zbiorami:
U = {<i>x</i><sub>1</sub>,<i>x</i><sub>4</sub>} i V = {<i>x</i><sub>2</sub>, <i>x</i><sub>3</sub>, <i>x</i><sub>4</sub>}. Mamy tu:
Do obliczenia bG zastosujemy algorytm wyznaczania klas zgodnych wg par niezgodności: (B1, B4), (B1, B6), (B1, B7), (B2, B4), (B2, B6),
(B2, B7), (B3, B6), (B4, B5), i (B5, B7). Utworzona według par niezgodnych formuła typu iloczyn sum i jej kolejne przekształcenia są następujące:
(B1 + B4) (B1 + B6 )(B1 + B7) (B2 + B4) (B2 + B6) (B2 + B7) (B3 + B6) (B4 + B5) (B5 + B7) = (B1 + B4B6B7)(B2 + B4B6B7)(B3 + B6) (B5 + B4B7) =
= B1B2B3B5 + B1B2B5B6 + B1B2B3B4B7 + B4B6B7.
Klasy zgodne uzyskamy odejmując od zbioru {<i>B</i><sub>1</sub>,...,<i>B</i><sub>7</sub>}, zbiory tych Bi, które występują w jednym składniku obliczonego wyżej wyrażenia typu „suma iloczynów”. Stąd:
{<i>B</i><sub>1</sub>,..., <i>B</i><sub>7</sub>} - {<i>B</i><sub>1</sub>, <i>B</i><sub>2</sub>, <i>B</i><sub>3</sub>, <i>B</i><sub>5 </sub>} = {<i>B</i><sub>4</sub>, <i>B</i><sub>6</sub>, <i>B</i><sub>7</sub>}
{<i>B</i><sub>1</sub>,...,<i>B</i><sub>7</sub>} - {<i>B</i><sub>1</sub>, <i>B</i><sub>2 </sub>, <i>B</i><sub>5 </sub>, <i>B</i><sub>6</sub> } = {<i>B</i><sub>3</sub>, <i>B</i><sub>4</sub>, <i>B</i><sub>7</sub>}
{<i>B</i><sub>1</sub>,...,<i>B</i><sub>7</sub>} - {<i>B</i><sub>1</sub>, <i>B</i><sub>2</sub>, <i>B</i><sub>3</sub>, <i>B</i><sub>4 </sub>, <i>B</i><sub>7</sub>} = {<i>B</i><sub>5 </sub>, <i>B</i><sub>6</sub>}
{<i>B</i><sub>1</sub>,...,<i>B</i><sub>7</sub>} - {<i>B</i><sub>4</sub>, <i>B</i><sub>6</sub>, <i>B</i><sub>7</sub>} = {<i>B</i><sub>1</sub>, <i>B</i><sub>2</sub>, <i>B</i><sub>3</sub>, <i>B</i><sub>5 </sub>}
Z powyższych klas bloków zgodnych można wyselekcjonować dwie: {<i>B</i><sub>1</sub>, <i>B</i><sub>2</sub>, <i>B</i><sub>3</sub>, <i>B</i><sub>5</sub>} oraz {<i>B</i><sub>4</sub>, <i>B</i><sub>6</sub>, <i>B</i><sub>7</sub>}, pokrywające zbiór {<i>B</i><sub>1</sub>,..., <i>B</i><sub>7</sub>}, czyli
. W tym przypadku rozwiązanie jest trywialne. Wracając do pierwotnych kostek tworzących poszczególne bloki Bi otrzymujemy:
w którym od razu określamy kodowanie bloków.
Identyczny wynik uzyskamy obliczając klasy zgodne algorytmem korzystającym z par zgodnych. Następujące pary są zgodne: (B1, B2), (B1, B3), (B1, B5), (B2, B3), (B2, B5), (B3, B4), (B3, B5), (B3, B7), (B4, B6), (B4, B7), (B5, B6), (B6, B7). Na tej podstawie wyznaczamy zbiory Sj i tworzymy kolejne listy (rodziny RKZk ) klas zgodnych (porównaj algorytm z rozdz. 1), które dla uproszczenia zapisów podawać będziemy w postaci zbiorów indeksów:
|
S1 = f |
{1} |
|
S2 = {1} |
{1, 2} |
|
S3 = {1, 2} |
{1, 2, 3} |
|
S4 = {3} |
{3, 4}, {1, 2, 3} |
|
S5 = {1, 2, 3} |
|
|
S6 = {4, 5} |
{5, 6}, {4, 6}, {1, 2, 3, 5}, {3, 4} |
|
S7 = {3, 4, 6} |
|
W obliczeniach powyższych przekreśleniem zaznaczyliśmy zbiory, które są usuwane na mocy definicji maksymalnych klas zgodnych. Dysponując nakryciem bG, łatwo już wyznaczyć tablice funkcji G i H. Podane są one odpowiednio w tablicach 3.27a i 3.27b.
Tablica 3.27
|
a) |
|
b) |
|
|
|
|
|||
|
x2 |
x3 |
x4 |
g |
|
x1 |
x4 |
g |
y1 |
y2 |
|
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
1 |
1 |
|
0 |
0 |
1 |
0 |
|
* |
0 |
1 |
0 |
0 |
|
0 |
* |
0 |
0 |
|
0 |
1 |
0 |
1 |
1 |
|
* |
1 |
1 |
1 |
|
* |
1 |
1 |
0 |
1 |
|
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
0 |
|
1 |
1 |
0 |
1 |
|
* |
1 |
0 |
1 |
1 |
|
1 |
1 |
1 |
1 |
|
|
|
|
|
|
W wielu przypadkach dekompozycja szeregowa z przecinającymi się zbiorami U i V – zwana często dekompozycją nierozłączną – jest pożyteczna. Załóżmy realizację funkcji z powyższego przykładu na komórkach FPGA o strukturze: 3 wejścia, 1 wyjście. Obliczona dekompozycja nierozłączna (rys. 3.16a) wymaga do całkowitej realizacji tej zdekomponowanej funkcji 3 komórek: jedną do funkcji G i dwie do funkcji H (po jednej na każde wyjście). Dekompozycja rozłączna o strukturze H(x1,x2,G(x3,x4)), również wymagałaby do swojej realizacji 3 komórek; niestety, taka dekompozycja nie istnieje. Istnieje natomiast dekompozycja rozłączna H(x1,G(x2,x3,x4)) – rys. 3.16b, w której funkcja G ma 2 wyjścia, i dla tego jej realizacja wymaga aż 4 komórek (dwóch dla funkcji G i dwóch dla H).
Rys. 3.16. Dekompozycja szeregowa: a) nierozłączna; b) rozłączna





