Podręcznik

Strona: SEZAM - System Edukacyjnych Zasobów Akademickich i Multimedialnych
Kurs: Dekompozycja funkcji boolowskich
Książka: Podręcznik
Wydrukowane przez użytkownika: Gość
Data: sobota, 25 października 2025, 22:26

1. Metoda klasyczna

Niech będzie dana funkcja boolowska f: {0, 1}n ® {0, 1} oraz pewien podział zmiennych X = {<i>x</i><sub>1</sub>,...,<sub> </sub><i>x<sub>n</sub></i>} na dwa rozłączne zbiory B  (bound set) i A (free set). Tablicą dekompozycji funkcji f (decomposition chart) nazywamy macierz dwuwymiarową o kolumnach etykietowanych wartościami zmiennych funkcji f ze zbioru B oraz o wierszach etykietowanych wartościami zmiennych funkcji f ze zbioru A. Elementami macierzy M są wartości, jakie przyjmuje funkcja f  na wektorach złożonych z odpowiednich etykiet i-tego wiersza i j-tej kolumny. Liczbę istotnie różnych kolumn tej macierzy ze względu na ich zawartość oznaczamy symbolem n(A|B) (column multiplicity).

Niech będzie dana funkcja boolowska f oraz podział zbioru zmien­nych wejściowych funkcji f na dwa rozłączne zbiory A i B, wówczas:

 

f(A,B) = h(A,g1(B),..., gj(B))  Û  n(A|B) £  2j

 

Schemat takiej dekompozycji jest przedstawiony na rys. 3.1.


Uzupelnij opis obrazka
 

Rys.  3.1. Schemat blokowy dekompozycji funkcjonalnej

Twierdzenie powyższe można uogólnić na przypadek zespołów funkcji. Niech będzie dana rodzina funkcji boolowskich F, wówczas:

 

F(A,B) = H(A,G(B))  dla G(B) = (g1(B),..., gj(B))   Û  n(A|B) £ 2j

 

Dla funkcji z tablicy 3.1 kolumny są adresowane trzema zmiennymi {<i>x</i><sub>1</sub>, <i>x</i><sub>2</sub>, <i>x</i><sub>3</sub>} względem których funkcja f jest symetryczna. Wiersze natomiast są adresowane zmiennymi {<i>x</i><sub>4</sub>, <i>x</i><sub>5</sub>}.

Tablica  3.1

Uzupelnij opis obrazka

 

 

 

 

 

Grupy kolumn o adresach {(001), (010), (100)} i {(110),  (101), (011)} są odpowiednio równe. Zatem istnieje dekompozycja, w której zmienne {<i>x</i><sub>1</sub>, <i>x</i><sub>2</sub>, <i>x</i><sub>3</sub>} są przeadresowywane na {<i>g</i><sub>1</sub>, <i>g</i><sub>2</sub>} (tablica 3.2a).

Wówczas funkcja f może być specyfikowana w tablicy, w której adresami kolumn są {<i>g</i><sub>1</sub>, <i>g</i><sub>2</sub>}, a wierszy odpowiednio wartości zmiennych {<i>x</i><sub>4</sub>, <i>x</i><sub>5</sub>} (patrz tablica 3.2b). Tablice te są jednocześnie tablicami prawdy funkcji reprezentujących składowe dekompozycji, tzn. bloki G i H.

Tablica  3.2

Uzupelnij opis obrazka

Niestety postępowanie takie w ogólnym przypadku funkcji nie w pełni określonych nie może być już tak bezpośrednie. Przykład takiej bardziej skomplikowanej sytuacji omówimy dokonując dekompozycji funkcji podanej w tabl. 3.4.

Tablica  3.3

Uzupelnij opis obrazka

Otóż w tym przypadku, ze względu na nieokreśloności funkcji, nie można bezpośrednio podjąć decyzji, które kolumny w tablicy dekompozycji są takie same. Wynika to z faktu, że kreskom reprezentującym punkty nieokreśloności funkcji można przypisać wartość albo 0 albo 1, w rezultacie zaliczając odpowiednią kolumnę do – być może – innego zbioru kolumn identycznych. Dlatego w tym przypadku wygodnie będzie wszystkie kolumny, dla których w poszczególnych wierszach tablicy dekompozycji nie występują sprzeczne wartości (0 i 1), nazywać kolumnami zgodnymi. Zgodne są na przykład kolumny K0  i K3, gdyż w ich poszczególnych wierszach, jako wartości funkcji, występują wyłącznie: 1 (w kolumnie K0) i 1 (w kolumnie K3), oraz odpowiednio, – i –; – i 0; wreszcie 0 i –. Natomiast kolumny K0 i K1 są niezgodne, gdyż w wierszu oznaczonym 11 mają wartości funkcji odpowiednio 0 i 1. Nietrudno zauważyć, że tak definiowane pary kolumn zgodnych tworzą relację zgodności, której własności: zwrotność, symetryczność i nieprzechodniość uprawniają do grupowania kolumn zgodnych w maksymalne klasy zgod­ności.  Wypisując więc dla funkcji z tabl. 3.4 wszy­stkie pary zgodne: {<i>K</i><sub>0</sub>, <i>K</i><sub>3</sub>}, {<i>K</i><sub>0</sub>, <i>K</i><sub>4</sub>}, {<i>K</i><sub>0</sub>, <i>K</i><sub>6</sub>}, {<i>K</i><sub>1</sub>, <i>K</i><sub>3</sub>}, {<i>K</i><sub>1</sub>, <i>K</i><sub>4</sub>}, {<i>K</i><sub>1</sub>, <i>K</i><sub>5</sub>}, {<i>K</i><sub>1</sub>, <i>K</i><sub>6</sub>}, {<i>K</i><sub>2</sub>, <i>K</i><sub>5</sub>}, {<i>K</i><sub>2</sub>, <i>K</i><sub>7</sub>}, {<i>K</i><sub>3</sub>, <i>K</i><sub>4</sub>}, {<i>K</i><sub>3</sub>, <i>K</i><sub>6</sub>}, {<i>K</i><sub>4</sub>, <i>K</i><sub>5</sub>}, {<i>K</i><sub>4</sub>, <i>K</i><sub>6</sub>}, {<i>K</i><sub>5</sub>, <i>K</i><sub>7</sub>}, łatwo możemy obliczyć – stosując algorytm omówiony w rozdz. 1 – maksymalne klasy zgodności:

{<i>K</i><sub>0</sub>, <i>K</i><sub>3</sub>, <i>K</i><sub>4</sub>, <i>K</i><sub>6</sub>},

{<i>K</i><sub>1</sub>, <i>K</i><sub>3</sub>, <i>K</i><sub>4</sub>, <i>K</i><sub>6</sub>},

{<i>K</i><sub>1</sub>, <i>K</i><sub>4</sub>, <i>K</i><sub>5</sub>},
{<i>K</i><sub>2</sub>, <i>K</i><sub>5</sub>, <i>K</i><sub>7</sub>}.

Ze zrozumiałych względów niektóre kolumny występują w więcej niż jednej klasie zgodności. Musimy więc podjąć decyzję o wyborze rozłącznych klas zgodności (nie muszą być w tym przypadku maksymalne) pokrywających wszystkie kolumny tablicy dekompozycji, tzn. każda kolumna musi być reprezentowana w jednej klasie zgodności. Jedno z możliwych rozwiązań jest:{<i>K</i><sub>0</sub>, <i>K</i><sub>3</sub>, <i>K</i><sub>4</sub>, <i>K</i><sub>6</sub>}, {<i>K</i><sub>2</sub>, <i>K</i><sub>5</sub>}, {<i>K</i><sub>2</sub>, <i>K</i><sub>7</sub>}.

Po połączeniu kolumn należących do jednej klasy w jedną, uzyskuje się tablice funkcji G i H oraz wyrażenia boolowskie tych funkcji:  

 

g_1=\bar{c}d\bar{e}+cde

g_2=\bar{c}d\bar{e}+ce+\bar{d}e

h=\bar{a}{\bar{g}}_2+bg_2+ag_1

 

Funkcjom G i H odpowiada schemat blokowy oraz logiczny przedstawiony odpowiednio na rys. 3.2a oraz 3.2b.
 

a) b)

Rys.  3.2. Schemat blokowy (a) i logiczny (b) funkcji GiH

 

Przedstawiona wyżej metoda, jakkolwiek łatwa do interpretacji graficznej, w oblicze­niach analitycznych bardziej skomplikowanych przykładów staje się zbyt pracochłonna. Na przykład dla funkcji TL27 (patrz tab. 2.28) odpowiednia tablica dekompozycji – uzyskana dla reduktu 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>} – jest przedstawiona w tab. 3.4.

Tablicę tę skonstruowano przy założeniu, że zbiory zmiennych bezpośrednich oraz pośrednich są odpowiednio A = {<i>x</i><sub>7</sub>,<i> x</i><sub>8</sub>,<i> x</i><sub>9</sub>},  B = {<i>x</i><sub>3</sub>,<i> x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>10</sub>}. Spostrzeżenie, że w tablicy tej – w celu obliczenia składowych G i H dekompozycji – należy skleić” kolumny oznaczone wektorami: 0000, 0011, 0100, 0101, 1000, 1001, 1010, 1011, 1111 oraz 0010, 0110, 0111, 1100, 1101, 1110, nie jest zadaniem łatwym. Spostrzeżenie to prowadzi do wniosku, że funkcję TL27 można zrealizować, jak na rys. 3.3.

 

Rys.  3.3. Realizacja funkcji TL27

Tablica  3.4

Uzupelnij opis obrazka Uzupelnij opis obrazka

 

 

2. Dekompozycja funkcjonalna metodą rachunku podziałów

Dekompozycja funkcjonalna metodą rachunku podziałów

2.1. Dekompozycja funkcjonalna – model podstawowy

W tym punkcie zajmiemy się analitycznym opisem dekompozycji funkcji boolowskich. Do tego celu posłużymy się omówionym w rozdz. 1 rachunkiem podziałów. W szczególności wyprowadzimy warunki dekompozycji dla funkcji boolowskich opisanych podziałami P1, P2,..., PnPf określonymi na zbiorze K ponumerowanych wektorów tablicy prawdy funkcji f.

Na początek zajmiemy się poszukiwaniem realizacji f = h(U,g(V,W)), gdzie:

U=\left\{x_{i_1},\ldots,x_{i_r}\right\},\ \ V=\left\{x_{i_{r+1}},\ldots,x_{i_t}\right\},\ \ w=\left\{x_{j_1},\ldots,x_{j_t}\right\}\

a ponadto

W\subseteq\ U,\ U\cup\ V\subseteq\ X,\ U\cap\ V=\Phi  oraz \ \ P\left(x_{i_1}\right)\cdot\ P\left(x_{i_2}\right)\cdot\cdot\cdot\ P\left(x_{i_t}\right)\le\ P_f

Sens powyższych ustaleń wynika z faktu, że dla danego U zbiór V może być wyznaczony bezpośrednio z reprezentacji argumentowej RAf ograniczonej do par p, q: {p,q} \subseteqBLOK(PU), gdzie P_U=P_{i_1}\ldots\ P_{i_r}

Oznaczając tak zdefiniowaną reprezentację przez RAg, łatwo stwierdzić, że V jest rozwiązaniem równania RAg = 1. Ponadto przez PV, PW będziemy oznaczać podziały na K określone zbiorami V  i W, tzn.:

P_V=P\left(x_{i_{r+1}}\right)\cdot\ P\left(x_{i_{r+2}}\right)\cdot\ldots\cdot\ P\left(x_{i_t}\right)

P_W=P\left(x_{j_1}\right)\cdot\ P\left(x_{j_2}\right)\cdot\ldots\cdot\ P\left(x_{i_t}\right)

 Jeżeli Bn ®{0,1,–} oraz X = U  \cup  V jest zbiorem argumentów funkcji  f, to:

f = h(U, g (V, W))

wtedy i tylko wtedy, gdy istnieje dwublokowy podział Pg  ³  PV · PW  taki, że:

PU · Pg  \le Pf,

gdzie g: t-r+p ® {0,1}, przy czym g (k) = c, natomiast k Î Kc Î {0,1}, jeżeli \Pi_g^c.

