TC Moduł 6

From Studia Informatyczne

Grafika:TC_M6_Slajd1.png Dekompozycja funkcji boolowskich.

Począwszy od drugiej połowy lat 80-tych intensywne prace badawcze prowadzone są nad metodami i algorytmami syntezy logicznej dla układów FPGA o architekturze TLU (Table Look-Up). 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 potrzebne były całkiem nowe rozwiązania, które wypracowano wg klasycznego modelu tzw. dekompozycji funkcjonalnej, wprowadzonej jeszcze w latach 60. przez Ashenhursta i Curtisa.


Grafika:TC_M6_Slajd2.png 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, jest 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.

Grafika:TC_M6_Slajd3.png Niech będzie dana funkcja boolowska f: \{0, 1\}^n \rightarrow \{0, 1\} oraz pewien podział zmiennych 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 \nu (A|B) (column multiplicity).

Grafika:TC_M6_Slajd4.png

Twierdzenie [Curtis]

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

f(A,B) = h(g_1(B),.., g_j(B),A) \  \iff \  \nu (A|B) \le  2^j

Schemat takiej dekompozycji jest przedstawiony na rysunku.


Grafika:TC_M6_Slajd5.png Sens fizyczny twierdzenia wyjaśnia przykład. Dla funkcji z tablicy na planszy kolumny są adresowane trzema zmiennymi \{x1, x2, x3\} względem których funkcja f jest symetryczna. Wiersze natomiast są adresowane zmiennymi \{x4, x5\}.

Grupy kolumn o adresach \{(0,0,1), (0,1,0), (1, 0, 0)\} i \{(1, 1, 0), (1, 0,1), (0,1,1) \} są odpowiednio równe. Zatem istnieje dekompozycja, w której zmienne \{x_1, x_2, x_3\} są przeadresowywane na \{g_1, g_2\}. Wówczas funkcja f może być wyspecyfikowana w tablicy, w której adresami kolumn są \{g_1, g_2\}, a wierszy odpowiednio wartości zmiennych \{x_4, x_5\}. Tablice te są jednocześnie tablicami prawdy funkcji reprezentujących składowe dekompozycji tzn. bloki g i h.


Grafika:TC_M6_Slajd6.png Znaczenie praktyczne dekompozycji wynika z konstrukcji typowych struktur programowalnych jakimi są układy FPGA. Nie wnikając w szczegóły (o układach FPGA powiemy więcej na wykładzie 12) budowę struktur FPGA można scharakteryzować następująco. Są to układy wyposażone w kilkadziesiąt (kilkaset) uniwersalnych komórek logicznych. Typowa komórka ma 4 wejścia i 1 wyjście, na którym realizowana jest dowolna funkcja boolowska 4 argumentów. Komórki umieszczone są w środowisku kanałów połączeniowych dzięki którym można je łączyć w dowolne struktury.

Z powyższego wynika, że funkcja f zdekomponowana na bloki g i h połączone jak pokazano na rysunku może być zrealizowana na trzech komórkach struktury FPGA. Później pokażemy, że proces realizacji funkcji boolowskich w strukturach FPGA uwzględniający metodę dekompozycji jest o wiele bardziej skuteczny niż metody przyjęte w systemach komercyjnych, w których w takim przypadku najpierw dokonuje sie minimalizacji funkcji, a dopiero potem sieć bramek jest odwzorowywana na komórki.


Grafika:TC_M6_Slajd7.png 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. na planszy. 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. Jak się póżniej przekonamy funkcja ta ma dekompozycję f = h(a,b,g_1(c,d,e), g_2(c,d,e)) o schemacie blokowym jak na rysunku.

Grafika:TC_M6_Slajd8.png Niniejsza plansza przedstawia funkcje boolowskie odpowiadające składowym tej dekompozycji.

Grafika:TC_M6_Slajd9.png W celu obliczania dekompozycji funkcji boolowskich nie w pełni określonych wprowadzimy pojęcie zgodności kolumn (tablicy dekompozycji).

Kolumny \{k_r, k_s\} są zgodne, jeśli nie istnieje wiersz i, dla którego elementy K_{ir}, K_{is} są określone i różne, tzn. odpowiednio: 0, 1 albo 1, 0.


Grafika:TC_M6_Slajd10.png Kolumny zgodne można „sklejać”. pokolorowane kolumny na planszy wyjaśniają proces sklejania.

Grafika:TC_M6_Slajd11.png Relacja zgodności jest zwrotna, symetryczna, ale nie jest przechodnia.

Pary zgodne umożliwiają wyznaczenie maksymalnych zbiorów kolumn zgodnych.

Zbiór K = {k_1,...,k_p} nazywamy maksymalnym zbiorem kolumn zgodnych (maksymalną klasą zgodności), jeżeli każda para k_i, k_j wzięta z tego zbioru jest zgodna oraz nie istnieje żaden inny zbiór kolumn zgodnych K', zawierający K.


Grafika:TC_M6_Slajd12.png Problem obliczania maksymalnych klas zgodnych można sprowadzić do znanego problemu obliczania maksymalnych klik w grafie lub do problemu kolorowania grafu.

