2. Dekompozycja funkcjonalna metodą rachunku podziałów

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