W szczególności f = h(U, g (V)) wtedy i tylko wtedy, gdy istnieje Pg ³ PV, dla którego PU · Pg \le  Pf (jest to tzw. dekompozycja rozłączna [3.15].

Uzasadnienie jest natychmiastowe, jeżeli zauważymy, że dwublokowy podział Pg ³ PV,W jednoznacznie reprezentuje funkcję g, natomiast PU · Pg funkcję h. Otóż każdy blok H  podziału PV,W jest wzajemnie jednoznaczną reprezentacją wektora o składowych \left(x_{j_1},\ldots,x_{j_p},x_{i_{r+1}},\ldots,x_{i_t}\right)gdyż skoro  H \in PV · PW, to dla każdego Pa spośród P_{j_1}\ldots\ P_{j_p},P_{i_{r+1}}\ldots\ P_{i_t} blok należy do ustalonego bloku  podziału Pa. Zapisując ten fakt w formie przyporządkowania:

H ® wektor o składowych binarnych c \in {0,1}

 

i uwzględniając, że blokom tym są w podziale Pg przyporządkowane:

0,\ gdy\ H\in\Pi_g^0

1,\ gdy\ H\in\Pi_g^1

uzyskujemy naturalną reprezentację g: t-r+p ® {0,1}. Z kolei, skoro PU · Pg \le Pf, to P_{i_1}\ldots\ P_{i_r}\cdot\ P\left(g\right)\le\ P\left(f\right) i tym samym f=h\left(x_{i_1},\ldots,x_{i_r},g\right)\ \
Natomiast wartości h wynikają (analogicznie jak poprzednio) z przynależności bloków PU · Pg do bloków podziału Pf.

Jak wynika z twierdzenia 3.2 najistotniejsze w obliczeniu dekompozycji funkcji boolowskiej jest obliczenie podziału PG.  Algorytm obliczania PG można sprowadzić do algorytmu obliczania MKZ. Oznaczmy bloki podziału PV: PV =(B1,…,Bi,…,Bj,…,BN) i przyjmijmy przez poddział gij rozumieć podział uzyskany z PV przez sklejenie Bi oraz Bj w jeden blok i pozostawienie pozostałych bloków bez zmiany, tzn.: gij =(B1,…,BiBj,…,BN).

Dwa bloki Bi i Bj podziału PV są zgodne, jeśli podział  gij spełnia warunek twierdzenia o dekompozycji: PU · gij £ PF. W przeciwnym przypadku Bi oraz Bj  są niezgodne.

W ten sposób obliczanie ΠG można sprowadzić do algorytmu obliczania MKZ. Wystarczy w tym celu dla obliczonych par zgodnych Bi, Bj (albo sprzecznych) obliczyć rodzinę maksymalnych zbiorów zgodnych bloków B, a następnie stosując algorytm wyznaczania minimalnego pokrycia skojarzyć zbiory bloków minimalnego pokrycia z blokami podziału ΠG.

Sposób postępowania wyjaśnimy na przykładzie funkcji podanej w tablicy 3.5.
Tablica  3.5

 

x1

x2

x3

x4

x5

f

1

0

0

0

0

0

0

2

0

1

0

1

1

0

3

0

0

1

0

1

0

4

0

1

1

1

1

0

5

0

0

1

1

0

0

6

0

1

0

0

1

1

7

0

0

1

0

0

1

8

0

1

1

1

0

1

9

1

0

1

0

1

1

10

1

1

0

0

1

1

11

1

0

0

0

1

1

 

Zakładając dekompozycję dla zbiorów: U = {<i>x</i><sub>1</sub>,x<sub>2</sub>}, V = {<i>x</i><sub>3</sub>,<i>x</i><sub>4</sub>,<i>x</i><sub>5</sub>} podziały PU  = P3P4 i PV = P1P2P5 można wyznaczyć bezpośrednio z podziałów:

P_1=\left\{\overline{1,2,3,4,5,6,7,8};\overline{9,10,11}\right\}

P_2=\left\{\overline{1,3,5,7,9,11};\overline{2,4,6,8,10}\right\}

P_3=\left\{\overline{1,2,6,10,11};\overline{3,4,5,7,8,9}\right\}

P_4=\left\{\overline{1,3,6,7,9,10,11};\overline{2,4,5,8}\right\}

P_5=\left\{\overline{1,5,7,8};\overline{2,3,4,6,9,10,11}\right\}

P_f=\left\{\overline{1,2,3,4,5};\overline{6,7,8,9,10,11}\right\}

Na tej podstawie obliczamy:

P_U=P_1•P2=(\overline{1,3,5,7};\overline{2,4,6,8};\overline{9,11};\overline{10})

P_V=P_3•P4•P5=(\overline{1};\overline{2};\overline{3,9};\overline{4;5,8};\overline{6,10,11};\overline{7})

Numerujemy bloki PV:

PV = (B1, B2, B3, B4 , B5, B6 , B7)  

\gamma_{12}=\left(\overline{1,2};\overline{3,9};\overline{4};\overline{5,8};\overline{6,10,11};\overline{7}\right)

\gamma_{57}=\left(\overline{1};\overline{2};\overline{3,9};\overline{4};\overline{5,7,8};\overline{6,10,11}\right)

PU · g12  \leqPf

PU · g57  \nleq Pf

czyli para (B1, B2) jest zgodna, natomiast para (B5, B7) jest sprzeczna. 

Ale do wyznaczenia zgodnych (lub sprzecznych) par (Bi, Bj) niekoniecznie musimy się posługiwać skomplikowaną  nierównością PU · gij £ PF. Wystarczy w tym celu obliczyć iloczyn zbioru Bi È Bj  z blokami podziału PU i sprawdzić, czy każdy „niepusty iloczyn” jest zawarty w jakimś bloku PF.

Do obliczenia PG zastosujemy algorytm wyznaczania klas zgodnych wg par niezgodności: (B1, B7), (B2, B5), (B2, B6), (B3, B7), (B4, B5), (B4, B6), i (B5, B7).  Utworzona według par niezgodnych formuła typu iloczyn sum i jej kolejne przekształcenia są następujące:

(B1 + B7) (B2 + B5) (B2 + B6) (B3 + B7) (B4 + B5) (B4 + B6) (B5B7) =

= (B7 + B1B3B5) (B2B4 + B5B6) = B2B4B7 + B5B6B7 + B1B2B3B4 B5 +  B1B3B5B6

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:

B1B3B5B6 + B1B2B3B4 + B6B7 + B2B4B7.

{<i>B</i><sub>1</sub>,..., <i>B</i><sub>7</sub>} - {<i>B</i><sub>2</sub>, <i>B</i><sub>4</sub>, <i>B</i><sub>7 </sub>} = { <i>B</i><sub>1</sub>, <i>B</i><sub>3</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>5 </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>4</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>5</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>3</sub>, <i>B</i><sub>5</sub>, <i>B</i><sub>6</sub>} = {<i>B</i><sub>2</sub>, <i>B</i><sub>4</sub>, <i>B</i><sub>7 </sub>}

Z powyższych klas bloków zgodnych można wyselekcjonować dwie: { <i>B</i><sub>1</sub>, <i>B</i><sub>3</sub>, <i>B</i><sub>5</sub>, <i>B</i><sub>6</sub>} oraz{<i>B</i><sub>2</sub>, <i>B</i><sub>4</sub>, <i>B</i><sub>7 </sub>}, pokrywające zbiór {<i>B</i><sub>1</sub>,..., <i>B</i><sub>7</sub>}, czyli: 

\Pi_g=\left\{\overline{B_1,B_3,B_5,B_6};\overline{B_2,B_4,B_7}\right\}.

W tym przypadku rozwiązanie jest trywialne. Wracając do pierwotnych kostek tworzących poszczególne bloki Bi otrzymujemy:

\Pi_g=\left\{\overline{1,3,5,6,8,10,11};\overline{2,4,7}\right\}

w którym od razu określamy kodowanie bloków.

Obliczanie podziału PG można uprościć rezygnując z możliwości uzyskania rozwiązania optymalnego tj. podziału PG z najmniejszą liczbą bloków, co w realizacji odpowiada najmniejszej liczbie wyjść z komponentu G. Metoda prowadząca do takiego rozwiązania polega na zastosowaniu podziału ilorazowego PU |PU·PF. Podział ilorazowy podaje informację, które bloki podziału PV należy umieścić w różnych blokach tworzonego podziału PG. Dwa bloki Bi, Bj, podziału PV należy umieścić w różnych blokach PG wtedy, gdy ich przecięcia ze zbiorem Bu podziału  PU należą do różnych elementów Cs, Ct, odpowiedniego bloku podziału PU |PU·PF. Taką metodę konstruowania podziału PG nazywać będziemy metodą rozdziału elementów podziału ilorazowego PU |PU·PF. Na przykład dla podziałów  PU, Pf,  PV z przykładu 3.1:

P_U=P_1•P2=(\overline{1,3,5,7};\overline{2,4,6,8};\overline{9,11};\overline{10})

P_f=\left\{\overline{1,2,3,4,5};\overline{6,7,8,9,10,11}\right\}

P_V=P_3•P4•P5=(B1,B2,B3,B4,B5,B6,B7)=(\overline{1};\overline{2};\overline{3,9};\overline{4};\overline{5,8};\overline{6,10,11};\overline{7})

podział ilorazowy jest następujący: P_U|P_U•PF=(\overline{(1,3,5)(7)};\overline{(2,4)(6,8)};\overline{(9,11)};\overline{(10)})

 

Rozważmy bloki B1 i B7 podziału PV. Ich przecięcia z blokiem B_U=\overline{1,3,5,7} , czyli 1 i 7 należą odpowiednio do Cs =  (1,3,5) oraz  Ct = (7), czyli dwóch różnych elementów PU |PU·Pf. Zatem konstruując podział PG należy B1 i B7 umieścić w różnych blokach PG.

Metodę rozdziału przy tworzeniu podziału PG dla funkcji z przykładu 3.1 wyjaśnimy posługując się interpretacją graficzną przedstawioną na rys. 3.4.

Uzupelnij opis obrazka

Rys.  3.4. Konstrukcja podziału Pg

Z po­działu ilorazowego wnioskujemy, że PG może być dwublokowy i musi rozdzielać elementy (1,3,5) od (7), (2,4) od (6,8) itd.  Dlatego (zaczynając od pierwszego bloku podziału ilorazowego) bloki PV zawierające elementy 1; 3,9 oraz 5,8 umieszczamy w pierwszym bloku PG – na rys 3.3 z lewej strony pionowej kreski, natomiast blok zawierający 7 musimy umieścić w drugim –  po prawej stronie pionowej kreski. W drugim bloku podziału ilorazowego należy rozdzielić (2,4) od (6,8). Ale element 8 został już wpisany do pierwszego bloku, zatem również do pierwszego bloku należy wpisać blok PV = (6,10,11), natomiast do drugiego należy wpisać (2) i (4). W rezultacie uzyskujemy identyczny jak poprzednio.

 

\Pi_g=\left\{\overline{1,3,5,6,8,10,11};\overline{2,4,7}\right\}

Skuteczność wprowadzonego aparatu pokażemy na przykładzie funkcji TL27  (podroz. 2.6 – tab. 2.28 ).

Dla tej funkcji obliczyliśmy jeden z minimalnych zbiorów argumentów: X = {<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>}. Korzystając z tej informacji załóżmy poszukiwanie dekompozycji dla zbiorów U = {<i>x</i><sub>7</sub>, <i>x</i><sub>8</sub>,<i> x</i><sub>9</sub>} oraz V = {<i>x</i><sub>3</sub>, <i>x</i><sub>5</sub>,<i> x</i><sub>6</sub>,<i> x</i><sub>10</sub>}. Bezpośrednio z tablicy 2.28 zapisujemy podziały Pi utworzone na zbiorze K ponumerowanych wektorów  K = {1, 2, …, 25}:

P_1=\left\{\overline{1,3,6,8,9,10,11,13,14,15,19,21,24,25};\overline{2,4,5,7,12,16,17,18,20,22,23}\right\}

P_2=\left\{\overline{1,2,4,11,15,19,21,23};\overline{3,5,6,7,8,9,10,12,13,14,16,17,18,20,22,24,25}\right\}

P_3=\left\{\overline{3,5,6,8,9,11,12,13,14,20,25};\overline{1,2,4,7,10,15,16,17,18,19,21,22,23,24}\right\}

P_4=\left\{\overline{1,2,3,5,6,7,8,11,13,14,15,19,21,23,24,25};\overline{4,9,10,12,16,17,18,20,22}\right\}

P_5=\left\{\overline{2,3,5,6,9,11,14,15,16,19,21,24};\overline{1,4,7,8,10,12,13,17,18,20,22,23,25}\right\}

P_6=\left\{\overline{4,7,9,13,15,17,19,20,21,22,24};\overline{1,2,3,5,6,8,10,11,12,14,16,18,23,25}\right\}

P_7=\left\{\overline{2,5,6,7,8,9,11,12,13,15,16,19,20,22,24};\overline{1,3,4,10,14,17,18,21,23,25}\right\}

P_8=\left\{\overline{1,4,5,8,9,10,12,13,16,17,19,22,25};\overline{2,3,6,7,11,14,15,18,20,21,23,24}\right\}

P_9=\left\{\overline{2,8,11,13,16,17,19,23,25};\overline{1,3,4,5,6,7,9,10,12,14,15,18,20,21,22,24}\right\}

P_{10}=\left\{\overline{1,2,3,6,7,8,9,11,13,15,19,22,24,25};\overline{4,5,10,12,14,16,17,18,20,21,23}\right\}

P_f=\left\{\overline{1,2,\ldots,9};\overline{10,\ldots,25}\right\}

 

Kolejne obliczenia uzyskane bezpośrednio z podziałów Pi są następujące:

P_U=P_7•P8•P9=(\overline{1,4,10};\overline{2,11};\overline{3,14,18,21};\overline{5,9,12,22};\overline{6,7,15,20,24};\overline{8,13,16,19};\overline{17,25};\overline{23})

P_V=P_3•P5•P6•P10=(\overline{1};\overline{2};\overline{3,6,11};\overline{4,17};\overline{5,14};\overline{7,22};\overline{8,25};\overline{9};\overline{10,18,23};\overline{12};\overline{13};\overline{15,19,24};\overline{16};\overline{20};\overline{21})

 

Dla wygody dalszych obliczeń podział PU zapiszemy w postaci podziału ilorazowego:

P_U|P_f=\overline{\left(1,4\right)\left(10\right)};\overline{\left(2\right)\left(11\right)};\overline{\left(3\right)\left(14,18,21\right)};\overline{\left(5,9\right)\left(12,22\right)};\overline{\left(6,7\right)\left(15,20,24\right)};\overline{\left(8\right)\left(13,16,19\right)};\overline{\left(17\right)\left(25\right)};\overline{\left(23\right)}

 

Najważniejszą czynnością jest obliczenie podziału Pg . Aby to zrealizować wystarczy zauważyć, że:

  1. podział Pg  musi rozdzielać elementy 1 i 4 od elementu 10; 2 od 11; 3 od 14 i 18 i 21 itp. Wynika to z podziału ilorazowego,
  2. podział Pg  musi być zbudowany z bloków podziału PV.

Zatem, jeśli zaliczymy bloki \overline {1} oraz  \overline {4,17}  do pierwszego bloku Pg, to blok  \overline {10,18,23}  musimy zaliczyć do drugiego bloku Pg (ponieważ zawiera element 10) itp. Reszta obliczeń jest pokazana na rys. 3.5.

 

Pg

Blok pierwszy

Blok drugi

\overline {1}  \overline {4,17}

\overline {10,18,23}

\overline {3,6,11}

\overline {2}   \overline {5,14}   \overline {21}

\overline {12}  \overline {7,22}

\overline {9}

\overline {8,25}

\overline {15,19,24}  \overline {20}

 

\overline {13}  \overline {16}

 

Rys.  3.5. Konstrukcja podziału Pg

Na tej podstawie stwierdzamy, że:

\Pi _{g} =\left\{\overline{1,3,4,6,7,8,11,12,17,22,25} ;\overline{2,5,9,10,13,14,15,16,18,19,20,21,23,24}\right\}

Zastosowanie omówionych wyżej algorytmów dekompozycji do syntezy logicznej modułów wielowyjściowych (np. matryce PLA, moduły PLD, pamięci ROM) wymaga przede wszystkim uogólnienia podstawowego twierdzenia o dekompo­zycji na przypadek układów wielowyjściowych. Łączna (jednoczesna) dekompozy­cja wszystkich funkcji wchodzących w skład układu realizo­wanego z zastosowaniem modułu wielo­wyjściowego poz­wala na wyodrębnienie wielowyjściowych podukładów H, G, których tablice prawdy stanowią bądź bezpośrednią informację, określającą na przy­kład zawartość pamięci ROM lub komórki typu LUT, bądź też są punktem wyjścia do dal­szych etapów syntezy (np. minimalizacja układów wielowyjściowych) w przypadku matryc PLA.

Łatwo sprawdzić, że PV × Pg £ Pf. Zatem dekompozycja istnieje. Dalej, ko­rzystając z podziałów PV  i  Pg oblicza­my tablicę funkcji g (tab. 3.7). Obliczenia interpretujemy następująco. Dla przykładu: blok \overline {1} jest zawarty w drugim bloku podziałów P1, P5, P6, natomiast w pierwszym bloku podziału P10 oraz w pierwszym bloku podziału Pg. Dlatego odpowiadający mu wektor jest 1110, ma wartość funkcji g = 0 (patrz tab. 3.6).

Podobnie postępujemy dla funkcji h (tab. 3.7), ale tu korzystamy z bloków ilo­czynu podziałów PU × Pg oraz ich przynależności do podziałów  P7, P8, P9, Pg oraz P.

Tablica  3.6

Tablica  3.7

Uzupelnij opis obrazka Uzupelnij opis obrazka

 

2.2. Dekompozycja zespołów funkcji boolowskich

Ze względu na różne zastosowanie przedstawionego wyżej schematu, blok G będziemy nazywać albo układem składowych dekompozycji gj , albo układem modyfikacji adresu. Pierwsza nazwa jest analogią do dekompozycji pojedynczej funkcji boolowskiej. Druga z kolei wiąże się z zastosowaniem dekompozy­cji w projektowaniu układów adresowania pamięci ROM, dla których to układów ograniczenia w liczbie wejść adresowych zmuszają do procesu modyfikacji adresu o n bitach na adres t-bitowy.

Oznaczmy jak poprzednio wektory z n liczbami natu­ralnymi K = {1,...,</span></span></span><span style="line-height:150%"><span style="font-family:Symbol"><span style="color:black"><span style="letter-spacing:-.15pt">÷ </span></span></span></span><b><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><i>B</i> </span></span></span></b><sup><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><i>n</i></span></span></span></sup><span style="line-height:150%"><span style="font-family:Symbol"><span style="color:black"><span style="letter-spacing:-.15pt">÷</span></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, a przez PF podział wyjściowy funkcji F skonstruowany w następujący sposób:

(st) Π\mathcal{B_{P_{F}}} Û F(s) = F(t)

Inaczej mówiąc, wektory s i t należą do jednego bloku B podziału PF tylko wtedy, gdy odwzorowanie F przyporząd­kowuje tym wektorom taki sam wektor z {0,1}m. Na przykład, dla odwzorowania F określonego jak w tabl. 3.8 podział PF (zapisany w postaci podziału na zbiorze K = {1,2,...,15}) będzie miał postać:

P_F=\left(\overline{1,9,14};\overline{5,7,8,13};\overline{2,6,12};\overline{4,11};\overline{3,10,15}\right)

 

Tablica  3.8

 

x1  x2  x3  x4  x5

y1  y2  y3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0   0   0   0   0

0   0   0   1   1

0   0   0   1   0

0   1   1   0   0

0   1   1   0   1

0   1   1   1   0

0   1   0   0   0

1   1   0   0   0

1   1   0   1   0

1   1   1   0   0

1   1   1   1   1

1   1   1   1   0

1   0   0   0   1

1   0   0   1   1

1   0   0   1   0

0   0   0

0   1   0

1   0   0

0   1   1

0   0   1

0   1   0

0   0   1

0   0   1

0   0   0

1   0   0

0   1   1

0   1   0

0   0   1

0   0   0

1   0   0

Warunek istnienia dekompozycji o schemacie blokowym jak na rys. 3.6, gdzie U, V są rozłącznymi podzbiorami zbioru X funkcji F(X) oraz W Í U formułuje następujące twierdzenie.

Funkcja Fn ®{0,1,–}m  ma dekom­pozycję (rys. 3.6):

F = (UG (V))

wtedy i tylko wtedy, gdy istnieje podział PG ³ PVÈW  taki, że:

PU × PG £ PF

 

Uzupelnij opis obrazka

 

Dekompozycja wg twierdzenia 3.3

 Jak widać zastosowanie rachunku podziałów okazało się wyjątkowo wygodne, gdyż odpowiednie twierdzenie o dekompozycji układów wielowyjścio­wych traktuje zespół funkcji jako pojedynczy obiekt, podlegający zasadom dekompozycji identycznie jak pojedyncza funkcja boolowska.

Dla układu funkcji F z tabl. 3.9 przyjmijmy U = {<i>x</i><sub>1</sub>, </span></span><i><span style="line-height:150%"><span style="letter-spacing:-.15pt">x</span></span></i><sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">3</span></span></sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">, </span></span><i><span style="line-height:150%"><span style="letter-spacing:-.15pt">x</span></span></i><sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">4</span></span></sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">} oraz z V = {<i>x</i><sub>2</sub>,<b> </b></span></span><i><span style="line-height:150%"><span style="letter-spacing:-.15pt">x</span></span></i><sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">5</span></span></sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">} oraz W = f.

Tablica  3.9

 

x1  x3  x4   g

y1  y2  y3

1

2

3

4

5

6

7

8,13

9,14

10

11

12

15

0   0   0   0

0   0   1   1

0   0   1  0

0   1   0   1

0   1   0   0

0   1   1   1

0   0   0   1

1   0   0  1

1   0   1   1

1   1   0   1

1   1   1   0

1   1   1   1

1   0   1   0

0   0   0

0   1   0

1   0   0

0   1   1

0   0   1

0   1   0

0   0   1

0   0   1

0   0   0

1   0   0

0   1   1

0   1   0

1   0   0

Podział PU = P1 × P3 × P4 (Pi = P(xi)), PV = P2 × P5. Zapisując PU  w postaci podziału ilorazowego mamy, że:

P_{U} |P_{F} =\overline{( 1)( 7)} ;\overline{( 8)( 13)} ;\overline{( 2)( 3)} ;\overline{( 9,14)( 15)} ;\overline{( 4)( 5)} ;\overline{( 10)} ;\overline{( 6)} ;\overline{( 11)( 12)}

P_{V} =\left\{\overline{1,3,15} ;\overline{2,13,14} ;\overline{4,6,7,8,9,1012} ;\overline{5,11}\right\}

Blokom H1,...,H4 podziału PV odpowiadają wektory D(H1) = 00, D(H2) = 01, (H3) = 10, D(H4) = 11. W celu wyznaczenia dwublokowego podziału PG ³ PV spełniającego warunek dekompozycji (3-1) zauważmy, że jeśli blok H1 przeznaczymy do pierwszego bloku podziału PG, to blok H3 należy przeznaczyć do drugiego bloku tego podziału. Stwierdzenie to jest wynikiem faktu, że H1 zawiera wektor 1, H3 zawiera wektor 7, a ponadto wektory te należą do różnych bloków podziału wyjściowego PF. Fakt ten jest zresztą zaznaczony w po­dziale ilorazowym PU½PFMamy więc \Pi ^{0}_{G} =\{1,3,15\}, więc \Pi ^{1}_{G} =\{4,6,7,8,9,10,12\} . Następnie sprawdzamy kolej­ną parę wektorów z PU½PF, czyli 2 i 3. Skoro 3 jest w \Pi ^{0}_{G} , to \Pi ^{1}_{G} =\Pi ^{1}_{G} \cup \{2,3,14\} . Kolejna para (9,14) i (15) należy już do różnych bloków PG, a więc sprawdzamy 4 i 5. Stąd:

\Pi _{G} =\left(\overline{1,3,5,11,15} ;\overline{2,4,6,7,8,9,10,12,13,14}\right)

Łatwo stwierdzić, że funkcja g przyporządkowuje wek­torowi (x2, x5) = (0,0) wartość 0, i analogicznie g(0,1) = 1, g(1,0) = 1, g(1,1) = 0. Ostatecznie g = x2 Å x5. W rezultacie, dla układu y1y2y3 funkcji z tabl. 3.9 danego odwzorowaniem F : (y1, y2, y3) = F(x1,...,x5) uzys­kaliśmy dekompozycję: F = H(x1, x3, x4g(x2 Å x5)).

Tablicę prawdy funkcji H można wyznaczyć na pod­stawie przynależności bloków iloczynu P1 × P3 × P4 × PG do bloków podziałów P1, P3, P4, PG oraz PF. Odpowiednie obliczenia podane są w tabl. 3.10.

Tablica  3.10

(2)

(9,14)

(3,15)

\overline{2}; \begin{array}{{>{\displaystyle}l}} \overline{8,9,10,12}\\ \overline{13,14} \end{array} \begin{array}{{>{\displaystyle}l}} \overline{1,3}\\ \overline{15} \end{array}
\overline{4,6,7};   \overline{5}
    \overline{11}

 

Z kolei dla U = {</span></span><i><span style="line-height:150%"><span style="letter-spacing:-.15pt">x</span></span></i><sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">3</span></span></sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">, </span></span><i><span style="line-height:150%"><span style="letter-spacing:-.15pt">x</span></span></i><sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">4</span></span></sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">} oraz V = {<i>x</i><sub>1</sub>, <i>x</i><sub>2</sub>, </span></span><i><span style="line-height:150%"><span style="letter-spacing:-.15pt">x</span></span></i><sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">5</span></span></sub><span style="line-height:150%"><span style="letter-spacing:-.15pt">}, podział PU = P3 × P4PV = P1 × P× P5,  a więc:

P_U=\left(\overline{1,7,8,13};\overline{2,3,9,14,15};\overline{4,5,10};\overline{5,6,11,12}\right)

P_F=\left(\overline{1,9,14};\overline{5,7,8,13};\overline{2,6,12};\overline{4,11};\overline{3,10,15}\right)

P_U|P_F=\overline{\left(1\right)\left(7,8,13\right)};\overline{\left(2\right)\left(9,14\right)\left(3,15\right)};\overline{\left(4\right)\left(5\right)\left(10\right)};\overline{\left(11\right)\left(6,12\right)}

P_V=\left(\overline{1,3};\overline{2};\overline{4,6,7};\overline{5};\overline{8,9,10,12};\overline{11};\overline{13,14};\overline{15}\right)

gdzie bloki PV  są oznaczone kolejno B1, B2,..., B8.

Z podziału ilorazowego P| PF wnioskujemy, że odpowiedni PG powinien mieć co najmniej 3 bloki. Wynika to z faktu, że elementy (2), (9,14) i (3,15) muszą należeć do trzech różnych bloków PG (to samo dotyczy (4), (5) i (10)). Ponadto pamiętamy, że  P³ PV. Zatem wprowa­dzenie bloków z  PV do tworzonego PG powinno przebiegać według schematu pokazanego w tablicy 3.10. Stąd:

\Pi_G=\left(\overline{2,4,6,7};\overline{8,9,10,12,13,14};\overline{1,3,5,11,15}\right)

Przyjmując, że kodowanie bloków Pjest: pierwszy blok – 01, drugi blok – 10, trzeci blok – 00  i uwzględniając, iż kolejnym blokom z podziału PV  odpowiadają wektory (zmienne  x1, x2, x5) odpowiednio: B1 = 000, B2 = 001, B3 = 010, B4 = 011, B5 = 110, B6 = 111, B7 = 101 oraz B8 = 100, wyzna­czamy tablicę prawdy funkcji G (tab. 3.11).

Tablica  3.11

 

x1  x2  x5

g1  g2

\overline {1,3}

\overline {2}

\overline {4,6,7}

\overline {5}

\overline {8,9,10,12}

\overline {11}

\overline {13,14}

\overline{15}

0   0   0

0   0   1

0   1   0

0   1   1

1   1   0

1   1   1

1   0  1

1   0   0

0   0

0   1

0   1

0   0

1   0

0   0

1   0

0   0

 

Podobnie, po obliczeniu iloczynu: P_{U} \cdot \Pi _{G} =\left(\overline{1} ;\overline{7} ;\overline{8,13} ;\overline{3,15} ;\overline{2} ;\overline{9,14} ;\overline{4} ;\overline{5} ;\overline{10} ;\overline{6} ;\overline{11} ;\overline{12}\right) wyznaczamy tablicę prawdy funkcji H (tab. 3.12).

Tablica  3.12

 

x3

x4

g1

g2

y1

y2

y3

\overline {1}

0

0

0

0

0

0

0

\overline {7}

0

0

0

1

0

0

1

\overline {8,13}

0

0

1

0

0

0

1

\overline {3,15}

0

1

0

0

1

0

0

\overline {2}

0

1

0

1

0

1

0

\overline {9,14}

0

1

1

0

0

0

0

\overline {4}

1

0

0

1

0

1

1

\overline {5}

1

0

0

0

0

0

1

\overline {10}

1

0

1

0

1

0

0

\overline {6}

1

1

0

1

0

1

0

\overline {11}

1

1

0

0

0

1

1

\overline {12}

1

1

1

0

0

1

0

 

2.3. Pojęcie r-przydatności

Istotną zaletą rachunku podziałów wprowadzonego w poprzednim rozdziale jest prosta metoda selekcji zbioru argumentów należących do zbioru U.

W selekcji argumentów xi ze zbioru U spełniających warunek (3-1) z twierdzenia 3.3 pomocne jest pojęcie  r - p r z y d a t n o ś c i  zbioru podziałów względem podziału P [3.1], [3.15].

Oznaczmy przez g(t÷d) liczbę elementów w największym bloku ilorazu podziałów t i d.

Niech G(t÷d) = log2 g(t÷d).

Zbiór {<i>P</i><sub>1</sub>,...,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>k</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} jest r-przydatny względem P, gdzie:

r = k + G(P1...Pk |P · P1...Pk)                                                                                                               (3-2)

Dla zmiennej x1 z tab. 3.9 obliczymy r dla P_1=\left(\overline{1,2,3,4,5,6,7};\overline{8,9,10,11,12,13,14,15}\right) oraz P=\left(\overline{1,9,14};\overline{5,7,8,13};\overline{2,6,12};\overline{4,11};\overline{3,10,15}\right)

Mamy tu:

P\cdot \ P_{1} =\left(\overline{1} ;\overline{9,14} ;\overline{5,7} ;\overline{8,13} ;\overline{2,6} ;\overline{12} ;\overline{4} ;\overline{11} ;\overline{3} ;\overline{10,15}\right)

P|P\cdot P_{1} =\left\{\overline{( 1)( 2,6)( 3)( 4)( 5,7)} ;\overline{( 8,13)( 9,14)( 10,15)( 11)( 12)}\right\}

g(P1| P · P1) = 5, G(P1| P · P1) = 3, czyli r = 4

 

Można więc r-przydatności dwublokowych podziałów Pi względem podziału P obliczać  bezpośrednio z Pi oraz P, grupując po prostu elementy w bloku podziału Pi w podzbiory o maksymalnej liczności należące do ustalonego bloku podziału P. Dlatego też iloraz Pi÷P·Pi oznaczać będziemy często po prostu przez Pi , zapisując elementy tego ilorazu w nawiasach.

Jeśli {P<sub>1</sub>,...,</span><span style="line-height:115%">P<sub>k</sub>} jest r-przydatny (k < r) względem P, to istnieje zbiór podziałów {P<sub>k+1</sub>,...,</span><span style="line-height:115%">P<sub>r</sub>}, dla których:

P1...Pk · Pk+1...Pr £ P

natomiast nie istnieje {<i>P<sub>k</sub><sup>’</sup></i></span></span></span><sub><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">+1</span></span></span></sub><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">,...,</span></span></span><i><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>r</sub><sup>’</sup></span></span></span></i><sub><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">-1</span></span></span></sub><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">} taki, że:

P1...Pk · Pk+1,...,Pr-1 £ P

jest m-przydatność zbioru {<i>P</i><sub>1</sub>,...,</span></span></span><i><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>k</sub></span></span></span></i><span style="line-height:115%"><span style="color:black"><span style="letter-spacing:-.15pt">} względem P.

 

Można również wykazać, że jeśli P = {<i>P</i><sub>1</sub>,...,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>k</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} jest m-przydatny względem P, to każdy podzbiór z P jest m'-przydatny, gdzie m' £ m. Tym samym warunkiem koniecznym na to, aby P = {<i>P</i><sub>1</sub>,...,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>k</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} był m-przydatny względem P jest r-przydatność podzbiorów z P taka, że dla każdego P' zawartego w P, r(P') £ m. To proste stwierdzenie pozwala w łatwy sposób grupować podziały 2-blokowe w zbiory o ustalonej przydatności.

Na przykład, jeśli w zbiorze podziałów {<i>P</i><sub>1</sub>,...,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} następujące podzbiory są m-przydatne: {<i>P</i><sub>1</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>1</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>3</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>4</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, to jedynym m-przydatnym zbiorem o liczności 3 może być tylko zbiór {<i>P</i><sub>1</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}.

Zastosowanie r-przydatności w syntezie funkcji g, to jest składowych dekompozycji wyjaśnia następujący przykład.

Obliczymy r-przydatność podziałów P(x) dla układu F funkcji z tab. 3.9. Mamy tu:

P( x_{1}) =\left\{\overline{( 1)( 2,6)( 3)( 4)( 5,7)} ;\overline{( 8,13)( 9,14)( 10,15)( 11)( 12)}\right\}

czyli P(x1) jest 4-przydatny względem PF. Dokonując analogicznych obliczeń dla pozostałych podziałów, stwierdzamy, że P(x3), P(x4)  są 3-przydatne, natomiast P(x2), P(x5), 4-przydatne.

Uzupelnij opis obrazka

Rys.  3.7. Ilustracja obliczeń z przykładu 3.4:   a) przy założeniu, że zbiór {P(x3), P(x4)} jest 3-przydatny;  b) przy założeniu, że {P(xi), P(xj), P(xk)} jest 4-przydatny

Jeśli więc istnieje dekompozycja układu F taka, jaką pokazano na rys. 3.7a, to byłoby to możliwe tylko pod warunkiem, że zbiór {<i>P</i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">(<i>x</i><sub>3</sub>), <i>P</i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">(<i>x</i><sub>4</sub>)} jest 3-przydatny. Ale

P( x_{3}) \cdot P( x_{4}) =\left\{\overline{( 1)( 7,8,13)} ;\overline{( 9,14)( 2)( 3,15)} ;\overline{( 4)( 5)( 10)} ;\overline{( 11)( 6,12)} ;\right\}

czyli {<i>P</i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">(<i>x</i><sub>3</sub>), <i>P</i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">(<i>x</i><sub>4</sub>)} jest 4-przydatny. Sprawdźmy więc, czy istnieje dekompozycja o schemacie blokowym jak na rys. 3.7b.

W tym celu obliczymy r dla każdego zbioru {<i>P</i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">(<i>x<sub>i</sub></i>), <i>P</i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">(<i>x<sub>j</sub></i>)}. W wyniku uzyskujemy, że 4-przydatnymi parami są tylko {<i>P</i><sub>1</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}1), {<i>P</i><sub>1</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>2</sub>, </span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>2</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>3</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>3</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} oraz {<i>P</i><sub>4</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}.

