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 15 wersji utworzonych przez 2 użytkowników) | |||
Linia 1: | Linia 1: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd1.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd1.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Zaawansowane procedury syntezy logicznej | ||
Zapotrzebowanie na komputerowe narzędzia projektowania oraz coraz trudniejsze wyzwania stawiane przez technologie układów scalonych stały się najważniejszym czynnikiem rozwoju nowoczesnej syntezy logicznej. Dla wielu nowoczesnych technologii znaczący wpływ na ostateczną realizację ma etap syntezy logicznej. Okazało się to bardzo istotne w technologii układów programowalnych przez użytkownika, jakkolwiek szereg zadań techniki Full Custom i Semi Custom również charakteryzuje się dużą podatnością na „transformacje logiczne”. O randze problemu świadczy fakt finansowania prac nad algorytmami optymalizacji układów logicznych przez takie koncerny i instytucje, jak np. IBM, a także organizowanie corocznych, międzynarodowych konferencji poświęconych syntezie logicznej. | |||
|} | |} | ||
Linia 8: | Linia 11: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd2.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd2.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|o najważniejszych zagadnień syntezy logicznej jakie rozwijały się szczególnie intensywnie w ostatnich latach należą między innymi problemy, takie jak: synteza dwupoziomowa (two-level synthesis), synteza wielopoziomowa (''multi-level synthesis''), minimalizacja symboliczna, dekompozycja matryc PLA oraz dekompozycja funkcjonalna. | ||
Szczególnie intensywne prace badawcze prowadzone były (i ciągle są) nad metodami i algorytmami syntezy logicznej dla układów FPGA o architekturze LUT (''Look-Up Table''). Intensywność tych prac jest wynikiem z jednej strony dużej popularności struktur FPGA, a z drugiej, ich odmiennej budowy, którą w pierwszym przybliżeniu można scharakteryzować jako strukturę komórkową, w odróżnieniu od struktury bramkowej charakterystycznej dla układów Gate Array i Standard Cell. Dla układów FPGA początkowo próbowano zaadaptować klasyczne algorytmy dekompozycji funkcjonalnej Curtisa, o których mówiliśmy w module 6. | |||
|} | |} | ||
Linia 15: | Linia 21: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd3.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd3.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Jednak droga od prostego i ograniczonego modelu Curtisa do metod, które mogłyby być odpowiednie do wysokich wymagań współczesnych technologii układów FPGA, była bardzo długa i jak można sądzić z najnowszych publikacji badania nad dekompozycją funkcjonalną są ciągle w kręgu zainteresowań zarówno ośrodków uniwersyteckich, jak i firm opracowujących komputerowe systemy projektowania układów cyfrowych. Można stąd wnosić, że zagadnienia dekompozycji funkcjonalnej – do tej pory rzadko prezentowane w wydawnictwach książkowych – osiągnęły poziom i potrzebę ich rozpowszechnienia. Jest to istotne tym bardziej, że istniejące uniwersyteckie narzędzia komputerowe syntezy logicznej bezpośrednio wykorzystujące algorytmy dekompozycji dają bardzo dobre rezultaty w porównaniu do systemów komercyjnych. | ||
|} | |} | ||
Linia 22: | Linia 28: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd4.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd4.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|W module niniejszym omówiona będzie metoda. dekompozycji opracowana w Instytucie Telekomunikacji Politechniki Warszawskiej i zaimplementowana w systemie DEMAIN. Metoda ta polega na iteracyjnym stosowaniu różnych strategii dekompozycji – stosowana jest dekompozycja szeregowa rozłączna i nierozłączna oraz równole¬gła. Dekompozycja szeregowa to klasyczna dekompozycja Curtisa. Dekompozycja równoległa polega na podziale zbioru funkcji wyjściowych na dwa rozłączne podzbiory i realizacji każdego z nich oddzielnie. W przypadku, gdy dekompozycja równoległa jest obliczana na poziomie pierwotnych zależności funkcjonalnych, jej wpływ na jakość struktury wielopoziomowej może być bardzo istotny. Zastosowanie dekompozycji równoległej powoduje rozkład danej funkcji na dwie funkcje o mniejszej złożoności, co ułatwia znalezienie dobrych dekompozycji szeregowych dla każdej z nich. | ||
|} | |} | ||
Linia 29: | 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"| | |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,\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>F = H(U,G(V,W))</math>, | |||
wtedy i tylko wtedy, gdy istnieje podział <math>\Pi_G\ge P_V\cdot P_W\,</math> taki, że: | |||
:<math>P_U\cdot \Pi_G\le P_F\,</math> | |||
|} | |} | ||
Linia 36: | Linia 52: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd6.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd6.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Przypomnijmy istotne dla dekompozycji elementy rachunku podziałów. | ||
''Podziałem'' na zbiorze <math>S\,</math> jest system zbiorów <math>\pi =\{B_i\}</math>, którego bloki są rozłączne, czyli | |||
:<math>B_i\cap B_j =\phi</math> , jeśli tylko <math>i\neq j\,</math> | |||
Na przykład dla <math>S = \{1,2,3,4,5,6\}</math>, <math>P = \{\{1,2\}, \{3,5\}, \{4,6\} \}</math> jest podziałem na <math>S\,</math>, co zapisujemy: | |||
:<math>\pi=(\overline{1,2};\overline{3,5};\overline{4,6})</math> | |||
Dla podziałów – podobnie jak dla zbiorów –definiuje się relację porządku oraz typowe działania iloczynu, ilorazu itp., | |||
|} | |} | ||
Linia 43: | Linia 69: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd7.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd7.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Powiemy, że podział <math>P_a\,</math> jest nie większy od <math>P_b\,</math> (co oznaczamy: <math>P_a\le P_b\,</math> ), jeśli każdy blok z <math>P_a\,</math> jest zawarty w pewnym bloku z <math>P_b\,</math>. | ||
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_b=(\overline{1,4};\overline{2,6};\overline{3,5})</math> | |||
<math>\Pi_a\bullet \Pi_b =(\overline{1,4};\overline{2};\overline{6};\overline{3,5})</math> | |||
|} | |} | ||
Linia 50: | 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"| | |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>. | |||
|} | |} | ||
Linia 57: | Linia 94: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd9.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd9.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Skuteczność wprowadzonego aparatu pokażemy na przykładzie funkcji TL27 z modułu 5 (plansza 19). Dla tej funkcji tej można wykazać (najlepiej policzyć programem PANDOR), że jednym z minimalnych zbiorów argumentów jest <math>X = \{x_3, x_5, x_6, x_7, x_8, x_9, x_1_0\}\,</math>. | ||
|} | |} | ||
Linia 64: | Linia 101: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd10.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd10.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Przystępując do obliczenia dekompozycji najpierw należy funkcję opisać podziałami. | ||
|} | |} | ||
Linia 71: | Linia 108: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd11.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd11.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Korzystając z informacji o minimalnym zbiorze argumentów załóżmy poszukiwanie dekompozycji dla zbiorów <math>U = \{x_7, x_8, x_9\}\,</math> oraz <math>V = \{x_3, x_5, x_6, x_1_0\}\,</math>. Inaczej mówiąc zakładamy jednocześnie schemat blokowy dekompozycji taki jak na rysunku na planszy. Zauważmy, że w założonym schemacie blokowym nie wiemy jeszcze ile jest wyjść z bloku <math>G\,</math>. | ||
|} | |} | ||
Linia 78: | Linia 115: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd12.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd12.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Kolejne obliczenia uzyskane bezpośrednio z podziałów <math>P_i\,</math> są następujące: | ||
<math>\begin{matrix} P_U=P_7\cdot P_8\cdot P_9 & = & (\overline{1,4,10};\overline{2,11};\overline{3,14,18,21};\overline{5,9,12,22}; \\ \ & & \overline{6,7,15,20,24};\overlin{8,13,16,19};\overline{17,25};\overline{23}) \end{matrix}</math> | |||
<math>\begin{matrix} P_V=P_3\cdot P_5\cdot P_6\cdot P_{10} & = & (\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};) \end{matrix}</math> | |||
|} | |} | ||
Linia 85: | Linia 128: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd13.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd13.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Obecnie stajemy przed najważniejszym zadaniem wynikającym z twierdzenia o dekompozycji, a mianowicie przed obliczeniem podziału <math>\Pi_G\,</math>. | ||
|} | |} | ||
Linia 92: | 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"| | |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> | |||
|} | |} | ||
Linia 99: | 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 106: | 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 113: | 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 120: | 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 127: | 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 133: | Linia 192: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |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 141: | 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 148: | 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 155: | 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 162: | 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 169: | 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 176: | 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 183: | Linia 272: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd27.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd27.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Fragment tej tablicy podany jest na planszy. | ||
|} | |} | ||
Linia 190: | Linia 279: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd28.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd28.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Podobnie, po obliczeniu iloczynu: | ||
<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%"> | ||
Linia 197: | Linia 289: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd29.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd29.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Warto podkreślić, że dla realizacji w strukturach FPGA wystarczy schemat dekompozycji i tablice prawdy składowych dekompozycji (G i H). Wynika to z faktu, że komórki struktur FPGA (o czym będziemy mówili na następnym wykładzie) realizują dowolną funkcję boolowska ograniczonej liczby zmiennych (typowo 4). Nie należy przy tym zapominać, że jeśli zależy nam na realizacji w strukturach bramkowych, to jest to oczywiście możliwe po przeprowadzeniu procesu minimalizacji funkcji dla każdej składowej dekompozycji. zatem metoda dekompozycji jest ogólniejsza od metody minimalizacji i powinna być przeprowadzana przed procesem minimalizacji. Niestety w systemach komercyjnych tak nie jest. I można się domyślać, że w takim razie wyniki odwzorowania technologicznego dla wielu funkcji mogą być w systemach komercyjnych o wiele gorsze niż w systemach uniwersyteckich stosujących metody dekompozycji. | ||
|} | |} | ||
Linia 204: | Linia 296: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:TC_M14_Slajd30.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:TC_M14_Slajd30.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|W pełni potwierdza to przypuszczenie wynik realizacji funkcji TL27, który metodą dekompozycji zrealizowaliśmy na 2 komórkach (patrz plansza 21 niniejszego modułu). Ten sam wynik uzyskamy za pośrednictwem specjalnego modułu oprogramowania DEMAIN wykonującego omówione w ramach niniejszego wykładu algorytmy dekompozycji. Niestety realizacja tej samej funkcji wykonana w systemie QUARTUS amerykańskiej firmy ALTERA zajmuje znacznie większe zasoby sprzętowe, a mianowicie 25 komórek. O sposobie przeciwdziałania wadom systemów syntezy układów cyfrowych w komercyjnych narzędziach projektowania mówić będziemy na następnym wykładzie. | ||
|} | |} | ||
<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 . |