TC Moduł 6: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 149: | Linia 149: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd17.png]] | |valign="top" width="500px"|[[Grafika:TC_M6_Slajd17.png]] | ||
|valign="top"| | |valign="top"|W celu wyjaśnienia „sklejania” kolumny należące do różnych klas zgodności wyróżniono kolorami, a wszystkie kolumny należące do jednej klasy sklejono w jedną kolumnę uzyskując tablicę z mniejszą liczbą kolumn. dodatkowo w uzyskanej „mniejszej” tablicy wprowadzono kolumnę wypełnioną kreskami, dla podkreślenia podobieństwa do tablicy Karnaugha. Oczywiście tak uzyskana tablica reprezentuje funkcję h. | ||
|} | |} | ||
Linia 156: | Linia 156: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd18.png]] | |valign="top" width="500px"|[[Grafika:TC_M6_Slajd18.png]] | ||
|valign="top"| | |valign="top"|Z kolei w celu obliczenia składowych typu g, posłużymy się pokolorowanymi tablicami pokazanymi na planszy. | ||
|} | |} | ||
Linia 163: | Linia 163: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd19.png]] | |valign="top" width="500px"|[[Grafika:TC_M6_Slajd19.png]] | ||
|valign="top"| | |valign="top"|W rezultacie uzyskaliśmy realizację pierwotnej funkcji 5 argumentów w dwóch blokach, g oraz h, w taki sposób, że wyjścia bloku g są jednocześnie dodatkowymi wejściami do h. Najistotniejsze jest jednak to, że bloki te mają mniejszą liczbę zmiennych wejściowych. | ||
Warto podkreślić, że uzyskane wyniki wystarczą już do realizacji tej funkcji w strukturze FPGA. Albowiem (typowe) komórki takiej struktury realizują dowolna funkcję boolowska 4 zmiennych. Co nie przeszkadza, że w zależności od potrzeb technologii można składowe dekompozycji poddawać dalszym zabiegom syntezy, na przykład minimalizacji... | |||
|} | |} | ||
Linia 170: | Linia 173: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd20.png]] | |valign="top" width="500px"|[[Grafika:TC_M6_Slajd20.png]] | ||
|valign="top"| | |valign="top"|Uzyskując w rezultacie wielopoziomową strukturę bramek. | ||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd21.png]] | |||
|valign="top"|Przystępujemy do obliczania funkcji g. W tym celu przepisujemy te funkcje z tablicy uzyskanej w procesie dekompozycji do odpowiednich tablic Karnaugha. I (pomijając już szczegóły) uzyskujemy następujące wyrażenia boolowskie: | |||
: <math>g_1=\bar c d \bar e + cde</math> | |||
: <math>g_2=\bar c d \bar e + ce + \bar d e</math> | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd22.png]] | |||
|valign="top"|W celu obliczenia funkcji h, w poprzednio uzyskanej tablicy zmieniamy kolejność wierszy, a dla tak powstałej tablicy Karnaugha obliczamy minimalne wyrażenie funkcji h: | |||
: <math>h=\bar a \bar g_2 + bg_2 + ag_1</math> | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd23.png]] | |||
|valign="top"|W metodzie dekompozycji jednym z najważniejszych algorytmów jest algorytm obliczania maksymalnych klas zgodności. Powstaje pytanie: czy nie można stosowanej do tej pory metody bezpośredniej zastąpić czymś skuteczniejszym? | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd24.png]] | |||
|valign="top"|W celu sprawniejszego obliczania MKZ wprowadzimy dwie nowe metody: | |||
<ol style="list-style-type:lower-alpha"> | |||
<li>metodę wg par zgodnych</li> | |||
<li>metodę wg par sprzecznych</li> | |||
</ol> | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd25.png]] | |||
|valign="top"|Niech ''E'' będzie relacją na zbiorze <math>V = \{v_1, ...,v_n\}</math>, tzn. zbiorem par zgodnych (sąsiednich) <math>v_i, v_j: i, j \in {1, ..., n}</math> oraz <math>i \ne j</math>. Obliczenie (maksymalnych) klas zgodności w zbiorze <math>V</math> przy danej ''E'' sprowadza się do wykonania następujących czynności. | |||
*Zapisujemy elementy <math>v</math> w rodzinach <math>S_j</math> zgodnie z zasadą <math>v_i \in S_j</math> tylko wtedy, gdy <math>v_j</math>, <math>v_i</math> jest parą zgodną oraz <math>i < j</math>. | |||
*Jeżeli <math>RKZ_k</math> jest rodziną klas zgodności uzyskaną w ''k''-tym kroku algorytmu, to rodzinę <math>RKZ_{k+1}</math> uzyskujemy, obliczając przecięcie każdej <math>KZ \in RKZ_k</math> ze zbiorem <math>S_{k+1}</math>. Wyróżniamy przy tym następujące przypadki: | |||
<ol style="list-style-type:lower-alpha"> | |||
<li><math>S_{k+1} = \varnothing</math> i wtedy <math>RKZ_{k+1}</math> jest powiększona o klasę <math>KZ = \{k+1\}</math>;</li> | |||
<li><math>KZ \cap S_{k+1} = \varnothing</math> wtedy klasa <math>KZ</math> nie ulega zmianie;</li> | |||
<li><math>KZ \cap S_{k+1} \ne \varnothing</math> wtedy powstaje nowa klasa <math>KZ’ = KZ \cap S_{k+1} \cup \{k+1\}</math>.</li> | |||
</ol> | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd26.png]] | |||
|valign="top"|Algorytm ten zastosujemy do obliczenia MKZ przy założeniu, że parami zgodnymi są: (1,2), (1,3), (1,5), (2,3), (2,4), (2,5), (3,5), (3,6), (4,6). Najpierw obliczamy zbiory R. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd27.png]] | |||
|valign="top"|Zapisując zbiory R w tabelce jak na planszy kolejno obliczamy klasy zgodności. Przykładowo: W pierwszym kroku wpisujemy zbiór {1}. Iloczyn {1} i <math>R_2 = \{1\}</math> powiększony o element 2 tworzy zbiór zgodny {1, 2} w kroku drugim. Analogicznie powstaje zbiór zgodny {1, 2, 3} w kroku trzecim. W kroku czwartym iloczyn {1, 2, 3} i <math>R_4</math>, powiększamy o element 4, stąd klasa {2, 4} do której należy dopisać już obliczony zbiór zgodny {1, 2, 3}. Wynik w postaci maksymalnych klas zgodności powstaje w kroku 6. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd28.png]] | |||
|valign="top"|Algorytm obliczania MKZ wg par sprzecznych. | |||
Zapisać pary sprzeczne w postaci koniunkcji dwuskładnikowych sum. | |||
Koniunkcję dwuskładnikowych sum przekształcić do minimalnego wyrażenia boolowskiego typu suma iloczynów. | |||
Wtedy MKZ są uzupełnieniami zbiorów reprezentowanych przez składniki iloczynowe tego wyrażenia. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd29.png]] | |||
|valign="top"|Wracając do poprzedniego przykładu wypisujemy pary sprzeczne: (1,4), (1,6), (2,6), (3,4), (4,5), | |||
(5,6). Dalej będziemy je zapisywali bardziej formalnie: (k1, k4), (k1, k6), (k2, k6), (k3, k4), (k4, k5), (k5, k6). | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd30.png]] | |||
|valign="top"|W celu obliczenia MKZ metodą par sprzecznych najpierw zapisujemy wyrażenie boolowskie typu „koniunkcja sum”. Następnie zmieniamy kolejność czynników (par). W otrzymanym wyrażeniu stosujemy zasady algebry Boole’a. Pozwalają one szybko wyznaczyć ostateczne wyrażenie typu „suma iloczynów”. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd31.png]] | |||
|valign="top"|Odejmując od zbioru wszystkich elementów zbiory reprezentowane przez poszczególne składniki tego wyrażenia uzyskujemy maksymalne klasy zgodności, oczywiście takie same jak poprzednio. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd32.png]] | |||
|valign="top"|Dysponując dwiema metodami obliczania MKZ-ów warto się zastanowić, który z nich stosować w konkretnym zadaniu. Duża liczba par zgodnych (w porównaniu do liczby par sprzecznych) sugeruje, że łatwiejsze powinny być obliczenia wg par sprzecznych. Z taką sytuacją mamy do czynienia dla par zgodnych podanych na planszy. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd33.png]] | |||
|valign="top"|Jeszcze inny sposób obliczania zbioru kolumn, które można skleić polega na zastosowaniu algorytmu kolorowania tzw. grafu niezgodności Wierzchołkami grafu niezgodności są kolumny <math>k_1, k_2, ...,</math> a jego krawędzie łączą sprzeczne (niezgodne) pary kolumn. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd34.png]] | |||
|valign="top"|Metodę omówimy na przykładzie par zgodnych i sprzecznych podanych na planszy. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd35.png]] | |||
|valign="top"|Na podstawie par sprzecznych tworzymy graf niezgodności. Zgodnie z zadaniem kolorowania grafu należy teraz znaleźć minimalną liczbę kolorów, które pozwoliłyby pokolorować wierzchołki tego grafu tak, aby żadne dwa wierzchołki o tym samym kolorze nie były połączone krawędzią. I taką sytuację podano na planszy. Wierzchołki o tym samym kolorze reprezentują zbiry kolumn, które można skleić. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd36.png]] | |||
|valign="top"|Chcąc porównać skuteczność obliczania klas zgodności za pomocą grafu niezgodności, zapiszemy teraz pary zgodne z planszy 32 na grafie zgodności. Jak widać trudno bezpośrednio z tego grafu odczytać MKZ. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd37.png]] | |||
|valign="top"|Natomiast dla odpowiedniego grafu niezgodności pokazanego na planszy łatwo jest wyznaczyć pokolorowanie wierzchołków dwoma kolorami tak aby żadne dwa wierzchołki o tym samym kolorze nie były połączone krawędzią. | |||
|} | |||
<hr width="100%"> | |||
{| border="0" cellpadding="4" width="100%" | |||
|valign="top" width="500px"|[[Grafika:TC_M6_Slajd38.png]] | |||
|valign="top"|Więcej na temat dekompozycji funkcji boolowskich można znaleźć w książce „Synteza układów logicznych”. | |||
|} | |} |
Wersja z 07:39, 29 sie 2006
![]() |
Niniejsza plansza przedstawia funkcje boolowskie odpowiadające składowym tej dekompozycji. |
![]() |
Kolumny zgodne można „sklejać”. pokolorowane kolumny na planszy wyjaśniają proces sklejania. |
![]() |
Dysponując parami kolumn zgodnych kolejno obliczamy „trójki”, a następnie „czwórki” zgodne: 0,3,4,6; 1,3,4,6; 1,4,5; 2,5,7. W zapisie formalnym:
|
![]() |
Z kolei w celu obliczenia składowych typu g, posłużymy się pokolorowanymi tablicami pokazanymi na planszy. |
![]() |
Uzyskując w rezultacie wielopoziomową strukturę bramek. |
![]() |
W celu obliczenia funkcji h, w poprzednio uzyskanej tablicy zmieniamy kolejność wierszy, a dla tak powstałej tablicy Karnaugha obliczamy minimalne wyrażenie funkcji h:
|
![]() |
W celu sprawniejszego obliczania MKZ wprowadzimy dwie nowe metody:
|
![]() |
Algorytm ten zastosujemy do obliczenia MKZ przy założeniu, że parami zgodnymi są: (1,2), (1,3), (1,5), (2,3), (2,4), (2,5), (3,5), (3,6), (4,6). Najpierw obliczamy zbiory R. |
![]() |
Odejmując od zbioru wszystkich elementów zbiory reprezentowane przez poszczególne składniki tego wyrażenia uzyskujemy maksymalne klasy zgodności, oczywiście takie same jak poprzednio. |
![]() |
Metodę omówimy na przykładzie par zgodnych i sprzecznych podanych na planszy. |
![]() |
Więcej na temat dekompozycji funkcji boolowskich można znaleźć w książce „Synteza układów logicznych”. |