W związku z tym 4-przydatnymi trójkami mogą być tylko: a) {<i>P</i><sub>1</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}; b) {<i>P</i><sub>2</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}; c) {<i>P</i><sub>3</sub>,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}.

Następnie stwierdzamy, że wyłącznie trójki a) oraz c) są 4-przydatne. Dla trójek tych odpowiednie iloczyny podziałów są:

 

 P( x_{1}) \cdot P( x_{3}) \cdot P( x_{4}) =\left\{\overline{( 1)( 7)} ;\overline{( 8,13)} ;\overline{( 2)( 3)} ;\overline{( 9,14)( 15)} ;\overline{( 4)( 5)} ;\overline{( 10)} ;\overline{( 6)} ;\overline{( 11)( 12)}\right\}

P( x_{3}) \cdot P( x_{4}) \cdot P( x_{5}) =\left\{\overline{( 1)( 7,8)} ;\overline{( 13)} ;\overline{( 9)( 3,15)} ;\overline{( 14)( 2)} ;\overline{( 4)( 10)} ;\overline{( 5)} ;\overline{( 6)( 12)} ;\overline{( 11)}\right\}

 

1) Stosujemy tu oznaczenie P(xi) = Pi.

Z przykładu 3.4 wynika, że synteza składowych dekompozycji wymaga utworzenia wszystkich możliwych dwójek, trójek... podziałów o ustalonej r-przydatności. Przy dużej liczbie zmiennych wejściowych (dużym n) wymaga to obliczenia stosunkowo dużej liczby r-przydatności zbiorów {<i>P<sub>i<b> </b></sub></i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>j</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} (i, j Î {1,...,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">n</span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}), gdyż liczba wszystkich różnych par {<i>P<sub>i </sub></i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">, <i>P<sub>j</sub></i>} jest  n!/2(n – 2)!.

Proces ten można uprościć, określając związki między r-przydatnością podziałów dwublokowych.

Jeżeli r(Pa) = n i r(Pb) = n, to zbiór {<i>P<sub>a<b> </b></sub></i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>b</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} ma przydatność co najwyżej równą n+1, jeżeli  natomiast r(Pa) = n  i  r(Pb) = n + 1,  to zbiór  {<i>P<sub>a<b> </b></sub></i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,<b> </b></span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>b</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}  jest n+1-przydat­ny.

 

Zastosujemy powyższe związki w celu obliczenia 4-przydatnych par Pi , Pj dla podziałów P1,..., P5 z przykładu 3.4. Poprzednio obliczyliśmy, że r-przydatności tych podziałów wynoszą odpowiednio: 3 dla P3, P4 oraz 4 dla P1, P2, P5 . Na mocy powyższych związków, 4-przydatnymi zbiorami {<i>P<sub>i</sub></i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>j</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} są: {<i>P</i><sub>1</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>1</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>2</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">3</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>2</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>3</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>4</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, natomiast r-przydatność pary {<i>P</i><sub>3</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">4</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} jest r': 3 £ r£ 4, a par {<i>P</i><sub>1</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">2</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>1</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}, {<i>P</i><sub>2</sub>,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P</span></span></span></i><sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">5</span></span></span></sub><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">} jest r": 4 £ r£ 5. Stąd wniosek, że w celu wyselekcjono­wania wszystkich 4-przydatnych par wystarczy obliczyć
r-przydatność wyłącznie dla par {<i>P<sub>i</sub></i></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">,</span></span></span><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt"><b> </b></span></span></span></i><i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">P<sub>j</sub></span></span></span></i><span style="line-height:150%"><span style="color:black"><span style="letter-spacing:-.15pt">}: (i,
jΠ{(3,4),(1,2), (1,5),(2,5)} – czyli czterech par. Poprzednio (w przy­kładzie 3.4) obliczenia te należało wykonać dla 10 par.

 

Dla funkcji F z tablicy 3.13 zbiory podziałów {<i>P</i><sub>1</sub>, <i>P</i><sub>2</sub>}, {<i>P</i><sub>1</sub>, <i>P</i><sub>4</sub>}, {<i>P</i><sub>1</sub>, <i>P</i><sub>5</sub>}, {<i>P</i><sub>2</sub>, <i>P</i><sub>3</sub>}, {<i>P</i><sub>2</sub>, <i>P</i><sub>4</sub>}, {<i>P</i><sub>3</sub>, <i>P</i><sub>4</sub>},{<i>P</i><sub>3</sub>, <i>P</i><sub>5</sub>},{<i>P</i><sub>4</sub>, <i>P</i><sub>5</sub>} są 4-przydatne. Obliczyć wszystkie najlepsze dekompozycje  szeregowe tej funkcji dla U = {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>, <i>x<sub>k</sub></i>}, czyli F = H(xi, xj, xk, G0). Wykazać, że dla żadnej z nich nie istnieje dekom­pozycja F = H(G1(xi, xj, xk), G0).

Tablica  3.13

 

x1

x2

x3

x4

x5

y1

y2

y3

1

0

0

0

1

1

1

0

0

2

0

0

0

1

0

1

0

1

3

0

1

1

0

0

0

1

1

4

0

1

1

0

1

0

1

0

5

1

1

0

0

0

0

0

1

6

1

1

0

1

0

0

0

0

7

1

1

1

0

0

1

0

1

8

1

1

1

1

0

0

1

0

9

1

0

0

0

1

1

1

1

10

1

0

0

1

1

1

0

0

11

1

0

0

1

0

1

0

1

 

Rozwiązanie

P_{F} =\left(\overline{1,10} ;\overline{2,7,11} ;\overline{3} ;\overline{4,8} ;\overline{5} ;\overline{6} ;\overline{9}\right)

Z podanych par {P<i><sub>i</sub></i>, P<i><sub>j</sub></i>} tworzymy trójki podejrzane o r = 4

A={<i>x</i><sub>1</sub>,<i>x</i><sub>2</sub>,<i>x</i><sub>4</sub>}, B={<i>x</i><sub>1</sub>,<i>x</i><sub>4</sub>,<i>x</i><sub>5</sub>}      C={<i>x</i><sub>2</sub>,<i>x</i><sub>3</sub>,<i>x</i><sub>4</sub>}     D={<i> x</i><sub>3</sub>,<i>x</i><sub>4</sub>,<i>x<sub>5</sub></i>}

P( A) |P_{F} =P_{1} \cdot P_{2} \cdot P_{4} |P_{F} =\left\{\overline{( 1)( 2)} ;\overline{( 3)( 4)} ;\overline{( 5)( 7)} ;\overline{( 6)( 8)} ;\overline{( 9)} ;\overline{( 10)( 11)}\right\}             r = 3+1

P( B) |P_{F} =P_{1} \cdot P_{4} \cdot P_{5} |P_{F} =\left\{\overline{( 1)} ;\overline{( 2)} ;\overline{( 3)} ;\overline{( 4)} ;\overline{( 5,7)} ;\overline{( 6)( 8)( 11)} ;\overline{( 9)} ;\overline{( 10)}\right\}                    r = 3+2

P( C) |P_{F} =P_{2} \cdot P_{3} \cdot P_{4} |P_{F} =\left\{\overline{( 1,10)( 2,11)} ;\overline{( 3)( 4)( 7)} ;\overline{( 5)} ;\overline{( 6)} ;\overline{( 8)} ;\overline{( 9)}\right\}                         r = 3+2

P\left(D\right)|P_F=P_3\cdot P_4{\cdot P}_5|P_F=\left\{\overline{\left(1,10\right)};\overline{\left(2,11\right)\left(6\right)};\overline{\left(3\right)\left(7\right)};\overline{\left(4\right)};\overline{\left(5\right)};\overline{\left(8\right)};\overline{\left(9\right)}\right\}                     r = 3+1

Obliczenia dla U = {<i>x</i><sub>1</sub>, <i>x</i><sub>2</sub>, <i>x</i><sub>4</sub>} (rys. 3.7)

P_{V} =P( x_{3} x_{5}) =\left(\overline{1,9,10} ;\overline{2,5,6,11} ;\overline{3,7,8} ;\overline{4}\right)

Z podziału ilorazowego  P( A) |P_{F}  wynika, że warunki dekompozycji będą spełnione, gdy rozdzielimy wektory: 1 od 2, 3 od 4, 5 od 7, 6 od 8 oraz 10 od 11. Uzyskamy to, gdy podział \Pi_{G_0}  będzie 2-blokowy (tab. 3.14):

Tablica  3.14

 

x3x5

g0

1,9,10

0 1

0

2,5,6,11

0 0

1

3,7,8

1 0

0

4

1 1

1

 

 

 

P_{V} =P( x_{3} x_{5}) =\left(\overline{1,9,10} ;\overline{2,5,6,11} ;\overline{3,7,8} ;\overline{4}\right)

1. blok:  \overline{1,9,10}\ \ i\ \ \overline{\ 3,7,8}

2. blok:  \overline{2,5,6,11}\ i\overline{\ 4}\

zatem

\Pi _{G_{0}} =\left(\overline{1,3,7,8,9,10} ;\overline{2,4,5,6,11}\right)

\begin{array}{{>{\displaystyle}l}} P_{H} =P(U)\Pi _{G_{0}} =\left(\overline{1,2} ;\overline{3,4} ;\overline{5,7} ;\overline{6,8} ;\overline{9} ;\overline{10,11}\right) \cdot \left(\overline{1,3,7,8,9,10} ;\overline{2,4,5,6,11}\right) =\\ =\left(\overline{1} ;\overline{2} ;\overline{3} ;\overline{4} ;\overline{5} ;\overline{6} ;\overline{7} ;\overline{8} ;\overline{9} ;\overline{10} ;\overline{11}\right) \end{array}

Uzupelnij opis obrazka

Rys.  3.8. Pierwszy krok dekompozycji

Pierwszy krok dekompozycji przedstawiono w tab. 3.14   i na rys. 3.8.

Sprawdzamy czy istnieje dekompozycja F = H(G1(xi, xj, xk), G0).

W tym celu liczymy r-przydatność \Pi _{G_{0}} :

 

\Pi _{G_{0}} |P_{F} =\left\{\overline{( 1,10)( 3)( 7)( 8)( 9)} ;\overline{( 2,11)( 4)( 5)( 6)}\right\}

czyli r = 1+3 = 4, zatem wymagana dekompozycja nie istnieje, gdyż blok G1 musiałby mieć 3 wyjścia (rys. 3.9). Obliczenia dla U = {<i>x</i><sub>3</sub>, <i>x</i><sub>4</sub>, <i>x</i><sub>5</sub>} są analogiczne. Funkcję H podano w tab. 3.15.

Uzupelnij opis obrazka

 

Rys.  3.9. Drugi krok dekompozycji

 

Tablica  3.15

 

x1x2x4g0

y1y2y3

1

0010

100

2

0011

101

3

0100

011

4

0101

010

5

6

1101

1111

001

000

7

8

9

1100

1110

1000

101

010

111

10

11

1010

1011

100

101

 

2.4. Dekompozycja nierozłączna

Zauważmy, że r-przydatność k-elementowego zbioru U nie oznacza, że istnieje dekompozycja:

F = H((U,G(V))

w której funkcja G ma r – k wyjść. Sytuacja ta oznacza tylko, że istnieje dekompozycja z funkcją G o argumentach V È W gdzie WÍ U.

Oczywiście w najlepszym przypadku W jest zbiorem pustym, a w najgorszym W = U i wtedy dekompozycja taka nie ma sensu. Można się jednak spodziewać, że sytuacja najlepsza i najgorsza są najmniej prawdopodobne.

Z powyższego wynika, że w praktyce często stajemy przed problemem wyznaczania dekompozycji nierozłącznej. Podstawowym problemem w obliczaniu dekompozycji nierozłącznej jest wyznaczenie zbioru W o możliwie minimalnej liczności. Wybór argumentów do zbioru W jest przeprowadzany na podstawie analizy podziału PV. Otóż, w przypadku, gdy nie istnieje dekompozycja rozłączna, nie istnieje również ΠG ³ Pspełniający nierówność PV ΠG  ≤ PF.  

Jest zrozumiałe, że powiększenie zbioru V o argumenty z W Í U prowadzi w kon­sekwencji do utworzenia „drobniej­szego” ΠG ³ P’V (gdzie P’V jest zbiorem indu­ko­wa­nym argumentami V’ È W). Drobniejszy ΠG może zapewnić spełnienie warunku:

P ΠG£ PF

Sposób postępowania przy wyz­na­czaniu W wyjaśnimy na przy­kładzie.

Dla funkcji podanej w tabl. 3.16 poszukujemy dekompozycji, w której U = {<i>x</i><sub>1</sub>,<i>x</i><sub>2</sub>,<i>x</i><sub>3</sub>}, V = {<i>x</i><sub>4</sub>,<i>x</i><sub>5</sub>}.

Tablica  3.16

 

x1

x2

x3

x4

x5

y1

y2

y3

1

0

0

0

0

0

0

0

0

2

0

0

0

1

1

0

1

0

3

0

1

0

1

0

1

0

0

4

0

1

1

1

1

0

1

1

5

0

1

1

0

1

0

0

1

6

0

1

0

0

0

0

0

1

7

1

1

0

1

0

0

0

0

8

1

0

0

1

1

1

0

0

9

1

0

0

1

0

0

0

1

10

1

0

1

1

1

0

0

0

 

Wyznaczamy kolejno:

\Pi_{G_{0}}=\left(\overline{1,3,7,8,9,10};\overline{2,4,5,6,11}\right)

\begin{array}{{>{\displaystyle}l}} P_{H} =P( U) \Pi _{G_{0}} =\left(\overline{1,2} ;\overline{3,4} ;\overline{5,7} ;\overline{6,8} ;\overline{9} ;\overline{10,11}\right) \cdot\left(\overline{1,3,7,8,9,10} ;\overline{2,4,5,6,11}\right) =\\ =\ \left(\overline{1} ;\overline{2} ;\overline{3} ;\overline{4} ;\overline{5} ;\overline{6} ;\overline{7} ;\overline{8} ;\overline{9} ;\overline{10} ;\overline{11}\right) \end{array}

P_{F} =\left(\overline{1,7,10} ;\overline{2} ;\overline{3,8} ;\overline{4} ;\overline{5,69}\right)

P_{U} =\left(\overline{1,2} ;\overline{3,6} ;\overline{4,5} ;\overline{7} ;\overline{8,9} ;\overline{10}\right)

P_{V} =\left(\overline{1,6} ;\overline{2,4,8,10} ;\overline{3,7,9} ;\overline{5}\right)

Podział PG  konstruujemy w sposób pokazany na rys. 3.10. Niestety nie można spełnić warunków rozdziału z podziału ilorazowego: elementy 8 i 9 są w jednym bloku podziału PG .

Uzupelnij opis obrazka

Rys. 3.10. Konstrukcja podziału ΠG

 

Warunki te byłyby spełnione, gdybyśmy  przenieśli element 9 do pierwszego bloku (strzałka na rys. 3.9). Byłoby to jednak możliwe, gdyby elementy 3, 7 były oddzielone od elementu 9. Z tablicy 3.17 wynika, że wektory 3 i 9 różnią się na pozycjach x1 oraz x2, natomiast wektory 7 i 9 różnią się na pozycji x2. Zatem zmienna x2 wystarczy do oddzielenia 3, 7 od 9. Stąd wniosek, że W = {<i>x</i><sub>2</sub>}, czyli istnieje dekompozycja nierozłączna. Jej wyznaczenie nie nastręcza trudności, gdyż dla nowego PV obliczenie odpowiedniego PG jest już możliwe:

PV’ = PVP2

P_{V} =\left(\overline{1} ;\overline{6} ;\overline{2,8,10} ;\overline{4} ;\overline{3,7} ;\overline{9} ;\overline{5}\right)

\Pi _{G_{0}} =\left(\overline{1,5,6,9} ;\overline{2,3,4,7,8,10}\right)

 

Pojęcie r-przydatności i dekompozycja nierozłączna ułatwiają znajdowanie najlepszych dekompozycji.

Dla funkcji z tablicy 3.17 podziały P1, P2, P5 są 3-przydatne,  a P3, P4 – 4-przydatne. Należy obliczyć wszystkie dekompozycje  szeregowe z najmniejsza liczbą wejść do bloku H oraz najmniejszą liczbą wejść i wyjść bloku G.

Uwaga: wystarczy obliczyć odpowiednie podziały ΠG spełniające warunek wystarczający dekompozycji.

 

Tablica  3.17

 

x1

x2

x3

x4

x5

Y

1

0

0

0

0

0

D

2

0

0

0

0

1

A

3

0

0

0

1

0

C

4

1

0

0

1

0

D

5

1

0

0

1

1

B

6

0

0

0

1

1

B

7

0

0

1

0

0

D

8

1

0

1

0

1

B

9

0

0

1

0

1

A

10

0

1

1

0

0

C

11

1

1

1

0

0

E

12

1

1

1

0

1

A

 

W rozwiązaniu podać też schematy blokowe obliczonych dekompozycji, w szczególności wejścia i wyjścia bloków G i H.

 

Rozwiązanie:

 

P_{F} =\left(\overline{1,4,7} ;\overline{2,9,12} ;\overline{3,10} ;\overline{4,8} ;\overline{5,6,8} ;\overline{11}\right)  
P_{1} \cdot P_{5} |P_{F} =\left\{\overline{( 1,7)( 3,10)} ;\overline{( 2,9)( 6)} ;\overline{( 4)( 11)} ;\overline{( 5,8)( 12)}\right\} r = 3
P_{1} \cdot P_{2} |P_{F} =\left\{\overline{( 1,7)( 2,9)( 3)( 6)} ;\overline{( 5,8)( 4)} ;\overline{( 10)} ;\overline{( 11)( 12)} \ \right\} r = 4
P_{2} \cdot P_{5} |P_{F} =\left\{\overline{( 1,4,7)( 3)} ;\overline{( 2,9)( 5,6,8)} ;\overline{( 10,11)} ;\overline{( 12)} \ \right\} r = 3

 

Dla U = {<i>x</i><sub>1</sub>, <i>x</i><sub>5</sub>} (rys. 3.11)

Uzupelnij opis obrazka

Rys. 3.11. Dekompozycja funkcji z przykładu 3.6

P_{1} \cdot P_{5} |P_{F} =\left\{\overline{( 1,7)( 3,10)} ;\overline{( 2,9)( 6)} ;\overline{( 4)( 11)} ;\overline{( 5,8)( 12)}\right\}

P_{V} =P( x_{2} ,x_{3} ,x_{4}) =\left(\overline{1,2} ;\overline{3,4,5,6} ;\overline{7,8,9} ;\overline{10,11,12}\right)

Tworzenie podziału PG:

 

1. blok \overline{1,2}  i  \overline{7,8,9}

2. blok \overline{3,4,5,6}  i  \overline{10,11,12}

 

Wektory 4, 5 trzeba oddzielić od 3, 6. Stąd dekompozycja  nierozłączna  z x1, czyli V’ = x1 x2 x3 x4

P_{V\prime } =\left(\overline{1,2} ;\overline{3,6} ;\overline{4,5} ;\overline{7,9} ;\overline{8} ;\overline{10} ;\overline{11,12}\right)

\Pi _{G\prime } =\left(\overline{1,2,4,5,7,8,9} ;\overline{3,6,10,11,12}\right)

\begin{array}{{>{\displaystyle}l}} P_{H} =P( U) \cdot \Pi _{G\prime } =\left(\overline{1,3,7,10;} ;\overline{2,6,9} ;\overline{4,11} ;\overline{5,8,12}\right) \cdot \left(\overline{1,2,4,5,7,8,9} ;\overline{3,6,10,11,12}\right) =\\ =\left(\overline{1,7} ;\overline{3,10} ;\overline{2,9} ;\overline{6} ;\overline{4} ;\overline{11} ;\overline{5,8} ;\overline{12}\right) \end{array}

 

Tablice bloków G i H przedstawiono odpowiednio w tab. 3.18. i tab. 3.19.

 

Tablica  3.18

 

x1x2x3x4

g

1,2

0 0 0 0

0

3,6

0 0 0 1

1

4,5

1 0 0 1

0

7,9

0 0 1 0

0

8

1 0 1 0

0

10

0 1 1 0

1

11,12

1 1 1 0

1

 

Tablica  3.19

 

x1x5g

Y

1,7

0 0 0

D

2,9

0 1 0

A

3,10

0 0 1

C

4

1 0 0

D

5,8

1 1 0

B

6

0 1 1

B

11

1 0 1

E

12

1 1 1

A

 

Dla U = {<i>x</i><sub>2</sub>, <i>x</i><sub>5</sub>} (rys. 3.12):

P_{2} \cdot P_{5} |P_{F} =\left\{\overline{( 1,4,7)( 3)} ;\overline{( 2,9)( 5,6,8)} ;\overline{( 10)( 11)} ;\overline{( 12)} \ \right\}

P_{V} =P( x_{1} ,x_{3} ,x_{4}) =\left(\overline{1,2} ;\overline{3,6} ;\overline{4,5} ;\overline{7,9,10} ;\overline{8,11,12}\right)

Podział PG można utworzyć następująco:

  1. blok \overline{1,2};\overline{4,5};\overline{7,9,10}
  2. blok \overline{3,6};\ \overline{8,11,12}

Aby zlikwidować konflikt wektor 5 należy oddzielić od wektora 4. Stąd dodatkowo x5, czyli V’ = {<i>x</i><sub>1</sub>, <i>x</i><sub>3</sub>, <i>x</i><sub>4</sub>, <i>x</i><sub>5</sub>}

P_{V\prime } =\left(\overline{1} ;\overline{2} ;\overline{3} ;\overline{4} ;\overline{5} ;\overline{6} ;\overline{7,10} ;\overline{9} ;\overline{8,12} ;\overline{11}\right)

\Pi _{G\prime } =\left(\overline{1,2,4,7,9,10} ;\overline{3,5,6,8,11,12}\right)

 

Tablice bloków H i G’ podano odpowiednio w tab. 3.20 i tab. 3.21.

 

Tablica  3.20

 

x1x3x4x5

g

1

0 0 0 0

0

2

0 0 0 1

0

3

0 0 1 0

1

4

1 0 1 0

0

5

1 0 1 1

1

6

0 0 1 1

1

7,10

0 1 0 0

0

9

0 1 0 1

0

8,12

1 1 0 1

1

11

1 1 0 0

1

 

Tablica  3.21

 

x2x5g

Y

1,7

0 0 0

D

2,9

0 1 0

A

3,10

0 0 1

C

4

1 0 0

D

5,8

1 1 0

B

6

0 1 1

B

11

1 0 1

E

12

1 1 1

A

Dekompozycja nierozłączna, mimo iż zwiększa liczbę wejść do komponentu G, może w rezultacie prowadzić do uzyskania realizacji z mniejszą liczbą komórek logicznych. Sytuację taką omawiamy w poniższym przykładzie.

 

Dla funkcji F z tab. 3.22a istnieje dekompozycja:

 

F = H(x4, x5,  x6, G1 (x1,  x2,  x3))

 

dla której funkcja G1 jest podana w tablicy 3.22b.

a)

 

 

 

 

 

 

 

 

 

b)

 

 

 

 

 

x1

x2

x3

x4

x5

x6

y1

y2

 

 

x1

x2

x3

g1

 

1

1

0

0

1

0

0

0

0

 

1

1

1

0

0

 

2

1

0

1

1

1

0

0

1

 

2

0

0

1

0

 

3

1

1

0

1

1

1

0

1

 

3

1

0

1

1

 

4

1

0

1

1

0

0

0

0

 

4

1

0

0

1

 

5

0

0

1

1

1

0

1

0

 

 

 

 

 

 

 

6

1

1

0

1

0

0

1

0

 

 

 

 

 

 

 

7

1

0

0

1

1

1

1

0

 

 

 

 

 

 

 

8

0

0

1

0

1

1

1

1

 

 

 

 

 

 

 

9

0

0

1

0

1

0

1

1

 

 

 

 

 

 

 

 

Ponieważ P_U=P\left(g_1\right)=\left(\overline{3,5,6,8,9};\overline{1,2,4,7}\right) . jest 3-przydat­ny, możemy wyznaczyć:

\Pi_G=\left(\overline{3,7};\overline{2,5};\overline{1,4,6};\overline{8,9}\right) ,

 

który zapewnia realizację funkcji F = H(G2(x4, x5, x6), G1(x1, x2, x3)) w strukturze przedstawionej na rys. 3.13.

Uzupelnij opis obrazka

Rys. 3.13.Schemat dekompozycji funkcji

 

Przy założeniu, że dysponujemy strukturami z komórkami o wymiarach 3/1, do realizacji tej funkcji jest potrzebnych 5 komórek.

 Postaramy się znaleźć dekompozycję prowadzącą do oszczędniejszej realizacji. W tym celu obliczymy r-przydat­ność dla podziałów reprezentujących pary zmiennych: (g1, x4),  (g1, x5), (g1, x6).

P_{V} =\left(\overline{1,6} ;\overline{2,4,8,10} ;\overline{3,7,9} ;\overline{5}\right)

P_{U} |P_{F} =\left\{\overline{( 1)( 2)} ;\overline{( 3)( 6)} ;\overline{( 4)( 5)} ;\overline{( 7)} ;\overline{( 8)( 9)} ;\overline{( 10)}\right\}

U = {<i>g</i><sub>1</sub>,<i>x</i><sub>4</sub>}

 

P_{U} =\left(\overline{1,2,4,7} ;\overline{3,5,6} ;\overline{8,9}\right)

 

P_{U} |P_{F} =\left\{\overline{( 1,4)} ;\overline{( 2)( 7)} ;\overline{( 3)( 5,6)} ;\overline{( 8,9)}\right\}

r = 4

U = {<i>g</i><sub>1</sub>,<i>x</i><sub>5</sub>}

 

P_{U} =\left(\overline{1,4} ;\overline{2,7} ;\overline{3,5,8,9} ;\overline{6}\right)

 

P_{U} |P_{F} =\left\{\overline{( 1,4)} ;\overline{( 2)( 7)} ;\overline{( 3)( 5)( 8,9)} ;\overline{6}\right\}

r = 4

U = {<i>g</i><sub>1</sub>,<i>x</i><sub>6</sub>}

 

P_{U} =\left(\overline{1,2,4} ;\overline{3,8} ;\overline{5,6,9} ;\overline{7}\right)

 

P_{U} |P_{F} =\left\{\overline{( 1,4)( 2)} ;\overline{( 3)( 8)} ;\overline{( 5,6)( 9)} ;\overline{7}\right\}

r = 3

 

Zatem tylko dla U = {<i>g</i><sub>1</sub>,<i>x</i><sub>6</sub>} istnieje dekompozycja o strukturze, jak na rys. 3.13, której realizacja wymaga tylko czterech komórek typu 3/1. Obliczenia uzasadniające taką dekompozycję są podane poniżej.

Najpierw wyznaczamy podział PV:

 

P_{U} =\left(\overline{1,4,6} ;\overline{2,3,5,7} ;\overline{8,9}\right)

P_{U} |P_{F} =\left\{\overline{( 1)( 2)} ;\overline{( 3)( 6)} ;\overline{( 4,5)} ;\overline{( 7)( 8)( 9)} ;\overline{( 10)}\right\}

Do wyznaczenia PG dwa pierwsze bloki podziału PV przeznaczamy do pierwszego bloku podziału PG, natomiast trzeci blok PV przeznaczamy do drugiego bloku PG (rys. 3.14).

Uzupelnij opis obrazka

Rys.  3.14. Konstrukcja podziału ΠG

Ale tak utworzony PG jest sprzeczny z warunkami narzuconymi przez podział ilorazowy PU | PF, z którego wynika, że mintermy o numerach (5,6) oraz (9) muszą należeć do różnych bloków PG. Aby tak było, należy element 6 (rys. 3.14) „przenieść” do drugiego bloku. Będzie to możliwe, gdy mintermy 1,4 będą „oddzielone” od mintermu 6. Z tab. 3.22a wynika, że mintermy 1 i 6 różnią się na pozycji x2, natomiast 4 i 6 różnią się na pozycjach x2x3. Zatem W = {<i>x</i><sub>2</sub>}, czyli V’ = {<i>x</i><sub>2</sub>,<i>x</i><sub>4</sub>, <i>x</i><sub>5</sub>}. Na podstawie nowego PV’ PV × P(x2):

P_{V\prime } =\left(\overline{1,4} ;\overline{2,5,7} ;\overline{8,9}\right)

łatwo wyznaczyć PG:

\Pi _{G\prime } =\left(\overline{1,4,8,9} ;\overline{2,3,6,7}\right)

 

spełniający warunek PU × PGPF, co uzasadnia schemat blokowy dekompozycji pokazany na rys. 3.13.

 

 

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)}.

 

