TC Moduł 14: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
m Zastępowanie tekstu – „,...,” na „,\ldots,” |
||
(Nie pokazano 10 wersji utworzonych przez 2 użytkowników) | |||
Linia 35: | Linia 35: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd5.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd5.png|thumb|500px]] | ||
|valign="top"|Obecnie zajmiemy się analitycznym opisem dekompozycji funkcji boolowskich. Do tego celu posłużymy się wprowadzonym w module 5 rachunkiem podziałów. W szczególności wyprowadzimy warunki dekompozycji dla funkcji boolowskich opisanych podziałami <math>P_1, P_2, | |valign="top"|Obecnie zajmiemy się analitycznym opisem dekompozycji funkcji boolowskich. Do tego celu posłużymy się wprowadzonym w module 5 rachunkiem podziałów. W szczególności wyprowadzimy warunki dekompozycji dla funkcji boolowskich opisanych podziałami <math>P_1, P_2,\ldots, P_n, P_f\,</math> określonymi na zbiorze <math>K\,</math> ponumerowanych wektorów odwzorowania <math>F:\, B^n\to \{0,1, -\}^m</math>. | ||
Na początek zajmiemy się poszukiwaniem dekompozycji <math>F = H(U,G(V,W))\,</math>, gdzie: <math>U, V\,</math> są podzbiorami zbioru <math>X = \{x_1, | Na początek zajmiemy się poszukiwaniem dekompozycji <math>F = H(U,G(V,W))\,</math>, gdzie: <math>U, V\,</math> są podzbiorami zbioru <math>X = \{x_1,\ldots, x_n\}</math> argumentów funkcji boolowskiej, a ponadto <math>W\subseteq U\,</math>, | ||
<math>U\cup V\subseteq X</math>, <math>U\cap V =\Phi</math>. Dla podanych założeń obowiązuje twierdzenie: | <math>U\cup V\subseteq X</math>, <math>U\cap V =\Phi</math>. Dla podanych założeń obowiązuje twierdzenie: | ||
Linia 72: | Linia 72: | ||
Iloczynem podziałów <math>P_a\bullet P_b\,</math> nazywamy największy (względem relacji <math>\le\,</math>) podział, który jest nie większy od <math>P_a\,</math> oraz <math>P_b\,</math>. Na przykład | Iloczynem podziałów <math>P_a\bullet P_b\,</math> nazywamy największy (względem relacji <math>\le\,</math>) podział, który jest nie większy od <math>P_a\,</math> oraz <math>P_b\,</math>. Na przykład | ||
<math>\Pi_a=(\overline{1,2,4};\overline{3,5,6})</math> | <math>\Pi_a=(\overline{1,2,4};\overline{3,5,6})</math> | ||
Linia 84: | Linia 85: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd8.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd8.png|thumb|500px]] | ||
|valign="top"|Niech <math>P_a\,</math> i <math>P_b\,</math> są podziałami na <math>S\,</math> oraz <math>P_a\ge P_b\</math>. | |valign="top"|Niech <math>P_a\,</math> i <math>P_b\,</math> są podziałami na <math>S\,</math> oraz <math>P_a\ge P_b\ </math>. | ||
Podział <math>P_a | P_b\,</math> jest podziałem ilorazowym <math>P_a\,</math> i <math>P_b\,</math> , jeżeli jego elementy są blokami <math>P_b\,</math>, a bloki są blokami <math>P_a\,</math>. | Podział <math>P_a | P_b\,</math> jest podziałem ilorazowym <math>P_a\,</math> i <math>P_b\,</math> , jeżeli jego elementy są blokami <math>P_b\,</math>, a bloki są blokami <math>P_a\,</math>. | ||
Linia 134: | Linia 135: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd14.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd14.png|thumb|500px]] | ||
|valign="top"|Dla wygody dalszych obliczeń podział | |valign="top"|Dla wygody dalszych obliczeń podział <math>P_U\,</math> zapiszemy w postaci podziału ilorazowego: | ||
<math>\begin{matrix} P_U|P_U\cdot P_f & = & \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)} \end{matrix}</math> | <math>\begin{matrix} P_U|P_U\cdot P_f & = & \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)} \end{matrix}</math> | ||
Linia 143: | Linia 144: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd15.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd15.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Interpretując twierdzenie o dekompozycji łatwo zauważyć, że podział <math>\Pi_G\,</math> tworzymy z bloków podziału <math>P_V\,</math> zgodnie z podziałem ilorazowym <math>P_U | P_F\,</math>. | ||
|} | |} | ||
Linia 150: | Linia 151: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd16.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd16.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Aby to zrealizować wystarczy zauważyć, że: | ||
a) podział <math>\Pi_G\,</math> 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; | |||
b) podział <math>\Pi_G\,</math> musi być zbudowany z bloków podziału <math>P_V\,</math>. | |||
Zatem, jeśli zaliczymy bloki <math>\overline{1}\,</math> oraz <math>\overline{4,17}\,</math> do pierwszego bloku <math>\Pi_G\,</math>, to blok <math>\overline{10,18,23}\,</math> musimy zaliczyć do drugiego bloku <math>\Pi_G\,</math> (ponieważ zawiera element 10) itp. Reszta obliczeń jest pokazana na planszy. Na tej podstawie stwierdzamy, że: | |||
<math>\Pi_g=(\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})</math> | |||
Łatwo sprawdzić, że <math>P_U\bullet \Pi_G\le P_F</math>. Zatem dekompozycja istnieje. | |||
|} | |} | ||
Linia 157: | Linia 170: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd17.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd17.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Obliczony podział <math>\Pi_G\,</math> jest dwublokowy, zatem możemy już ustalić liczbę wyjść z bloku <math>G\,</math>. Czyli odpowiedni schemat blokowy dekompozycji można uszczegółowić względem dotychczas założonego przez poprowadzenie jednej linii połączeniowej między blokiem <math>G\,</math> i blokiem <math>H\,</math>. | ||
|} | |} | ||
Linia 164: | Linia 177: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd18.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd18.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Dysponując uzyskanym w ten sposób schematem blokowym dekompozycji nie trudno zauważyć, że do całkowitego określenia układu logicznego realizującego naszą funkcję przede wszystkim należy obliczyć tablice prawdy funkcji <math>G\,</math> i <math>H\,</math>. | ||
|} | |} | ||
Linia 171: | Linia 184: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd19.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd19.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Tablicę funkcji <math>G\,</math> obliczamy korzystając z podziałów <math>P_V\,</math> i <math>\Pi_G\,</math>. | ||
Obliczenia interpretujemy następująco. Dla przykładu: blok <math>\overline{1}\,</math> jest zawarty w drugim bloku podziałów <math>P_3, P_5, P_6\,</math>, natomiast w pierwszym bloku podziału <math>P_1_0\,</math> oraz w pierwszym bloku podziału <math>\Pi_g\,</math>. Dlatego odpowiadający mu wektor jest <math>1110\,</math>, a wartość funkcji <math>g = 0</math>. | |||
|} | |} | ||
Linia 178: | Linia 193: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd20.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd20.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Podobnie postępujemy dla funkcji <math>H\,</math>, ale tu korzystamy z bloków iloczynu podziałów <math>P_U\bullet \Pi_g\,</math> oraz ich przynależności do podziałów <math>P_7, P_8, P_9, \Pi_g\,</math> oraz <math>P_F\,</math>. | ||
|} | |} | ||
Linia 185: | Linia 201: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd21.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd21.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Rysując raz jeszcze schemat blokowy uzyskanej dekompozycji łatwo zauważamy, że funkcję TL27 można zrealizować na 2 komórkach struktury FPGA typu LUT. | ||
|} | |} | ||
Linia 192: | Linia 208: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd22.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd22.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Zauważmy, że twierdzenie o dekompozycji jest na tyle ogólne, że łączna (jednoczesna) dekompozy¬cja wszystkich funkcji wchodzących w skład układu realizowanego z zastosowaniem modułu wielowyjściowego pozwala na wyodrębnienie wielowyjściowych podukładów <math>H,G\,</math>, których tablice prawdy stanowią bądź bezpośrednią informację, określającą na przykład zawartość pamięci ROM lub komórki typu LUT, bądź też są punktem wyjścia do dalszych etapów syntezy (np. minimalizacja układów wielowyjściowych) w przypadku matryc PLA. | ||
|} | |} | ||
Linia 199: | Linia 215: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd23.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd23.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|W celu pełnego przekonania o skuteczności twierdzenia o dekompozycji zajmiemy się dekompozycją zespołu 3 funkcji boolowskich o 5 argumentach, dla których tablica prawdy jest podana na planszy. | ||
Oznaczmy jak poprzednio wektory z <math>B^n\,</math> liczbami naturalnymi <math>K = \{1,\ldots,|B^n|\}</math>, a przez <math>P_F\,</math> podział wyjściowy funkcji <math>F\,</math> skonstruowany w następujący sposób: | |||
:<math>(s,t)\in B_{P_F}\iff F(s)=F(t)\,</math> | |||
Inaczej mówiąc, wektory <math>s\,</math> i <math>t\,</math> należą do jednego bloku <math>B\,</math> podziału <math>P_F\,</math> tylko wtedy, gdy odwzorowanie <math>F\,</math> przyporządkowuje tym wektorom taki sam wektor z <math>\{0,1\}^m\,</math>. Na przykład, dla odwzorowania <math>F\,</math> określonego jak w tablicy na planszy podział <math>P_F\,</math> (zapisany w postaci podziału na zbiorze <math>K = \{1,2,\ldots,15\}\,</math> będzie miał postać: | |||
<math>P_F=\{\overline{1,9,14};\overline{5,7,8,13};\overline{2,6,12};\overline{4,11};\overline{3,10,15} \}</math> | |||
|} | |} | ||
Linia 206: | Linia 233: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd24.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd24.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Jak widać zastosowanie rachunku podziałów okazało się wyjątkowo wygodne, gdyż odpowiednie twierdzenie o dekompozycji układów wielowyjściowych traktuje zespół funkcji jako pojedynczy obiekt, podlegający zasadom dekompozycji identycznie jak pojedyncza funkcja | ||
boolowska. Dodatkowo uzyskuje się tu prostą metodę selekcji zbioru argumentów należących do zbioru <math>U\,</math>, o której niestety ze względu na ograniczony zakres wykładu nie będziemy mówili. | |||
Zatem przyjmujemy arbitralnie <math>U = \{x_3,x_4\}</math> oraz <math>V= \{x_1,x_2,x_5\}</math>, czyli podział <math>P_U = P_3\bullet P_4</math>, <math>P_V = P_1\bullet P_2\bullet P_5</math>, a więc: | |||
<math>P_U=(\overline{1,7,8,13};\overline{2,3,9,14,15};\overline{4,5,10};\overline{6,11,12})</math> | |||
<math>P_F=(\overline{1,9,14};\overline{5,7,8,13};\overline{2,6,12};\overline{4,11};\overline{3,10,15})</math> | |||
<math>P_U|P_F=(\overline{(1)(7,8,13)};\overline{(2)(9,14)(3,15)};\overline{(4)(5)(10)};\overline{(11)(6,12)})</math> | |||
<math>P_V=(\overline{1,3};\overline{2};\overline{4,6,7};\overline{5};\overline{8,9,10,12};\overline{11};\overline{13,14};\overline{15})</math> | |||
gdzie bloki <math>P_V\,</math> są oznaczone kolejno <math>B_1, B_2,\ldots, B_8\,</math>. | |||
|} | |} | ||
Linia 213: | Linia 255: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd25.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd25.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Z podziału ilorazowego <math>P_U | P_F\,</math> 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 <math>\Pi_G\,</math> (to samo dotyczy (4), (5) i (10)). Ponadto pamiętamy, że <math>\Pi_G\ge P_V\,</math>. Zatem wprowadzenie bloków z <math>P_V\,</math> do tworzonego <math>\Pi_G\,</math> powinno przebiegać według schematu pokazanego w kolorowej tablicy na planszy. Stąd: | ||
<math>\Pi_G=(\overline{2,4,6,7};\overline{8,9,10,12,13,14};\overline{1,3,5,11,15})</math> | |||
|} | |} | ||
Linia 220: | Linia 265: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd26.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd26.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Przyjmując, że kodowanie bloków <math>\Pi_G\,</math> jest: pierwszy blok – 01, drugi blok – 10, trzeci blok – 00 i uwzględniając, iż kolejnym blokom z podziału <math>P_V\,</math> odpowiadają wektory (zmienne <math>x_1, x_2, x_5\,</math>) odpowiednio: <math>B_1 = 000</math>, <math>B_2 = 001</math>, <math>B_3 = 010</math>, <math>B_4 = 011</math>, <math>B_5 = 110</math>, <math>B_6 = 111</math>, <math>B_7 = 101</math> oraz <math>B_8 = 100</math>, wyznaczamy tablicę prawdy funkcji <math>G\,</math>. | ||
|} | |} | ||
Linia 238: | Linia 283: | ||
<math>P_U\cdot \Pi_G=(\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})</math> | <math>P_U\cdot \Pi_G=(\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})</math> | ||
wyznaczamy tablicę prawdy funkcji <math>H\,</math>. | |||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> |
Aktualna wersja na dzień 21:58, 15 wrz 2023
![]() |
Niech i są podziałami na oraz .
Podział jest podziałem ilorazowym i , jeżeli jego elementy są blokami , a bloki są blokami . |
![]() |
Przystępując do obliczenia dekompozycji najpierw należy funkcję opisać podziałami. |
![]() |
Obecnie stajemy przed najważniejszym zadaniem wynikającym z twierdzenia o dekompozycji, a mianowicie przed obliczeniem podziału . |
![]() |
Dla wygody dalszych obliczeń podział zapiszemy w postaci podziału ilorazowego:
|
![]() |
Interpretując twierdzenie o dekompozycji łatwo zauważyć, że podział tworzymy z bloków podziału zgodnie z podziałem ilorazowym . |
![]() |
Podobnie postępujemy dla funkcji , ale tu korzystamy z bloków iloczynu podziałów oraz ich przynależności do podziałów oraz .
|
![]() |
Rysując raz jeszcze schemat blokowy uzyskanej dekompozycji łatwo zauważamy, że funkcję TL27 można zrealizować na 2 komórkach struktury FPGA typu LUT. |
![]() |
Fragment tej tablicy podany jest na planszy. |
![]() |
Podobnie, po obliczeniu iloczynu:
wyznaczamy tablicę prawdy funkcji . |