Najprostsza metoda polega na łączeniu par kolumn zgodnych w trójki, trójek w czwórki itd. Usuwając zbiory mniejsze zawarte w większych oblicza się Maksymalne Klasy Zgodności.


Grafika:TC_M6_Slajd13.png Taką najprostszą metodę obliczania MKZ nazywać będziemy metodą bezpośrednią. Wg niej trzy pary zgodne (a, b), (b, c), (a, c) tworzą zbiór zgodny (a, b, c). Z kolei cztery „trójki”: (a, b, c), (a, b, d), (b, c, d), (a, c, d) tworzą „czwórkę tzn. 4 elementowy zbiór zgodny (a, b, c, d).

Grafika:TC_M6_Slajd14.png Zatem przystępując do obliczania dekompozycji należy najpierw obliczyć pary kolumn zgodnych. Dla funkcji, której tablica dekompozycji jest podana na planszy kolumny K0, K1 oraz K0, K2 są sprzeczne. Natomiast K0, K3 oraz K0, K4 są zgodne. W ten sposób wyznaczamy wszystkie pary kolumn zgodnych.

Grafika:TC_M6_Slajd15.png 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:
\{K_0, K_3, K_4, K_6\},
\{K_1, K_3, K_4, K_6\},
\{K_1, K_4, K_5\},
\{K_2, K_5, K_7\}.

Grafika:TC_M6_Slajd16.png Po wyznaczeniu maksymalnych zbiorów kolumn zgodnych (maksymalnych klas zgodności)

należy wybrać minimalną liczbę klas (lub podklas) pokrywającą zbiór wszystkich kolumn. Z kolei w takiej rodzinie zbiorów należy usunąć kolumny powtarzające się. Ostatecznie uzyskujemy: \{K_0, K_3, K_4, K_6\}, \{K_1, K_5\}, \{K_2, K_7\}. Kolumny należące do jednej klasy zgodności można sklejać.


Grafika:TC_M6_Slajd17.png 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.

Grafika:TC_M6_Slajd18.png Z kolei w celu obliczenia składowych typu g, posłużymy się pokolorowanymi tablicami pokazanymi na planszy.

Grafika:TC_M6_Slajd19.png 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...


Grafika:TC_M6_Slajd20.png Uzyskując w rezultacie wielopoziomową strukturę bramek.

Grafika:TC_M6_Slajd21.png 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:
g_1=\bar c d \bar e + cde
g_2=\bar c d \bar e + ce + \bar d e

Grafika:TC_M6_Slajd22.png 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:
h=\bar a \bar g_2 + bg_2 + ag_1

Grafika:TC_M6_Slajd23.png 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?

Grafika:TC_M6_Slajd24.png W celu sprawniejszego obliczania MKZ wprowadzimy dwie nowe metody:

  1. metodę wg par zgodnych
  2. metodę wg par sprzecznych


Grafika:TC_M6_Slajd25.png Niech E będzie relacją na zbiorze V = \{v_1, ...,v_n\}, tzn. zbiorem par zgodnych (sąsiednich) v_i, v_j: i, j \in {1, ..., n} oraz i \ne j. Obliczenie (maksymalnych) klas zgodności w zbiorze V przy danej E sprowadza się do wykonania następujących czynności.
  • Zapisujemy elementy v w rodzinach S_j zgodnie z zasadą v_i \in S_j tylko wtedy, gdy v_j, v_i jest parą zgodną oraz i < j.
  • Jeżeli RKZ_k jest rodziną klas zgodności uzyskaną w k-tym kroku algorytmu, to rodzinę RKZ_{k+1} uzyskujemy, obliczając przecięcie każdej KZ \in RKZ_k ze zbiorem S_{k+1}. Wyróżniamy przy tym następujące przypadki:

  1. S_{k+1} = \varnothing i wtedy RKZ_{k+1} jest powiększona o klasę KZ = \{k+1\};
  2. KZ \cap S_{k+1} = \varnothing wtedy klasa KZ nie ulega zmianie;
  3. KZ \cap S_{k+1} \ne \varnothing wtedy powstaje nowa klasa KZ’ = KZ \cap S_{k+1} \cup \{k+1\}.


Grafika:TC_M6_Slajd26.png 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.

Grafika:TC_M6_Slajd27.png 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 R_2 = \{1\} 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 R_4, 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.

Grafika:TC_M6_Slajd28.png 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.


Grafika:TC_M6_Slajd29.png 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).


Grafika:TC_M6_Slajd30.png 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”.

Grafika:TC_M6_Slajd31.png 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.

Grafika:TC_M6_Slajd32.png 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.

Grafika:TC_M6_Slajd33.png 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 k_1, k_2, ..., a jego krawędzie łączą sprzeczne (niezgodne) pary kolumn.

Grafika:TC_M6_Slajd34.png Metodę omówimy na przykładzie par zgodnych i sprzecznych podanych na planszy.

Grafika:TC_M6_Slajd35.png 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ć.

Grafika:TC_M6_Slajd36.png 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.

Grafika:TC_M6_Slajd37.png 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ą.

Grafika:TC_M6_Slajd38.png Więcej na temat dekompozycji funkcji boolowskich można znaleźć w książce „Synteza układów logicznych”.