Uzupelnij opis obrazka

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 BiBj  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. Wyse­lekcjonowane 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 .

Dla funkcji F z tablicy 3.23 i zbiorów  U = {<i>x</i><sub>1</sub>} i V = {<i>x</i><sub>2</sub>,<i>x</i><sub>3</sub>,<i>x</i><sub>4</sub>} nakrycia bU, bV są następujące:
\beta _{V} =\left\{\overline{1,2,3} ;\overline{3,7} ;\overline{6,7} ;\overline{5} ;\overline{4,6} ;\overline{1,2} ;\overline{4}\right\}

Tablica  3.23
         

 

Uwzględniając, że \sigma _{F} =\left\{\overline{4,5} ;\overline{4,6} ;\overline{2,3,7} ;\overline{1,3,6,7}\right\}  możemy obliczyć, iż sklejenie bloków B1 i B2 prowadzi do g12 = {1,2,3,7}, co po obliczeniu \beta _{U} \cdot \gamma _{12} =\left\{\overline{1,3,7} ;\overline{2,3}\right\}  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, \beta _{U} \cdot \gamma _{13} =\left\{\overline{1,3,6,7} ;\overline{2,3,6}\right\} \nleq \sigma _{F} . (B1, B3) jest więc parą niezgodną. W rezultacie wszystkie pary zgodne są następujące: (B1, B2), (B1, B6), (B2, B3), (B2B6), (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 \beta _{G} =\left\{\overline{1,2,3,7} ;\overline{5} ;\overline{6,7} ;\overline{4,6}\right\}   (po uwzględnieniu pierwotnych numerów kostek z bloków bV). Łatwo sprawdzić, że bV £ bG, ponadto \beta _{U} =\left\{\overline{1,3,4,5,6,7} ;\overline{2,3,4,5,6}\right\} , \beta _{F} =\left\{\overline{4,5} ;\overline{4,6} ;\overline{2,3,7} ;\overline{1,3,6,7}\right\} , czyli:

 

\beta _{U} \cdot \beta _{G} =\left\{\overline{1,3,7} ;\overline{2,3} ;\overline{5} ;\overline{6,7} ;\overline{6} ;\overline{4,6}\right\} \leq \beta _{F}

 

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:

\beta _{U} \cdot \beta _{G} =\left\{\overline{1,3,7} ;\overline{2,3} ;\overline{5} ;\overline{6,7} ;\overline{6} ;\overline{4,6}\right\} \leq \beta _{F}

przyporządkowujemy kostkę o składowych x1, g1, g2, przy czym wartości tych składowych wynikają z przyna­leżności bloku B do bloków nakrycia b1 oraz bG. Należy więc określić kodowanie bloków
\beta _{G} =\left\{\overline{1,2,3,7} ;\overline{5} ;\overline{6,7} ;\overline{4,6}\right\} , 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 Π 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: 

 

\beta _{V} =\overset{}{\{}\overset{B_{1}}{\overline{7,8}} ;\overset{B_{2}}{\overline{3,4,8}} ;\overset{B_{3}}{\overline{8}} ;\overset{B_{4}}{\overline{4,8}} ;\overset{B_{5}}{\overline{1,5,8}} ;\overset{B_{6}}{\overline{3,5,8}} ;\overset{B_{7}}{\overline{6,8}} ;\overset{B_{8}}{\overline{1,2,5,8}} ;\}

 

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:

 

\sigma _{G} =\underset{}{\{}\overset{00}{\overline{3,4,7,8}} ;\ \overset{01}{\overline{3,5,8}} ;\ \overset{10}{\overline{6,8}} ;\overset{11}{\overline{\ 1,2,5,8}}\}

 

spełnia warunki twierdzenia 3.4, zatem dekompozycja istnieje.

 

Dla kolejnych bloków  bV, ich repre­zentantó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ł przypo­rzą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, B6B7, 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:

\beta _{U} =\left\{\overline{1,3,5} ;\overline{3,4,6,7} ;\overline{2,3,5} ;\overline{3,4,6} ;\right\}

\beta _{V} =\left\{\overline{1,2,3} ;\overline{3,7} ;\overline{1,2} ;\overline{4} ;\overline{6,7} ;\overline{5} ;\overline{4,6}\right\}

 

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 + B1B2B5B+
 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 \beta _{G} =\left\{\overline{B_{1} ,B_{2} ,B_{3} B_{5}} ;\overline{B_{4} ,B_{6} ,B_{7}}\right\} . W tym przypadku rozwiązanie jest trywialne. Wracając do pierwotnych kostek tworzących poszczególne bloki Bi otrzymujemy:

                    \beta _{G} =\overset{}{\{}\overset{0}{\underset{}{\overline{1,2,3,6,7}}} ;\overset{1}{\overline{4,5,6}}\} ,

 

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), (B3B5), (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}

 S=  {1, 2}

  {1, 2, 3}

 S=  {3}

  {3, 4}, {1, 2, 3}

 S=  {1, 2, 3}

  {3, 5}, {1, 2, 3, 5}, {3, 4}

 S=  {4, 5}

  {5, 6}, {4, 6}, {1, 2, 3, 5}, {3, 4}

 S=  {3, 4, 6}

  {6, 7}, {4, 6, 7}, {3, 7},  {3, 4, 7},  {5, 6}, {1, 2, 3, 5}

 

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).

Uzupelnij opis obrazka

Rys. 3.16. Dekompozycja szeregowa: a) nierozłączna; b) rozłączna

 

 

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),

 

gdzie: X_1=\left\{x_{i_1},x_{i_2}\right\}, X_2=\left\{x_{i_3},x_{i_4}\right\},

 

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.

Dla funkcji z tab, 3.29 podziały wejściowe i wyjściowy są następujące
P\left(x_1\right)=\left\{\overline{1,2,3,4,5,6,7,8};\overline{9,10,11}\right\},
P\left(x_2\right)=\left\{\overline{1,2,6,10,11};\overline{3,4,5,7,8,9}\right\},
P\left(x_3\right)=\left\{\overline{1,3,6,7,9,10,11};\overline{2,4,5,8}\right\}
,
P\left(x_4\right)=\left\{\overline{1,5,7,8};\overline{2,3,4,6,9,10,11}\right\},
P\left(x_5\right)=\left\{\overline{1,3,5,7,9,11};\overline{2,4,6,8,10}\right\},
P_F=\left\{\overline{1,\ldots,5};\overline{6,\ldots,11}\right\},

W celu uproszczenia zapisów wektory a,b Î{0,1}n : F(a) ≠ F(b), będą reprezentowane liczbami p,Π= {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 g .

Wykorzystując powyższe ustalenia można teraz warunkowi dekompozycji nadać  wygodniejszą postać: F = H(g1g2,..., 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:

F=H\left(G\left(x_{i_1},\ldots,x_{i_t}\right),\ldots,x_{i_n}\right)

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.

Funkcja g\ =x_{i} \ \oplus \ x_{j} jest funkcją rozdzielającą (dystrybucją) parę (pq) wtedy i tylko wtedy gdy {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>} Ï Cpq
\left|\left\{x_i,x_j\right\}\right|\cap\ C_{pq}=1

Powyższe twierdzenie prowadzi do prostej metody dekomponowania funkcji i wyznaczania g(xixj) bezpośrednio ze zbiorów Cpq i podziałów P(xi), np. podziałów generowanych przez funkcję jednoargumentową g(xi) = xi.

 

G=x_{i} \ \oplus \ x_{j}  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.
 Dla funkcji F z tabeli 3.28 rodzinę RCpq ograniczoną do zbiorów dwuelementowych zapisano w  tabeli 3.29. Łatwo zauważyć, że RCpq nie zawiera 3 następujących par: x1, x5; x3, x4; x3, x5
Ł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:

FH(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, xÅ 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

5. Dekompozycja równoległa

Dekompozycja funkcjonalna jest – podobnie jak redukcja argumentów – metodą syntezy logicznej, dostosowaną do implementacji na komórkach FPGA i pamięciach ROM. W związku z tym jej stosowanie w projektowaniu układów cyfrowych staje się coraz bardziej znaczące. W [3-20] problem dekompozycji określa się jako jedno z najpilniejszych zadań syntezy logicznej.

W szczególności proponuje się dalsze rozwijanie metody dekompozycji, polegającej na stosowaniu tzw. tablic dekompozycji (Decomposition Chart). Wydaje się jednak, że metoda zaproponowana w niniejszym rozdziale (podrozdz. 3.1, 3.2 oraz 3.3) jest znacznie skuteczniejsza.  Jej zaletą jest stosowanie rachunku podziałów, co umożliwia sformułowanie wygodnego praktyce twierdzenia (Twierdzenie 3.3), w którym warunek wystarczający dekompozycji polega na wyznaczaniu podziałów na zbiorze ponumerowanych wektorów tablicy funkcji. Twierdzenie to wyraźnie wskazuje, że istotnym ograniczeniem dekompozycji jest podział wyjściowy funkcji (PF) – im drobniejszy jest podział PF, tym trudniejsze jest spełnienie warunku dekompozycji PU × PG £ PF. Stąd pomysł uzupełnienia procesu dekompozycji funkcjonalnej – dekompozycją równoległą.     

 

D e k o m p o z y c j a   r ó w n o l e g ł a  w układzie opisanym przez:

 

(y1,..., ym ) = F(x1,..., xn )                                                                 (3-5)

 

to podział zbioru {y1,..., ym} na takie rozłączne podzbiory Y1 ,..., Yi ,..., Yk , z których każdy można zrealizować w układzie kombinacyjnym o argumentach odpowiednio X1 ,..., Xi ,..., Xk , gdzie Xi Í {x1,..., xn}.

Sens powyższej dekompozycji wynika z ogra­niczeń konstrukcyjnych produko­wanych modułów PLD i FPGA. Jeśli bowiem liczba wyjść, np. modułu PLD jest mniejsza od m, to do realizacji układu opisanego przez (3-5) można przeznaczyć (w zależności od m) kilka modułów, uzyskując w rezultacie układ pokazany na rys. 3.17. W ukła­dzie tym wyjścia yi trzeba odpowiednio rozdzielić na poszczególne moduły. Wskazane jest, aby zbiór {y1,..., ym} rozdzielić na takie podzbiory Yi , dla których odwzorowanie Yi = hi (Xi ) wymagałoby możliwie najmniejszej liczby argumentów Xi, przy czym Xi Í {x1,..., xn}, Yi Í {y1,..., ym}.

Uzupelnij opis obrazka

Rys. 3.17. Dekompozycja równoległa

Pełną infor­mację o rozdziale zbioru Y = {y1,...,ym} na podzbiory Y1,...,Yk uzyskać można z mini­malno-argumen­towych realizacji poszczególnych wyjść yi.

Dla funkcji F z tablicy 3.35 redukty poszcze­gól­nych (pojedynczych) funkcji są odpowiednio:

y1: {x1x2x6}

y2: {x3x4}

y3: {x1x2x4x5x8}, {x1x2x4x6x8}

y4: {x1x2x3x4x7}

y5: {x1x2x4}

y6: {x1x2x6x8}

Tablica  3.35

 

x1

x2

x3

x4

x5

x6

x7

x8

y1

y2

y3

y4

y5

y6

1

0

0

0

1

1

1

0

0

0

0

0

0

0

2

1

0

1

0

0

0

0

0

0

0

1

0

1

3

1

0

1

1

1

0

0

0

0

1

1

0

1

1

4

1

1

1

1

0

1

0

0

0

1

1

1

1

0

5

1

0

1

0

1

0

0

0

0

0

0

0

1

6

0

0

1

1

1

0

0

0

1

1

0

1

0

0

7

1

1

1

0

0

0

0

0

1

0

0

1

0

8

1

0

1

1

0

1

0

0

1

1

0

0

1

9

1

0

1

1

0

1

1

0

1

0

1

1

10

0

0

0

1

1

1

0

1

0

0

1

0

1

11

0

0

0

1

1

0

0

1

1

0

0

0

 

Zatem rozsądnie jest funkcji G1 przyporząd­kować wyjścia y1, y3, y6, a funkcji G2 wyjścia y2, y4, y5 (rys. 3. 18), gdyż wtedy uzyska się minimalne zbiory argumentów dla komponentów G1 i G2 dekompozycji równoległej funkcji F, a mianowicie {x1x2x4x6x8} dla G1 oraz {x1x2x3x4x7} dla G2.  Tablice funkcji G1G2 są podane w tablicach 3.36a i 3.36b. 

Tablica  3.36

a)

               

 

b)

 

 

 

 

 

 

 

 

 

x1

x2

x4

x6

x8

y1

y3

y6

 

 

x1

x2

x3

x4

x7

y2

y4

y5

1

0

0

1

1

0

0

0

0

 

1

0

0

0

1

0

0

0

0

2

1

0

0

0

0

0

0

1

 

2

1

0

1

0

0

0

1

0

3

1

0

1

0

0

0

1

1

 

3

1

0

1

1

0

1

0

1

4

1

1

1

1

0

0

1

0

 

4

1

1

1

1

0

1

1

1

5

0

0

1

0

0

1

0

0

 

5

0

0

1

1

0

1

1

0

6

1

1

0

0

0

1

1

0

 

6

1

1

1

0

0

0

0

1

7

1

0

1

1

0

1

0

1

 

7

1

0

1

1

1

1

1

8

0

0

1

1

1

0

1

1

 

 

 

 

 

 

 

 

 

 

9

0

0

1

0

1

1

0

 

 

 

 

 

 

 

 

 

 

 

Uzupelnij opis obrazka

Rys.  3.18. Dekompozycja równoległa funkcji z przykładu 3.15

Wpływ dekompozycji zrównoważonej na ostateczny wynik syntezy w układzie FPGA zostanie pokazany na przykładzie pewnej funkcji F z 10 wejściami i 2 wyjściami (tab. 3.37), którą realizujemy w komórkach o 4 wejściach i 1 wyjściu (w uprosz­czeniu oznaczanych (4,1).

 

Tablica  3.37

.type fr

.i 10

.o 2

.p 25

0101000000 00

1110100100 00

0010110000 10

0101001000 10

1110101101 01

0100010101 01

1100010001 00

0011101110 01

0001001110 01

0110000110 01

1110110010 10

0111100000 00

0100011011 00

0010111010 01

0110001110 00

0110110111 11

0001001011 11

1110001110 10

0011001011 10

0010011010 01

e.

 

Rys.  3.19.  Dekompozycja funkcji F
– strategia szeregowa

Rys.  3.20. Dekompozycja funkcji F 
– strategia równoległa

Rys.  3.21. Dekompozycja funkcji F
– strategia szeregowa

 

Skoro funkcja F ma 10 wejść i 2 wyjścia, pierwszym krokiem dekompozycji może być dekompozycja równoległa lub szeregowa. Jednak w tym przypadku zastosujemy dekompozycję szeregową. Algorytm wydziela funkcję G mającą wejścia x1, x3, x4 i x6,. Następny krok dotyczy więc funkcji 7-wejściowej H, dla której ponownie jest wykonywana dekompozycja szeregowa. Otrzymujemy blok G o 4 wejściach i 2 wyjściach (implementowany przez 2 komórki). Blok G ma na wejściu zmienne x0, x2, x5, and x7. Są to pierwotne zmienne wejściowe i na tym etapie nie jest zwiększona liczba poziomów, co widać na rys. 3.19.

W następnym kroku dokonujemy dekompozycji równoległej. Tworzy ona dwa komponenty, każdy o jednym wyjściu, natomiast odpowiednio o 4 i 5 wejściach. Pierwszy komponent realizuje pojedyncza komórka. Drugi komponent podlega dwupoziomowej dekompozycji szeregowej. Utworzona sieć może być zrealizowana za pomocą 7 komórek (4,1). Liczba poziomów ścieżki krytycznej wynosi 3.

Ta sama funkcja zdekomponowana tak, że najpierw wykonuje się dekompozycję równoległą, jest realizowana w zupełnie innej strukturze (rys. 3.20).

Uzupelnij opis obrazka

Rys.  3.22 Dekompozycja funkcji F – strategia równoległa

Dekompozycja równoległa zastosowana bezpośrednio dla funkcji F tworzy 2 komponenty o 6 wejściach i jednym wyjściu. Każdy z nich podlega dwupoziomowej dekompozycji szeregowej. Dla pierwszego z nich możliwa do zastosowania jest rozłączna dekompozycja szeregowa z blokiem G1 (4,1). Drugi komponent może być również zdekomponowany szeregowo, jednak liczba wyjść bloku G2 wynosi 2. Aby zmniejszyć łączną liczbę komórek, można zastosować dekompozycję nierozłączną, uzyskując tylko 4 komórki. Tablice prawdy tych komórek podane są w tabeli 3.38. Ta znacząca zmiana struktury wynika z tego, że dekompozycja równoległa zmniejsza liczbę wejść obu komponentów, prowadząc do uproszczenia końcowej implementacji.

Tablica  3.38

a) funkcja G1

b) funkcja H1

c) funkcja G2

d) funkcja H2

0110 1

1101 1

1000 1

0010 1

0000 0

0101 0

1100 0

0100 0

0011 0

1011 0

1111 0

 

-01 0

011 1

111 0

100 1

0-0 0

110 0

 

0110 1

0011 1

0100 1

1000 1

0101 1

1100 0

0010 0

1010 0

1110 0

0001 0

0111 0

1111 0

10-1 0

-101 1

-111 1

0011 0

0001 1

1-00 0

0000 0

1110 1

1010 0

0100 1

0010 1

 

Z powyższego przykładu wynika, że skuteczność dekompozycji w transformacji funkcji boolowskich na sieci komórek FPGA silnie zależy od scenariusza całego procesu dekompozycji, a w szczególności od kolejności wykonywania poszczególnych procedur, a także od parametrów składowej G oraz od rozdziału wyjść na komponenty dekompozycji równoległej.

6. Zadania

Automat z tablicy 3.39 zrealizować na pamięci ROM o 4 wejściach adresowych. W rozwiązaniu podać tablicę prawdy UMA oraz organizację pamięci ROM.

Tablica  3.39

 

v1

v2

v3

v4

v5

a

a

b

c

a

c

b

d

e

a

c

c

b

e

b

d

a

c

e

b

b

e

b

e

c

b

 W tablicy 3.40 dana jest funkcja f(a,b,c,d,e):
P_{F\ } =\left(\overline{1,10,17} ;\overline{5,7,19} ;\overline{6,8,14} ;\overline{3,12,16} ;\overline{2,13} ;\overline{4,15} ;\overline{9,18} ;\overline{11,20}\right)

Należy obliczyć dekompozycję nierozłączną dla U = {<i>d</i>, <i>e</i>}. W rozwiązaniu podać tablice funkcji G oraz H. Kodowanie bloków PF  przyjąć dowolne wg NKB.

Tablica  3.40

de

 a b c

0 0

0 1

1 1

1 0

0 0 0

1

2

3

0 0 1

4

5

6

0 1 1

7

8

9

0 1 0

10

11

12

1 1 0

13

14

1 1 1

15

16

1 0 1

17

18

1 0 0

19

20

 Wiedząc, że dla funkcji z tablicy 3.41 podziały P1, P3, P5 są 3-przydatne, a P2, P4 – 4-przydatne, obliczyć najlepszą dekompozycję szeregową tej funkcji

Tablica  3.41

 

x1

x2

x3

x4

x5

y1

y2

y3

1

0

0

0

0

0

1

0

1

2

0

0

0

1

0

1

0

0

3

0

0

0

1

1

0

1

1

4

0

0

1

1

1

0

0

0

5

0

1

0

0

0

1

0

0

6

1

0

1

1

1

0

0

1

7

1

1

0

0

0

0

1

1

8

1

1

1

0

0

0

0

0

9

1

1

1

0

1

0

0

1

10

1

1

1

1

1

0

1

0