OPIS OPROGAMOWANIA DEMAIN-ROM
Transkrypt
OPIS OPROGAMOWANIA DEMAIN-ROM
OPIS OPROGAMOWANIA DEMAIN-ROM 1 Program DEMAIN Opracowanie: dr Mirosława Nowicka 1. WSTĘP System DEMAIN jest pakietem oprogramowania do dekompozycji i odwzorowania technologicznego złożonych układów kombinacyjnych opisywanych tablicami zapisanymi w standardzie berkeleyowskim, z przeznaczeniem do realizacji w strukturach programowalnych typu FPGA zarówno dla pamięci typu LUT jak i dla standardowych wbudowanych bloków pamięci typu ROM. W przypadku układów kombinacyjnych budowanych w oparciu o właściwości arytmetyki rozproszonej (filtry cyfrowe) wystarczy, a nawet lepiej, podać wektor współczynników. Algorytm wykorzystany w programie jest oparty na: • dekompozycji funkcjonalnej, łączącej dwie jej procedury: szeregową (rozłączną i nierozłączną) oraz równoległą; ma on za zadanie przekształcić układ wejściowy w wielopoziomową sieć układów o zadanych parametrach (komórki LUT o określonej liczbie wejść i wyjść lub standardowe bloki typu ROM lub kombinację struktur typu LUT i ROM); • redukcji argumentów, umożliwiającej eliminację zbędnych argumentów funkcji, które argumenty się zazwyczaj w pierwotnej jednowyjściowej funkcji, a także w wielowyjściowych blokach budowanych za pomocą arytmetyki rozproszonej i po rozkładzie wielowyjściowego bloku wykonanego za pomocą dekompozycji równoległej. Dekompozycja równoległa ma wbudowaną procedurę redukcji argumentów, co oznacza, że otrzymane bloki będące wynikiem jej rozkładu nie mają zbędnych argumentów. Schematy dekompozycji równoległej i szeregowej pokazano na rys. 1. 2 a) b) X V U W X U V W G G1 G2 H Y Y1 Y2 Rys. 1. Dekompozycja: a) równoległa; b) szeregowa. Oznaczenia: X – zbiór argumentów(wejść układu); V, U, W – podzbiory zbioru X; Y – zbiór wszystkich wyjść układu; Y1, Y2 podzbiory zbioru Y. Dla dekompozycji równoległej (rysunek 1.a): V ∪ U ∪ W = X (zbór wszystkich wejść), Y1 ⊂ Y, Y2 ⊂ Y, Y1 ∩ Y2 = ∅, Y1 ∪ Y2 = Y. Dla dekompozycji szeregowej(rys. 1.b): V ∪ U – zbiór wszystkich wejść i W ⊂ V, jeśli W ≠ ∅ to dekompozycja nierozłączna, W = ∅ to dekompozycja rozłączna. Dekompozycja równoległa polega na podziale zbioru funkcji wyjściowych na dwa rozłączne podzbiory i realizacji każdego z nich oddzielnie. Ma to istotny wpływ na jakość struktury wielopoziomowej w przypadku, gdy nie wszystkie wyjścia układu są zależne od wszystkich argumentów funkcji. Można wtedy podzielić wyjścia układu na dwa rozłączne zbiory tak, że przynajmniej jeden z nich jest blokiem o mniejszej złożoności(mniejsza liczba argumentów wejściowych), a zatem łatwiejszy do dalszej dekompozycji. Dekompozycja szeregowa polega na zastąpieniu bloku o zadanej liczbie wejść i wyjść dwoma blokami o mniejszej złożoności (mniejsza liczba wejść do bloku). W przeciwieństwie do dekompozycji równoległej, dekompozycja szeregowa zwiększa liczbę poziomów logicznych. 2. STRUKTURA PROGRAMU DEMAIN Praca z programem DEMAIN polega na wyborze strategii przez użytkownika w każdym kroku dekompozycji. Wybór strategii ułatwiają narzędzia, które zostały w tym celu wprowadzone. Taki interakcyjny sposób działania daje więc bogate możliwości w realizacji 3 struktur wielopoziomowych, a przeprowadzane badania wykazują, że zarówno zmiana kolejności stosowania poszczególnych typów dekompozycji, jak też parametry (liczba wejść i wyjść) bloku G w dekompozycji szeregowej, silnie wpływają na końcową strukturę układu, którą w efekcie można – po kilku przeprowadzonych doświadczeniach – dobrać tak, aby uzyskać polepszenie parametrów końcowej struktury układu. System Demain ma dwie podstawowe opcje wybierane z menu głównego: [1] – Decomposer-Demain-Cell [2] – Decomposer-Demain-ROM Opcja [1] służy do rozkładu dowolnej funkcji boolowskiej zapisanej w postaci tablicy prawdy w standardzie Berkeleya na komórki (bloki funkcji) o dowolnym, zadanym przez użytkownika rozmiarze (liczba_wejść_komórki>liczba_wyjść, dla komórek Xilinx’a liczba_wejść=liczba_wyjść=0). Opcja ta nie będzie tu omawiana, gdyż była już wielokrotnie opisywana w różnych publikacjach {[ ]. Jej opis jest także umieszczony na stronie internetowej WWW.ZPT.Tele.pw.edu.pl. 2.1. Struktura dekompozera Decomposer-Demain-ROM Opcja [2] służy do dekompozycji układów kombinacyjnych z pamięciami ROM oraz w strukturach mieszanych (pamięci wbudowane ROM i komórki (LUT). Program jest przystosowany do dwóch typów pamięci ROM: M512 o pojemności 512 bitów oraz M4K o pojemności 4K bitów. Układy do dekompozycji są opisywane: − tablicami prawdy zapisanymi w standardzie Berkeleya, lub − wektorem współczynników filtrów cyfrowych (arytmetyka rozproszona). Dla opcji Dekomposer-Demain-ROM została wprowadzona możliwość rozkładu układu początkowego na dowolną liczbę bloków (a nie tylko na dwa jak przy dekompozycji równoległej) o zadanych przez użytkownika parametrach. Opcja ta może być tylko stosowana w przypadku, gdy dane wejściowe są podawane w postaci pliku z wektorem współczynników filtru cyfrowego(arytmetyka rozproszona), a nie tablicą prawdy (opis w punkcie 2.1.2). Dla dekompozycji szeregowej wprowadzono szczególny sposób przeszukiwania kolejnych kombinacji zmiennych wejściowych dla argumentów funkcji G. Ma to na celu uproszczenie struktury rozkładu i ewentualne zmniejszenie liczby poziomów logicznych. Zastosowano następującą kolejność przeszukiwania: 1. Przeszukiwanie argumentów będących wejściami bezpośrednimi(bez argumentów będących wyjściami bloków pamięci z poprzednich poziomów). Jeśli istnieje jakiekolwiek rozwiązanie o zadanej liczbie wejść do bloku G, to wybierane jest najlepsze (ale spośród tych o bezpośrednich wejściach). Nie przeszukuje się innych kombinacji. 2. Jeśli nie było rozwiązania w punkcie jeden, przeszukiwane są te z pozostałych kombinacji, które dla argumentów funkcji G zawierają, co najmniej jeden argument, od którego nie są zależne wszystkie wyjścia. Jeśli istnieje, wybierane jest spośród nich najlepsze i zapamiętywane jako rozwiązanie. Nie przeszukuje się dalszych kombinacji. 4 3. 4. Jeśli nie było rozwiązania w punkcie 2 (nie było więc również rozwiązania w punkcie 1), przeszukiwane są kombinacje, które mają, co najmniej jeden argument będący wyjściem Lut z poprzednich poziomów i pozostałe wejścia bezpośrednie, wspólne dla wszystkich wyjść. Jeśli istnieje rozwiązanie, to jest ono zapamiętywane. Nie jest ono jednak traktowane jako ostateczne. Wykonywany jest punkt 4. Przeszukiwane są pozostałe kombinacje, jeszcze nie rozpatrywane. Jeśli jest rozwiązanie, a było również w punkcie 3, to o wyborze decyduje liczba wyjść z funkcji G. Jeśli nie było rozwiązania w punkcie 3, to oczywiście, jeśli tu istnieje to jest zapamiętywane. Przykład i0 i1 i2 i3 i4 i5 i6 g1 g2 f1: 1 1 1 1 1 0 1 1 1 f2: 1 1 1 0 1 1 1 1 1 f3: 1 1 1 0 1 1 1 1 1 Jeśli poszukujemy rozwiązania z funkcją G(4,k),k = 1,2,3, to w pierwszej kolejności brane są pod uwagę kombinacje (czerwone): (io, i1, i2, i4), (i0, i1, i2, i6), (i0, i1, i4, i6), (i0, i2, i4, i6) oraz (i1, i2, i4, i6). Jeśli istnieje dla nich jakiekolwiek rozwiązanie, to nawet jeśli dla innych kombinacji byłoby lepsze, to nie jest przeprowadzane dalsze przeszukiwanie. W drugiej kolejności (pod warunkiem, że nie ma rozwiązania spośród samych „czerwonych”) brane są kombinacje(czerwone z czarnymi lub same czarne): (i0, i1, i2, i3), (i0, i1, i2, i5), ....., (i3, i4, i5, i6). Jeśli istnieje dla nich rozwiązanie, to przeszukiwanie jest zakończone. W przeciwnym przypadku następne kombinacje to czerwono-niebieskie: (io, i1, i2, g1),: (io, i1, i2, g1), ........(i4, i6, g1, g2). Jeśli istnieje rozwiązanie, to najlepsze jest zapamiętywane, ale mimo tego badane są pozostałe kombinacje (czerwono-czarno-niebieskie i czarno- niebieskie oraz niebieskie) : (i0, i1, i3, g1), (i0, i1, i3, g2),...(i3, i5, g1, g2)....(i5, i6, g1, g2). Najlepsze rozwiązanie(jeśli istnieje) jest porównywane z tym ewentualnie zapamiętanym w punkcie poprzednim. O wyborze rozwiązania decyduje jedynie liczba wyjść bloku G. Jeśli liczba wyjść jest identyczna w obu przypadkach, to wybierane jest rozwiązanie z poprzedniego punktu (czerwono-niebieskie) nawet gdy liczba kolorów grafu niezgodności jest większa. 2.1.1. Wprowadzone oznaczenia Jeśli funkcja początkowa nie ma etykiet (nazw symbolicznych) dla zmiennych wejściowych i wyjściowych, program nadaje wejściom etykiety rozpoczynające się literą i połączoną z kolejnymi liczbami od 0 do k-1 (k – liczba wejść), a dla wyjść etykiety rozpoczynają się literą o połączoną z kolejnymi liczbami począwszy od 0 do j-1 (gdzie j to liczba wyjść). Np. jeśli funkcja posiada 5 wejść i 2 wyjścia, to wejściom zostaną przypisane następujące etykiety: i0, i1, i2, i3, i4.; wyjściom: o0, o1. Dekompozycja szeregowa tworzy węzły logiczne (są to wyjścia z funkcji G , często nazywanej funkcją „odrywaną”). Przypisywane są im etykiety postaci gi_j rozpoczynające się 5 literą g połączoną z liczbą odpowiadającą kolejno wykonanej dekompozycji, a następnie po symbolu _ podany jest numer wyjścia funkcji „odrywanej”. Np. po wykonaniu dekompozycji szeregowej z funkcją „odrywaną” o parametrach (5,2), powstaną dwa nowe węzły logiczne. Jeśli jest to piąta dekompozycja wykonana w programie to będą miały nazwy g4_0, g4_1. 2.1.2. Stosowane ułatwienia • Na każdym etapie rozwiązania, przy opisie funkcji poddawanej aktualnie dekompozycji, oprócz jej liczby wejść i wyjść, podawane są również ich rzeczywiste nazwy symboliczne. Na ich podstawie można często wnioskować o dalszej strategii rozwiązania. • Na każdym etapie rozkładu (dekompozycja równoległa lub szeregowa), w wyniku którego otrzymano bloki będące komórkami, pojawia się informacja z liczbą aktualnie otrzymanych komórek. Dla ułatwienia, pojawia się również informacja postaci: TOTAL globalna_liczba_komorek cells podająca globalną liczbę komórek uzyskanych od początku rozkładu do aktualnego momentu. • Podgląd na dekompozycję równoległą. Oznacza to, że na każdym etapie rozkładu, przy opisie funkcji poddawanej aktualnie dekompozycji, przed wykonaniem jakichkolwiek operacji, wyświetlany jest wynik dekompozycji równoległej (w postaci parametrów bloków rozkładu – liczba wejść i wyjść każdego z nich) wykonanej, ale nie zrealizowanej. Wykonanej, bo program wykonał dekompozycję równoległą tylko w celu określenia parametrów bloków podziału, aby ułatwić użytkownikowi wybór odpowiedniej strategii. Natomiast nie zrealizowanej, ponieważ taka realizacja może być wykonana tylko na życzenie użytkownika, a użytkownik w chwili podjęcia decyzji jest świadomy jej wyniku. • Podgląd na dekompozycję szeregową wykonywaną, ale nie zrealizowaną. Ma to miejsce wtedy, gdy nie istnieje rozwiązanie dla funkcji o ustalonych z góry parametrach, ale istnieje rozwiązanie o większej liczbie wyjść, niż żądana. Wtedy ta dekompozycja nie wykona się, ale na ekranie pojawia się informacja z opisem wszystkich jej możliwych parametrów. Ma ona na celu ułatwienie wyboru ewentualnych nowych parametrów dla funkcji G, lub na zmianę strategii dekompozycji. W kolejnych kolumnach podglądu jest pokazana: − liczba wejść funkcji G, − liczba wyjść funkcji G. − liczba kolorów, którymi byłaby kodowana funkcja G, − numery zmiennych wchodzących w skład argumentów funkcji, przy czym jeśli stosowana była opcja ze zmienionym porządkiem przeszukiwania wejść (jest to opcja „c” wyboru metody przeszukiwania wejść dla funkcji G – patrz p. 2.3), to pojawi się przed nimi: znacznik „T” informujący, że rozwiązanie to będzie zawierać zmienne należące do argumentów wszystkich wyjść, 6 albo - znacznik „F” informujący, że rozwiązanie będzie zawierać zmienne od których nie są zależne wszystkie wyjścia (dla tych wyjść będą zmienne nadmiarowe). W przypadku braku rozwiązania o zadanych parametrach, wyświetlana jest tylko liczba wejść równa liczbie wyjść oraz minimalna liczba kolorów, dla których nie istnieje rozwiązanie. W przypadku istnienia dekompozycji nierozłącznej po znaczniku „Nd” pojawi się liczba kolorów, którymi byłaby kodowana funkcja G. Jeśli próby dekompozycji dla pewnego układu są przeprowadzane kilkakrotnie, ale nie są one realizowane ze względu na brak rozwiązania, to po każdej ostatnio wykonywanej ale nie zrealizowanej dekompozycji, wyświetla się podgląd zawierający informacje nie tylko o tej ostatniej, ale również o wszystkich poprzednio przeprowadzonych. Jeśli wszystkie kolumny danego wiersza oprócz pierwszej zawierają same zera, oznacza to, że nie była jeszcze przeprowadzana próba dekompozycji szeregowej ze składową o liczbie wejść równej wartości zawartej w pierwszej kolumnie. Np., jeśli dla dekompozycji szeregowej zostały wykonane próby dla funkcji G(3,1) (3 wejścia, 1 wyjście), G(5,2), a na koniec dla G(2,1), to po każdej nie udanej próbie wyświetla się podgląd ostatniej i wszystkich poprzednich, czyli w tym przypadku: 1 2 3 4 5 000 2300 23F015 00000 3 5 T 0 1 2 4 6 Nd 4 Z powyższego podglądu wynika, że aktualnie rozpatrywany układ ma dekompozycję szeregową z funkcją składową G(3,2) (3 – liczba wejść, 2 – liczba wyjść). Informacje te są zapisane w 3-cim wierszu. 1-sza kolumna to liczba wejść do G, 2-ga kolumna to liczba wyjść, 3-cia kolumna to liczba kolorów, za pomocą których jest kodowana funkcja (tu 3), trzy kolumny (5,6,7) odpowiadają numerom argumentów układu, które zrealizują tę dekompozycję, a znacznik F w kolumnie 4 informuje, że od zmiennych tych nie zależą wszystkie wyjścia rozkładanej funkcji. Podobnie w wierszu 5 są zawarte informacje: istnieje dekompozycja z funkcją G(5,3) kodowaną 5-cioma kolorami. Taka dekompozycja istnieje dla zmiennych o numerach 0,1, 2, 4, 6 zapisanych w kolumnach 5,6,7,8,9 od których są zależne wszystkie wyjścia rozkładanego układu (znacznik T w kolumnie 4). Istnieje również dekompozycja nierozłączna (znacznik Nd –kolumna 10,11)kodowana 4-ema kolorami (kolumna 12), a więc dekompozycja nierozłączna g(5,2) ( g oznacza składową nierozłącznej dekompozycji szeregowej). Dla rozpatrywanego układu nie istnieje dekompozycja z funkcją składową zawierającą 2 wejścia, ponieważ wiersz 2 kolumna 2 ma wartość równą liczbie wejść. Dla składowej z czterema wejściami, nie zostało jeszcze przeprowadzone doświadczenie, ponieważ wszystkie kolumny czwartego wiersza oprócz pierwszej zawierają zera. Teraz, w zależności od potrzeb, można zdecydować się na jedną z tych dekompozycji, 7 lub przeprowadzić inne próby z inną liczbą argumentów wejściowych funkcji G, lub przejść do wykonania dekompozycji równoległej, której parametry bloków podziału są już znane. Aby wykonać dekompozycję szeregową wykonywaną, ale nie zrealizowaną (wynik jej zapamiętany w podglądzie), należy wykonać opcję c dla wyboru opcji strategii dekompozycji (patrz p. 2.3 ). Do liczby wejść wprowadzić wartość z pierwszej kolumny, a do liczby wyjść wartość z drugiej kolumny. Jeśli istnieje dekompozycja szeregowa rozłączna i nierozłączna, to przed wykonaniem pojawia się pytanie, którą z nich wykonać. 8 Włączenie podglądu na „budowę” tablicy prawdy filtru przed rozpoczęciem rozkładu Dotyczy to tylko przypadku, gdy danymi wejściowymi jest wektor współczynników filtru, a nie tablica prawdy. Na podstawie wektora współczynników filtru, program wyznacza liczbę wyjść tablicy prawdy i dokonuje badania zależności poszczególnych wyjść od argumentów wejściowych. Wynik podaje w postaci tablicy, gdzie kolejne kolumny reprezentują argumenty wejściowe, a wiersze wyjścia. Każdy wiersz posiada na pierwszej pozycji numer wyjścia. Kolejne pozycje to 0 lub 1. 0 oznacza, że to wyście nie zależy od argumentu (znajdującego się na tej pozycji), 1 zależy. Rozkład zależności argumentów dla poszczególnych wyjść, tworzony jest bez budowy tablicy prawdy. Przeprowadzana analiza oparta jest tylko na własnościach arytmetyki rozproszonej. Jest ona bardzo szybka (kilka sekund) nawet dla wielu współczynników (>20) i wielu wyjść(>20). Na podstawie wyświetlanego podglądu, użytkownik może wykonać własny rozkład na bloki lub nie. Jeśli wykonywany jest własny rozkład na bloki, to należy podawać kolejno liczbę wyjść danego bloku, a następnie numery wyjść należących do danego bloku. Można tworzyć dowolnie dużo bloków. Wprowadzenie 0 przy rozmiarze bloku spowoduje zakończenie wprowadzania. Jeśli pozostaną jakieś numery wyjść nie wprowadzone, to zostaną one przypisane do jednego, następnego bloku. Uzasadnienie: korzystanie tylko z podglądu Demaina na dekompozycję równoległą, zwłaszcza dla „dużego” filtru, może być nieefektywne. Taki podgląd na dekompozycję równoległą może być generowany dość długo dla dużej tablicy prawdy (nawet powyżej 10 minut). Ponadto jest to proponowany rozkład tylko na dwa bloki. Dalsze dekompozycje mogą dzielić dalej, ale za każdym razem na dwa bloki. Przeprowadzane testy potwierdzają, że tylko wnikliwa, początkowa analiza dokonywana dla całego filtru pozwala dokonać efektywnego podziału tak, aby zminimalizować liczbę bloków ROM i poziomów w realizacji układu 2.1.3. Strategie dekompozycji Na początku współpracy z programem pojawia się zapytanie: Do you prefer serial decomposition with normal order the imputs ? : n OR With changed order the inpus ? : c Odpowiedź na pytanie spowoduje wybór metody przeszukiwania zmiennych wejściowych dla funkcji G w dekompozycji szeregowej. opcja „n” – oznacza przeszukiwanie zmiennych według ich kolejności, opcja „c” – oznacza, że w pierwszej kolejności przeszukiwane są zmienne należące do argumentów wszystkich wyjść, a dopiero później są przeglądane pozostałe kombinacje zmiennych. Ponieważ ta wersja dekompozera ma na celu minimalizację liczby poziomów 9 logicznych powstającej struktury, wybór kolejnych kombinacji dla dekompozycji szeregowej jest szczególny, co jest opisano w 2.1. Zalecane stosowanie opcji ”c”. Jedną z najważniejszych czynności w realizacji programu, od której zależą wyniki rozwiązania, jest wybór strategii postępowania. Można wybrać jedną z czterech opcji strategii: p dla dekompozycji równoległej, dwie: s i c dla dekompozycji szeregowej oraz r do zapamiętywania bloku w pamięci ROM. Pojawiają się one na ekranie w postaci: Do OR OR OR you prefer parallel decomposition ? : p. continue serial decomposition as suggested ? : s continue serial dekomposition with changed parameters ? : c save xxxxx ? : r Dla dekompozycji szeregowej mamy do wyboru dwie opcje: s i c. Opcja s – dekompozycja szeregowa z parametrami sugerowanymi przez program. Dla każdej funkcji poddawanej dekompozycji, na początku są sugerowane parametry odpowiadające komórce (parametry jej wprowadzone są przed uruchomieniu programu), a jeśli dla takich parametrów nie istnieje rozwiązanie, sugerowane są inne parametry które doprowadzą do końcowego rozwiązania (nawet użytkownika bez „większej” wiedzy na temat układów logicznych), ale nie musi to być rozwiązanie optymalne (i często nie jest). Opcja c – dekompozycja szeregowa z parametrami wprowadzonymi z klawiatury przez użytkownika. Pozwala to na zmianę parametrów sugerowanych. Po wprowadzeniu znaku „c” z klawiatury pojawia się wydruk żądający wprowadzenia parametrów nowego bloku ( są to parametry dla funkcji G), czyli liczby jego wejść i wyjść. Można więc wprowadzić inne parametry, niż sugeruje program. Jeśli chcemy wykonać dekompozycję z podglądu na dekompozycję szeregową, to po wprowadzeniu znaku c i wciśnięciu klawisz [Enter], jako liczbę wejść do bloku należy podać wartość pierwszej kolumny odpowiedniego wiersza, a do liczby wyjść należy wpisać wartość z drugiej kolumny tego samego wiersza. Taka dekompozycja wykona się natychmiast bez przeszukiwania innych argumentów, ponieważ jest ona zapamiętana w programie. Aby mieć większe pole działania przy pierwszym wykonywaniu doświadczenia z ustaloną liczbą wejść do funkcji G, najwygodniej w parametrze liczba wyjść dla opcji c wprowadzić 1. Otrzymamy wtedy najlepsze rozwiązanie: jeśli istnieje, to wykona się, jeśli nie istnieje to w podglądzie na dekompozycję szeregową wyświetli się najlepsze rozwiązanie z zadaną liczbą wejść do funkcji G. Wprowadzenie za pomocą opcji c: liczba wejść-dowolna liczba dodatnia mniejsza od liczby wejść do rozkładanego aktualnie bloku, liczba wyjść = 0, jest równoważna redukcji argumentów. Jeśli taka dekompozycja istnieje to oznacza, że liczba argumentów rozkładanego bloku jest nadmiarowa i po tej dekompozycji te nadmiarowe wejścia zostały zredukowane. Wprowadzenie za pomocą opcji c liczby wejść = 0 i liczby wyjść = 0 spowoduje zakończenie rozkładania aktualnego układu. Układ ten zostanie zapamiętany w pliku o tej samej nazwie, jak nazwa pliku, z którego został odczytany, ale plik ten ma wtedy rozszerzenie *.end. Następnie, jeśli istnieją inne pliki do rozkładu, program kontynuuje pracę, jeśli nie – kończy. Program nie wraca już sam do plików o rozszerzeniu *.end. 10 Opcja p – dekompozycja równoległa. Może być wykonana na blokach o rozmiarach podanych w podglądzie na dekompozycję równoległą lub użytkownik może zmienić sugerowane parametry bloków przez podanie liczby wyjść jednego bloku, którego wyjścia mają być zależne od największej lub najmniejszej liczby argumentów. Drugi blok będzie zawierał pozostałe wyjścia. Na ekranie po wprowadzeniu znaku p w strategiach dekompozycji pojawia się napis: Change block size ? (y/n) : Po wprowadzeniu znaku n jeden z bloków będzie aktualnym blokiem do dalszego rozkładu, natomiast drugi zapamiętywany jest w pomocniczym pliku, do którego program powróci w odpowiednim momencie. Po wprowadzeniu znaku y pojawia się wydruk: Block of inputs with min. no. of argoments ?: m Block of inputs with max. no. of argoments ?: l Bez względu na to jaki wprowadzamy znak m lub p pojawia się wydruk: number of outputs (<liczba_wyjsc): Należy teraz wprowadzić ustaloną liczbę wyjść. Dopiero teraz program utworzy jeden blok zależny od najmniejszej lub największej liczby argumentów, a do drugiego przypisze pozostałe wyjścia. Testowanie przykładów pokazało, ze zmiana rozmiarów bloków z opcją l jest bardzo przydatna. Z reguły, w pierwszej kolejności, o ile jest to możliwe, chcemy „zapełnić” całkowicie pamięci ROM lub odciąć te wyjścia, które bez dodatkowych dekompozycji nie mogą być realizowane w pamięciach ROM. Opcja r – występuje tylko wtedy, gdy aktualnie rozpatrywany blok może być umieszczony w pamięci ROM M512 lub M4K. Wtedy przed znakiem ? w miejsce xxxx podany jest typ pamięci ROM oraz jej rozmiar. Użytkownik ma wtedy świadomość czy opłacalne jest umieszczanie bloku w pamięci ROM. Np. jeśli blok ma rozmiar: 7 wejść i 1 wyjście, to wśród możliwych strategii pojawi się: OR save ROM – M512(7x4) ? : r Wówczas użytkownik musi zadecydować, czy jest to opłacalne. Oczywiście zależy to kryteriów, jakie nałożone są na dany rozkład. – W programie przyjęto następujące oznaczenia dla różnych konfiguracji pamięci M512 i M4K: M4K(12x1) – blok o 12 wejściach i 1 wyjściu, M4K(11x2) – blok o 11 wejściach i 2 wyjściach, M4K(10x4) – blok o 10 wejściach i 4 wyjściach, 11 M4K(9x8) – blok o 9 wejściach i 8 wyjściach, M4K(8x16) – blok o 8 wejściach i 16 wyjściach, M4K(7x32) – blok o 7 wejściach i 32 wyjściach, M4K(6x64) – blok o 6 wejściach i 64 wyjściach, M512(9x1) – blok o 9 wejściach i 1 wyjściu, M512(8x2) – blok o 8 wejściach i 2 wyjściach, M512(7x4) – blok o 7 wejściach i 4 wyjściach, M512(6x8) – blok o 6 wejściach i 8 wyjściach, M512(5x16) – blok o 5 wejściach i 16 wyjściach, 12 3. PLIKI WYNIKOWE PROGRAMU DEMAIN Program generuje pliki o rozszerzeniach ( * oznacza nazwę pliku pierwotnego bez rozszerzenia): *.ans. W pliku tym przechowany jest zapis wszystkich kroków wykonywanych przez użytkownika w trakcie wykonywania rozkładu. Na podstawie tego pliku można prześledzić wszystkie strategie używane w trakcie rozkładu. *.rpt. Zapisane są tu podstawowe informacje o wykonanej dekompozycji na komórki: − liczba wejść układu i nazwy symboliczne wejść, − liczba wyjść układu i nazwy symboliczne wyjść, − liczba zmiennych pomocniczych (utworzonych węzłów logicznych) i ich nazwy, − liczba komórek logicznych, − liczba poziomów logicznych komórek. *.out. W pliku tym są zapisane wszystkie tablice prawdy otrzymanych komórek logicznych. Przed każdą z tablicą prawdy, podane są jej rzeczywiste nazwy zmiennych wejściowych i wyjściowych. Komórki logiczne wypisane są kolejnymi poziomami, najpierw komórki pierwszego poziomu, następnie drugiego itd. Jeśli w rozkładzie wykorzystywane są pamięci ROM, to są one również tu umieszczone, ale bez wypisywania tablicy prawdy. Pliki *.rpt i *.out są potrzebne do wykonania tłumaczenia na język AHDL. *.inf. Jest to plik informacyjny, gdzie zapisywane są kolejno: − nazwa pliku pierwotnego( z tablica prawdy funkcji boolowskiej). − rozmiar komórki, − liczba wejść układu − liczba wyjść układu − liczba otrzymanych komórek − liczba otrzymanych pamięci typu ROM M512 − liczba otrzymanych pamięci typu ROM M4K − liczba otrzymanych poziomów − informacja, ile jest komórek i pamięci ROM w każdym kolejnym poziomie komórek logicznych bez rozróżnienia typów pamięci. − Do rozkładu funkcji na komórki (wybór z głównego menu opcji [1] DekomoposerDemain-Cell) tworzone są dodatkowe pliki: *.win – w pliku tym jest przechowywany rozmiar okna z rysunkiem, *.dat – w pliku tym jest przechowywana specjalnie zapamiętana „treść” ekranu z rysunkiem oraz 13 *.tdf – plik z zapisem rozwiązania w języku AHDL. Plik ten może być wygenerowany na życzenie użytkownika po wprowadzeniu do okienka „Option” znaku [2] (DemainToAHDL) i oczywiście po uprzednim wykonaniu rozkładu za pomocą dekompozera Demain. 4. INSTRUKCJA OBSŁUGI System Demain jest programem napisanym w języku C++, w środowisku Windows pod Borlandem C++(5.0). Do uruchomienia systemu wymagane: demain.exe i Cw3230.dll umieszczone w tym samym katalogu Uruchomienie: kliknięcie myszą na plik demain.exe (wyświetlony w z dostępnego pakietu Winows np. Windows Commander, Eksplorator Windows itp.) lub wywołanie z systemowej linii poleceń przez podanie nazwy demain.exe. Po uruchomieniu systemu pojawia się okno z logo systemu i dopiero po wciśnięciu [Enter] następuje przejście do właściwego okienka z menu głównym, w którym następuje właściwy wybór odpowiedniego dekompozera i dalsza z nim praca. Szkic schematu postępowania zamieszczono na rys. 2. Aby ułatwić pracę z Demainem, w punkcie 5 zamieszczono przykłady wraz z analizą rozwiązań. 5. PRZYKŁADY Po uruchomieniu systemu w sposób podany w punkcie 4 pojawia się (rys. 2) logo programu. Wciśnięcie klawisza [Enter] spowoduje przejście do okna z menu głównym oraz okna z napisem: Option. MENU [1] Decomposer-Demain-Cell [2] Decomposer-Demain-ROM [q] Quit : Należy wprowadzić do niego jeden z trzech znaków: 1, 2 lub q. Przeprowadzany rozkład będzie rozkładem na pamięci ROM i ewentualnie na komórki, należy więc wprowadzić znak 2. Po wprowadzeniu znaku 2, pojawia się nowe okno z menu dekompozera na pamięci ROM. 14 Logo systemu [Enter] MENU [1] Decomposer-Demain-Cell [2] Decomposer-Demain-ROM [q] Quit 1 2 Przejście do menu dekompozera wykonującego rozkład na komórki M E N U -- R O M [1] Decomposer with table [2] Decomposer with FIR [3] Show Network [q] Quit 1 Wprowadzenie nazwy pliku z tablicą prawdy i rozmiaru komórek FPGA 2 Wprowadzenie nazwy pliku z wektorem współczynników FIR i rozmiaru komórek FPGA Wydruk tablicy zależności poszczególnych, wszystkich wyjść układu od wszystkich argumentów układu Wykonać rozkład na bloki ? (y/n) y n Wprowadzanie kolejno rozmiarów bloków wraz numerami wyjść należącymi do nich Wybór strategii dekompozycji spośród opcji: s, c, p, r. Dekompozycja jest wykonywana do momentu rozkładu całego układu początkowego na pamięci ROM i komórki Rys.2. Szkic obsługi systemu DEMAIN 15 Jednocześnie pojawia się okienko M E N U -- R O M, , do którego należy wprowadzić jeden z czterech znaków: 1, 2, 3 lub q. M E N U -- R O M [1] Decomposer with table [2] Decomposer with FIR [3] Show Network [q] Quit 5.1. Przykład rozkładu filtru sym8 danego za pomocą tablicy prawdy Zakładając, że dane są zapisane tablicą prawdy, należy wprowadzić znak 1. W tym momencie pojawi się w okienku poniżej napis: Name of file : i tu należy wprowadzić nazwę pliku z tablicą prawdy. Po wprowadzeniu nazwy pliku sym8.pla (jest to plik z tablicą filtru cyfrowego) w następnym wierszu tego samego okienka pojawiają się napisy z żądaniem wprowadzenia rozmiaru komórki: kolejno liczby jej wejść i wyjść. Należy kolejno wprowadzić liczbę 4, a następnie 1. Będzie to rozmiar komórek FLEX. Poniższe okienko prezentuje kompletny zapis. Name of file : sym8.pla SIZE OF selected FPGA cell no. of inputs : 4 no. of outputs : 1 W tym okienku zostały wprowadzone wszystkie niezbędne dane. Po wprowadzeniu znaku [Enter] po ostatnim wprowadzonym znaku ( tu 1), następuje przejście do właściwego dekompozera. Pojawia się nowe okno i napis z zapytaniem : Do you prefer serial decomposition with normal order the inputs ? : n OR with changed order the inputs ? : c Po wprowadzeniu znaku c (zalecane) następuje przejście do opisu funkcji i wyboru strategii. The H table under consideration has 8 inputs and 19 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o0 o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14 o15 o16 o17 o18 Decomposition parallel block1 (4,1) block2 (8,18) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: s OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c 16 Ponieważ pamięć ROM o pojemności 4K może być skonfigurowana (patrz punkt 2.1.3) jako blok o 8 wejściach i 16 wyjściach, najprościej wykonać dekompozycję równoległą. Niestety dekompozycja równoległa z podglądu nie jest tu odpowiednia, należy zmienić rozmiary bloków. Po wprowadzeniu znaku p pojawia się napis: Change block size ? (y/n): Po wprowadzeniu znaku y wyświetli się napis z wyborem kryterium rozkładu na bloki: Block of inputs with min. no. of argoments ?: m Block of inputs with max. no. of argoments ?: l Wprowadzeniu znaku l oznacza, że odcinany będzie blok o wyjściach zależnych od wszystkich ośmiu argumentów. Jeśli natomiast zabraknie takich wyjść, z pozostałych wyjść układu będą wybierane znowu te z największą liczbą wejść. Na razie nie jest znany rozmiar szukanego bloku. Dopiero w następnej linii będzie on wprowadzony: number of outputs (< 19): Należy wprowadzić liczbę 16. Teraz wykona się dekompozycja równoległa. Podzieli układ na dwa bloki. Do jednego zostanie przypisane szesnaście wyjść o największej liczbie argumentów. Do drugiego pozostałe wyjścia. Program wypisze również komunikat z zapytaniem czy wyświetlić informacje o dokonanej dekompozycji: Parallel decomposition. Do you eed help? (y/n) Bez względu na to czy będzie wyświetlona informacja o dekompozycji (y) czy nie (n) należy podjąć decyzję, który z bloków ma być poddany jako pierwszy dalszej syntezie. Function to be currently decomposed (1/2) ? Po wprowadzeniu np. znaku 1, funkcja o 8 wejściach i 16 wyjściach stanie się nowym blokiem H, druga zaś (ta o trzech wyjściach) zostanie zapisana w pomocniczym pliku i program wróci do niej w odpowiednim momencie. Następuje teraz wybór strategii dekompozycji z nową funkcją H. The H table under consideration has 8 inputs and 16 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o0 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14 o15 o16 Decomposition parallel block1 (8,15) block2 (7,1) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(8x16) ? : r 17 Pojawienie się dodatkowej opcji r w spisie opcji możliwych do wykonania świadczy o tym, że blok H może być umieszczony w całości w pamięci ROM. Wprowadzenie znaku r przy wyborze strategii spowoduje zakończenie rozkładu aktualnego bloku H i zapisanie go w jednym z plików wynikowych. Będzie to plik o rozszerzeniu .M4K. Jeśli pozostały jeszcze bloki do dalszej dekompozycji (tu pozostały) pojawia się napis: DO YOU WANT DECOMPOSE THE SUBTABLES ? (y/n) Znak n spowoduje przerwanie wykonywania rozkładu i nastąpi powrót do MenuROM, gdzie ukaże się informacja, że dekompozycja nie była kompletna. Znak y wprowadza do dekompozycji nową funkcję H wraz z jej opisem i wyborem strategii. The H table under consideration has 8 inputs and 3 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o1 o17 o18 Decomposition parallel block1 (4,1) block2 (8,2) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(8x16) ? : r Ponieważ aktualna funkcja H może być umieszczona w bloku ROM typu 4K, opcja r pojawiła się wśród możliwych strategii. Jeśli przyjmie się założenie, że przy rozkładzie funkcji można korzystać zarówno z komórek FLEX oraz pamięci M512 i 4K, to nie należy w tym momencie zapamiętywać bloku H(8x3) w pamięci M4K(8x16). Pozostanie nie wykorzystanych 13 wyjść pamięci ROM. Pogląd na dekompozycję równoległą pokazuje, że jeden blok (4,1) jest komórką a drugi ma takie rozmiary jak ROM typu M512 skonfigurowany do 8 wejść i 2 wyjść. Najwygodniej więc wykonać dekompozycję równoległą: opcja p. Na zapytanie: Change block size ? (y/n): odpowiedzieć nie(znak n). Wykona się wtedy automatycznie dekompozycja równoległa i blok (4,1) zostaje automatycznie zapamiętany jako komórka i informacja o tym pojawia się na ekranie: the solution 1 is implementable by the cell !!!!! 4->1 !!!!! inputs: i1 i4 i6 i7 outputs: o18 Program na bieżąco, automatycznie zlicza aktualną liczbę otrzymanych komórek i informację o tym umieszcza każdorazowo na ekranie. W związku z tym pojawia się komunikat na ekranie: 18 ******** TOTAL : 1 cells ******** i następuje przejście do rozkładu następnego bloku. The H table under consideration has 8 inputs and 2 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o1 o17 Decomposition parallel block1 (7,1) block2 (7,1) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M512(8x2) ? : r Blok H ma taki rozmiar, jak pamięć M512(8x2). Użycie opcji r spowoduje zakończenie rozkładu aktualnego bloku H i zapisanie go w jednym z plików wynikowych. Będzie to plik o rozszerzeniu *.rom. Ponieważ był to zarazem ostatni blok, program wypisuje ostateczne rozwiązanie: Number Number Number Number of of of of cells = 1 M512 = 1 M4K = 1 levels = 1 i pyta, czy podać szkic sieci: SHOW THE DECOMPOSITION NETWORK ? (y/n) Szkic sieci ma sens tylko przy rozkładzie na same komórki. Nie jest wykonywany dla pamięci ROM. Użycie znaku y nie spowoduje błędu. Wyrysuje sieć tylko z otrzymanych komórek. Nie będzie to rzeczywista struktura sieci. W przypadku braku komórek w rozkładzie, po prostu pusty ekran. Zalecane tu użycie znaku n. Po wciśnięciu klawisza [Enter] następuje powrót do okna z Menu-Rom. W oknie tym jest wydzielone okienko z zapisaną nazwą pliku i otrzymanym wynikiem dekompozycji. Wynik ten jest również zapisany w pliku o tej samej nazwie co plik wejściowy z rozszerzeniem *.inf, tu sym8.inf. Utworzony, w czasie wykonywania programu, plik o nazwie sym.ans ma zapisane wszystkie kroki i strategie wykonywane przez użytkownika. Na jego podstawie można zawsze odtworzyć powstałą strukturę. 5.2. Przykład rozkładu filtru sym8 danego za pomocą wektora współczynników filtru W tym przykładzie wykorzystano wektor współczynników filtru sym8, zapisanego w pliku sym.fil. Ma on postać: [571,65313,63778,5279,14246,8820,65011,64194] 19 Należy więc w menu dekompozera na pamięci ROM wprowadzić znak 2 i wypełnić okienko z danymi w następujący sposób: Name of file ( together extension ): sym8.fil SIZE OF selected FPGA cell no. of inputs : 4 no. of outputs : 1 W tym okienku zostały wprowadzone wszystkie niezbędne dane. Końcowy znaku [Enter] po ostatnim wprowadzonym znaku spowoduje przejście do właściwego dekompozera. W nowym oknie, właściwego już dekompozera, w pierwszym kroku wyboru porządku wejść, wybieramy opcję c. Na ekranie pojawia się opis danych funkcji oraz tablica zależności poszczególnych wyjść od wszystkich argumentów (wejść) układu. Pod tablicą zależności pojawia się zapytanie czy użytkownik wykona samodzielnie podział na bloki. Jeśli użytkownik nie wykona sam podziału na bloki, wtedy program postąpi tak samo jak w punkcie 5.1. Wypisze podgląd na dekompozycję równoległą i spis możliwych strategii do wykonania. Niemniej jest to jedyne miejsce gdzie można wykonać dekompozycję równoległą nie na dwa, a na wiele bloków. The H table under consideration has 8 inputs and 19 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o0 o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14 o15 o16 o17 o18 f00 f01 f02 f03 f04 f05 f06 f07 f08 f09 f10 f11 f12 f13 f14 f15 f16 f17 f18 : : : : : : : : : : : : : : : : : : : 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 MAKE DIVIDING INTO BLOCKS ? (y/n) Po wprowadzeniu znaku y, zdefiniowano podział w sposób: Input the size and output number for each block(0-end of inputting) Size of the block(number of outputs)? :4 20 Numbers 1 2 3 Size of Numbers 5 18 Size of Numbers 6 7 8 Size of Numbers 10 11 12 Size of Numbers 15 16 17 of outputs : 0 the block(number of outputs)? :3 of outputs : 4 the block(number of outputs)? :4 of outputs : 0 the block(number of outputs)? :4 of outputs : 9 the block(number of outputs)? :4 of outputs : 14 Size of the block ? : 0 to oznacza, ze ostatni blok będzie zawierał pozostałe numery wyjść, a więc: 14,15, 16, 17. W tym przykładzie przyjęto założenie, że otrzymana struktura może być realizowana na dwóch poziomach logicznych komórek i pamięciach ROM. Stąd podziały na bloki o czterech wyjściach i 8 wejściach. Dla każdego z tych bloków będzie wykonywana jednokrotna dekompozycja na komórki FLEX. Jeśli będzie ona możliwa, to blok po dekompozycji będzie już pamięcią M512, plus pojedyncze komórki. Jeśli nie będzie możliwa, to za pomocą dekompozycji równoległej, blok będzie rozkładany na dwa bloki. Każdy z nich można zrealizować w pamięci M512. Jeden z bloków musi mieć 3 wyjścia. Zgrupowano więc w jednym bloku dwa wyjścia o 8 wejściach i jedno o czterech. W tablicy zależności są widoczne dwa wyjścia( numery: 0 i 1) o tych samych siedmiu argumentach, ale pamięć M512 to blok o 7 wejściach i 4 wyjściach. Lepiej więc dołączyć do tego bloku jeszcze dwa wyjścia i sprawdzić czy nie istnieje dekompozycja szeregowa na komórki FLEX. Jeśli zmniejszyłaby liczbę wejść do bloku przynajmniej o 1, to blok o 4 wyjściach byłby pamięcią M512. Mamy teraz podzielone wszystkie wyjścia układu na 5 bloków. Program rozpoczyna pracę od pierwszego bloku zdefiniowanego przez użytkownika. Pozostałe są przechowywane w pomocniczych plikach, aby wrócić do nich w odpowiednim momencie. The H table under consideration has 8 inputs and 4 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o0 o1 o2 o3 Decomposition parallel block1 (7,2) block2 (8,2) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p 21 OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(8x16) ? : r Wybór opcji s. Po wykonaniu dekompozycji program wyświetla, że nie jest możliwa dekompozycja dla 4 wejść i 1 wyjścia. Umieszcza na ekranie podgląd na dekompozycję wykonywaną, ale nie wykonaną. 1 2 3 4 0 0 0 2 0 0 0 4 0 0 0 0 0 0 0 T 0 2 3 4 Nd 2 Wynika z niego, że istnieje dekompozycja rozłączna o 4 wejściach i 2 wyjściach oraz nierozłączna: 4 wejścia, 1 wyjście. Aby ją wykonać należy wprowadzić znak c i zmienić parametry funkcji G, wprowadzając kolejno dwie wartości z czwartego wiersza: liczbę z pierwszej kolumny, a następnie liczbę z drugiej kolumny: no. of block inputs = 4 no. Of block outputs= 2 Dopiero teraz program wykona dekompozycję szeregową. Ponieważ istnieje zarówno rozłączna i nierozłączna, należy zadecydować którą. Wykonujemy nierozłączną. Na ekranie drukowany jest wynik dekompozycji, wypisywana jest liczba aktualnych komórek i program przechodzi do opisu funkcji H. The H table under consideration has 6 inputs and 4 outputs inputs: i0 i1 i5 i6 i7 g0_0 outputs: o0 o1 o2 o3 Decomposition parallel block1 (5,2) block2 (6,2) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M512(6x8) ? : r Przy wyborze opcji strategii r funkcja H będzie zrealizowana w pamięci M512. Wprawdzie cztery wyjścia pamięci ROM będą niewykorzystane, ale i tak jest duży zysk. Zamiast realizować blok (8x4) na dwóch pamięciach M512(8x2) i M512(7x4) (rys. 3a) można – wykorzystując dekompozycję szeregową – to zrobić na jednej komórce FLEX i jednej pamięci M512 (rys. 3b). 22 1 3 4 7 8 4x1 G0_0 M512 (7x4) M512 (8x2) 2 2 (o0,o2) (o2,o3) M512 (6x8) 4 (o0,o1,02,03) Rys. 3. Realizacja filtru sym8: a) dekompozycja równoległa, b) dekompozycja szeregowa Po rozkładzie pierwszego bloku, aktualną funkcją H jest kolejny blok, przechowywany w pliku pomocniczym. The H table under consideration has 8 inputs and 3 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o4 o5 o18 Decomposition parallel block1 (4,1) block2 (8,2) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(6x8) ? : r Po użyciu strategii s okazuje się, że nie ma dekompozycji z funkcją G(4,1). Pogląd na dekompozycję szeregową; 1 0 0 0 2 0 0 0 0 3 0 0 0 0 0 4 3 8 T 1 4 6 7 pokazuje, że istnieje dekompozycja z funkcją G(4,3). Taka dekompozycja nie jest opłacalna. Ale gdyby nawet istniała dekompozycja G(3,1), to również nie należy jej wykonywać. Powstaną komórki FLEX i pamięć M512 na dwóch poziomach logicznych. Wykonując rozkład za pomocą dekompozycji równoległej otrzymamy taki sam rezultat tyle tylko, że jednym poziomie. Należy więc wybrać opcję p ze spisu wyświetlonych strategii i nie potrzeba zmieniać rozmiarów bloków. Sugerowane z podglądu są dobre. Dekompozycja „odetnie” blok będący komórką, Pozostanie blok(8x2), który należy za pomocą opcji r zapamiętać w pamięci M512. 23 Z pozostałymi trzema blokami należy postępować w podobny sposób. Dwa z nich o wyjściach (o6,o7,o8,o9) i (o10,o11,o12,o13) nie posiadają dekompozycji szeregowej dla komórek FLEX. Ostatni z nich o wyjściach (o14,o15,o16,o17) posiada dekompozycję szeregową z funkcją G(4,3) i blokiem H(7,4), co stanowi trzy komórki FLEX i pamięć M512(7x4). Prześledźmy jeszcze przypadek z blokiem o wyjściach (o6,o7,o8,o9). The H table under consideration has 8 inputs and 4 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 outputs: o6 o7 o8 o9 Decomposition parallel block1 (8,2) block2 (8,2) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(8x16) ? : r Po wykonaniu dekompozycji z opcją s, na ekranie wyświetla się komunikat: Decomposition not possible for 4 inputs and 1 outputs 1 2 3 4 0 0 0 0 0 0 0 0 0 0 0 0 14 T 0 0 0 0 oraz opis funkcji wraz ze spisem możliwych opcji do wykonania. Na podstawie podglądu na dekompozycję (czwarty wiersz: 4 wejścia, 4 wyjścia) wynika, że nie jest możliwa do wykonania żadna dekompozycja szeregowa dla komórek o 4 wejściach. Nie należy używać opcji r, ponieważ w pamięci M4K(8x16), dwanaście wyjść będzie niewykorzystanych. Bloki o 8 wejściach i 2 wyjściach można realizować w pamięciach M512(8x2). Należy więc przeprowadzić dekompozycję równoległą. Po użyciu opcji p nie potrzeba zmieniać rozmiarów bloków podanych w podglądzie na dekompozycję szeregową. Po rozkładzie, każdy z bloków o 8 wejściach i 2 wyjściach należy zrealizować w pamięciach M512. Po całkowitym rozkładzie funkcji sym8.fil wyświetla się końcowy wynik: Number of cells = 5 Number of M512 = 7 Number of levels = 2 24 5.3. Przykład rozkładu filtru f9 danego za pomocą wektora współczynników filtru Współczynniki filtru dane są za pomocą wektora współczynników, zapisanego w pliku f9.fil: [18,0,-116,0,429,0,-1277,0,5042,8192,5042,0,-1277,0,429,0,-116,0,18] Filtr ten ma wprawdzie 19 współczynników, ale tablica prawdy będzie zawierała tylko 11 argumentów. Tablica zależności wyjść od argumentów funkcji również ogranicza się tylko do istotnych 11 argumentów. Mimo, że analiza zależności poszczególnych wyjść od wszystkich argumentów układu, przeprowadzana jest bez budowy tablicy prawdy, to program odrzuca nadmiarowe, nie potrzebne argumenty, które pózniej i tak należałoby zredukować. Tablica zależności, drukowana na ekranie, ma postać: The H table under consideration has 8 inputs and 19 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 outputs: o0 o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14 o15 f00 f01 fo2 f03 f04 f05 f06 f07 f08 f09 f10 f11 f12 f13 f14 f15 : : : : : : : : : : : : : : : : 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 M512(9x1) M4K(11x2) M4K(10x4) M4K(10x4) M4K(10x4) Lc(4x1) Rozwiązanie 1. W tablicy rozkładu argumentów zaznaczono wyjścia, które należy połączyć w bloki, aby otrzymać najprostsze rozwiązanie na jednym poziomie logicznym. Wprawdzie funkcja jest zależna od 11 argumentów, ale tak naprawdę tylko dwa wyjścia są zależne od wszystkich wejść. Przy grupowaniu wyjść w bloki należy korzystać z konfiguracji pamięci M512 i M4K podanej na str. 8. Zaznaczone bloki mają: rozmiar=1, wyjścia: 0; rozmiar=2, wyjścia: 1,2; rozmiar=4, wyjścia: 3, 4, 5, 6; rozmiar=4, wyjścia: 7, 8, 9, 10; rozmiar=4, wyjścia: 11, 12, 13, 14; 25 rozmiar=1, wyjścia: 15. W taki sposób należy je wprowadzić w opcji: MAKE DIVIDING INTO BLOCKS ? (y/n) y Dalszy rozkład jest czystą formalnością. Przy każdym wyborze strategii należy użyć opcji r. Otrzymany końcowy wynik to: Number Number Number Number of of of of cells = 1 M512 = 1 M4K = 4 levels = 1 Rozwiązanie 2 Realizacja na większej liczbie poziomów może znacznie zmniejszyć pojemność uzyskanej struktury. Zrealizujmy to samo zadanie na dwóch poziomach logicznych pamięci ROM i komórek FLEX. Podział na bloki zachowujemy taki sam. Analiza bloków otrzymanych z podziału funkcji: 1. Blok o numerze wyjścia 0 ma 9 wejść, jest więc pamięcią ROM M512. 2. Dla bloku o numerach wyjść 1 i 2 pojawia się wydruk na ekranie. The H table under consideration has 11 inputs and 2 outputs inputs: i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 outputs: o1 o2 Decomposition parallel block1 (11,1) block2 (11,2) Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters Do you prefer parallel decomposition ?: p OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(11x2) ? : r Należy wybrać jedną z powyższych opcji. Można wybrać opcję r. Ale mając możliwość realizacji struktury na 2 poziomach, warto sprawdzić, czy można ten blok zrealizować na pamięciach o mniejszej pojemności. Wybieramy opcję s aby sprawdzić czy istnieje dekompozycja szeregowa z funkcją G(4,1). Decomposition not possible for 4 inputs and 1 outputs 1 0 0 0 2 0 0 0 0 3 0 0 0 0 0 4 2 3 T 0 1 9 10 Nd 2 Z podglądu na dekompozycję szeregową wykonywaną ale nie wykonaną (ponieważ nie było rozkładu z funkcją G(4,1)) wynika, że istnieje dekompozycją rozłączna i nierozłączna. W następnej linii za wyświetlonym podglądem, drukowany jest spis możliwych 26 opcji do wykonania. Należy więc wykonać dekompozycję nierozłączną za pomocą opcji c umieszczonej w spisie wszystkich możliwości. Zmniejszy ona liczbę wejść aktualnego bloku o 2, tworząc w ten sposób blok o 9 wejściach i 2 wyjściach. Taki rozkład pozwala zastąpić pamięć M4K, dwiema pamięciami ROM512 i jedną komórką FLEX. Wprawdzie zwiększa się liczba poziomów z 1 do 2, ale 2xM512ÙM4K/4. 3. Kolejny blok do rozkładu to blok o numerach: 3,4,5,6. Ma on 10 wejść. Należy spróbować wykonać dla niego dekompozycję tak, aby wynik otrzymanej struktury pozwolił zastąpić pamięć M4K(10x4) na ewentualnie kilka komórek FLEX i kilka pamięci M512. W tym celu wykonano kilka razy dekompozycję szeregową z funkcją G(4,1), G(6,1) i G(7,1). Program nie znalazł takich dekompozycji, ale na podglądzie wypisał najlepsze, jakie istniały dla zadanych parametrów. Wynik na ekranie: 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 0 0 0 3 6 T 0 1 8 9 0 0 0 0 0 0 0 4 11 T 0 1 3 6 8 9 Nd 8 4 16 T 0 1 2 3 6 8 9 Prześledźmy otrzymane wyniki: Linia 4 – funkcja G(4,3), H(9,4) to 4xM512(9x1). Wynik: 3xFLEX + 4xM512, Linia 6 – funkcja: G(6,4) to M512(6x8), H(8,4) to 2xM512(8,2). Wynik : 3xM512, Linia 7 – funkcja: G(7,4) to M512(7x4), H(7,4) to 2xM512(7,4). Wynik : 2xM512, Należy wybrać najlepszy, ostatni wynik i za pomocą opcji c wykonać dekompozycję z funkcją G(7,4). 4. Blok o numerach wyjść: 7, 8, 9, 10. Ma on 10 wejść. Po próbie wykonania podobnych dekompozycji jak w punkcie poprzednim, odczytano następujące informacje z podglądu na dekompozycję szeregową: Linia 4 – funkcja G(4,4). Nie istnieje dekompozycja szeregowa, Linia 6 – funkcja: G(6,5) to M512(6x8), H(9,4) to 4xM512(9x1). Wynik : 5xM512, Linia 7 – funkcja: G(7,6) to 2xM512(7x4), H(9,4) to 4xM512(9x1). Wynik : 6xM512, Linia 8 – funkcja: G(8,6) to 3xM512(8x2), H(8,4) to 2xM512(8x2). Wynik: 5xM512. Można wykorzystać rozwiązanie o 5 pamięciach M512. Ale jeśli już, to o funkcji G(6,5). Ma ono najmniejszy stopień komplikacji. Niemniej wszystkie z nich dają „trudne” struktury. Zapamiętamy w pamięci M4K(10x4). 5. Blok o numerach: 11, 12, 13, 14. Ma on globalnie 10 wejść. Jedno z nich zależy od 8 argumentów, trzy pozostałe od 10. W najgorszym przypadku można go zapamiętać w pamięci M4K(10x4). Najpierw jednak należy sprawdzić, czy nie uda się zamiast tego stworzyć struktury o 2 lub 3 pamięciach M512 i ewentualnie o dodatkowych komórkach. Po przeprowadzeniu podobnych dekompozycji szeregowych jak w punktach poprzednich, najlepsza okazuje się ta z funkcją G(7,4) i H(7,4). W ten sposób pamięć M4K można zastąpić dwiema M512. 27 6. Blok o numerze 15 jest komórką o 4 wejściach i 1 wyjściu. Końcowy rezultat wyświetlany na ekranie: Number of cells = 2 Number of M512 = 7 Number of M4K = 1 Number of levels = 2 Rozwiązanie 3 Przykład ten można rozwiązać na wiele sposobów. Zależy to, w głównej mierze, od sposobu podziału na bloki, wejściowej funkcji początkowej. Jeśli wprowadzi się początkowy podział na następujące bloki: rozmiar=1, wyjścia: 0; rozmiar=2, wyjścia: 1,2; rozmiar=8, wyjścia: 3, 4, 5, 6, 7, 8, 9 ,10; rozmiar=4, wyjścia: 11, 12, 13, 14; rozmiar=1, wyjścia: 15, to jest on modyfikacją podziału z poprzednich rozwiązań, polegającą na połączeniu w jeden blok, dwóch bloków o 4 wyjściach i 10 wejściach. Idea rozwiązania pozostaje taka jak w rozwiązaniu 2. Należy tylko spróbować użyć dekompozycji szeregowej do „nowego” bloku o 8 wyjściach. Okazuje się, że nie ma dekompozycji szeregowej z funkcją G o czterech argumentach. Następną próba przeprowadzana to funkcja G o 6 argumentach. Taka dekompozycja istnieje dla G(6,5) i H(9,8). Stanowi to: M512(6x8) + M4K(9x8). Jest o jedną pamięć M512 mniej niż rozkład w poprzednim rozwiązaniu. Wynik końcowy to: Number of cells = 2 Number of M512 = 6 Number of M4K = 1 Number of levels = 2 Wizualizacja otrzymanych rozwiązań. Oznaczenia: linią ciągłą zaznaczono komórki, linią przerywaną – pamięci M512, zaś linią podwójną – pamięć M4K; strzałki to wejścia bezpośrednie lub wyjścia funkcji pierwotnej (początkowej). Szkic rozwiązania1 9 11 10 9x1 11x2 10x4 1 2 4 10 10 10x4 10x4 4 4 4 1 28 Szkic rozwiązania2 9 7 1 8 4 3 7 1 10 3 7 7x4 7x4 4 4 9x1 9x1 9x1 7x4 10x4 7x4 1 1 1 4 4 4 4 1 Szkic rozwiązania3 9 7 1 4 4 6 6x8 8 9x1 1 1 9x1 1 3 7 7x4 5 9x1 1 4 4 7x4 7x4 8 4 1 5.4. Przykład rozkładu funkcji o liczbie argumentów większej od 12 Funkcje o liczbie wejść większej od 12, mogą sprawiać dużą trudność. Nie można podzielić ich na takie bloki, aby w całości mogły być realizowane w pamięciach ROM. Musi być zawsze w takim przypadku wykonana przynajmniej jedna dekompozycja szeregowa. Jako przykład pokazano rozkład jednego bloku, wyselekcjonowanego z filtru sym14, którego wektor współczynników jest postaci: [165,64,63802,63283,4644,12353,8626,280,64739,1092,491,65333,65520,43] Tablica prawdy ma 14 wejść i 19 wyjść. Przy czym 12 wyjść jest zależnych od wszystkich argumentów, pozostałe od mniejsze liczby argumentów. Wyselekcjonowano blok o 1 wyjściu ( o numerze 1) i 14 wejściach. Aby zrealizować go przynajmniej w pamięci M4K(12x1), należy wykonać dekompozycję szeregową taką, aby powstała funkcja H miała rozmiar: 12 wejść, 1 wyjście. Wybór strategii dekompozycji jest skromny. Nie ma opcji r, ponieważ blok nie może być pamięcią ROM. Nie ma też opcji p, ponieważ jest tylko jedno wyście. Wybrano opcję s, wykonującą dekompozycję szeregową dla komórek FLEX. Wprawdzie nie ma dekompozycji szeregowej z funkcją G(4,1), ale podgląd na dekompozycje pokazuje, że jest z funkcją G(4,2). Wykonujemy ją za pomocą opcji c. Po wykonaniu tej 29 dekompozycji, wyświetlany jest opis „nowej” funkcji H wraz ze spisem strategii do wykonania. The H table under consideration has 12 inputs and 1 outputs inputs: i1 i2 i4 i5 i6 i9 i10 i11 i12 i13 g0_0 g0_1 outputs: o1 Serial decomposition is suggested with G function parameters assumed to be equal to the declared cell parameters OR continue serial decomposition as suggested ?: s OR continue serial decomposition with changed parameters ?: c OR save ROM-M4K(12x1) ? : r Rozwiązanie1 – opcja r. w wyniku otrzymamy na dwóch poziomach: M4K + 2xLc. Rozwiązanie2. Sprawdzamy, czy bez zwiększania poziomów można zmniejszyć liczbę argumentów funkcji H. W tym celu wykorzystujemy opcję c i wykonujemy kolejno dekompozycje z funkcjami G(4,1), G(6,1), G(7,1), G(8,1). Dla żadnych z nich nie istnieje z takimi parametrami, ale podgląd na dekompozycję pokazuje inne możliwości. Trzeba tylko je przeanalizować. 1 2 3 4 5 6 7 2 0 0 0 3 0 4 4 0 0 0 0 0 0 0 0 0 8 T 2 5 6 7 0 0 0 0 0 0 10 T 0 1 2 4 8 9 Nd 7 10 T 0 1 2 3 4 8 9 Nd 8 4 9 T 0 1 2 3 4 7 8 9 Nd 8 Łatwo zauważyć, że funkcja H ma 10 wejść bezpośrednich i dwa będące wyjściami z poprzednich dekompozycji ( w opisie funkcji węzły g0_0 i g0_1). W pierwszej kolejności przeszukiwane są tylko kombinacje wejść bezpośrednich. Jeśli istnieje jakakolwiek dekompozycja o zadanej liczbie wejść i liczbie wyjść większej od ustalonej, to program zapamiętuje ją i nie przeszukuje już kombinacji z wejściami będącymi węzłami pośrednimi. Ma to na celu nie podwyższania liczby poziomów, nawet kosztem zmniejszenia liczby pamięci ROM. Skraca to również czas wykonywania dekompozycji. Np. w tym przypadku dla funkcji G z 6 argumentami skraca czas 132 razy. Dekompozycja z G(4,3) zmniejszy liczbę wejść do 11 i wynik:M4K + 5xLc. Dekompozycja z G(6,4) zmniejszy liczbę wejść do 10. Funkcja H nadal będzie pamięcią M4K i dojdzie dodatkowa pamięć M512. Wynik: M4K + M512 + 2xLc. Dekompozycja z G(7,4) zmniejszy liczę wejść do 9. Funkcja H stanie się pamięcią M512. Wynik: 2xM512 + 2xLc. Dekompozycja z G(8,4) zmniejszy liczbę wejść do 8. Funkcja H stanie się pamięcią M512, ale funkcja G to dwie pamięci M512. Wynik: 3xM512 + 2xLc. Spośród nich należy wybrać dekompozycję z funkcją G(7,4) i wykonać ją za pomocą opcji c. 30 Szkic rozwiązania 1 10 4 Szkic rozwiązania 2 3 4 7 7x4 12x1 2 4 9x1 31 I. Generator LUT Opracowanie: mgr inż. Maciej Majchrzyk 1. Zadania programu Program Generator LUT został stworzony do generacji tablic LUT, wykorzystywanych w sprzętowych realizacjach filtrów cyfrowych. Tablice te są generowane na podstawie zadanych wartości współczynników filtra. Podstawowym plikiem wyjściowym jest plik pla zawierający opis układu kombinacyjnego realizującego zadaną funkcję. Kolejne wersje programu oferują nowe formaty wyjściowe ułatwiające późniejsze wykorzystanie otrzymanych wyników (układy w języku AHDL, potem VHDL i inne). 2. Wygląd programu Korzystając z oprogramowania firmy Borland (C++ Builder), stworzono program posiadający interfejs graficzny wykorzystujący znane elementy systemu operacyjnego Windows. Zapewniło to łatwą i intuicyjną obsługę wszystkich elementów programu. Dokładny wygląd głównego okna programu przedstawia rysunek 1. Rys. 1. Okno główne programu Generator LUT Okno programu składa się z dwóch głównych części: • edytora współczynników, • generatora tablic LUT. Edytor współczynników pozwala nam w łatwy sposób stworzyć plik wejściowy zawierający współczynniki filtra, wykorzystywany przez drugi element programu – generator, do tworzenia tablicy LUT. 32 3. Plik wejściowy Program Generator LUT obsługuje pliki wejściowe będące zwykłymi plikami tekstowymi, domyślnym rozszerzeniem takiego pliku jest .in. Plik wejściowy można stworzyć w normalnym notatniku lub wykorzystać element głównego okna: edytor współczynników. 3.1. Tworzenie pliku wejściowego z wykorzystaniem notatnika Plik wejściowy możemy stworzyć korzystając z powszechnie dostępnych edytorów plików tekstowych. Plik taki składa się z liczb rzeczywistych zapisanych w osobnych liniach tekstu. Znakiem oddzielającym część ułamkową liczby od części całkowitej jest znak kropki. Należy pamiętać o ograniczeniu liczby współczynników znajdujących się w pliku, maksymalna liczba współczynników wynosi 32. Przykład pliku wejściowego pokazano na rysunku 2. Rys. 2. Przykładowy plik wejściowy 3.2. Tworzenie pliku wejściowego z wykorzystaniem edytora współczynników Oferowany przez opisywany program edytor współczynników pozwala na stworzenie lub edycje pliku wejściowego bezpośrednio przed generowaniem tablicy. W lewej części okna programu (patrz rysunek 1) możemy otworzyć istniejący plik, edytować go lub stworzyć nowy. Należy pamiętać o zapisaniu dokonanych zmian przy pomocy przycisku Zapisz. Rysunek 3 przedstawia wygląd edytora wraz z głównymi elementami. Za pomocą przycisków znajdujących się z lewej strony dokonujemy podstawowych czynności związanych z otwieraniem, zamykaniem i zapisywaniem pliku wejściowego. Otwarcie lub zapisanie pliku powoduje ustawienie tego pliku jako pliku domyślnego dla generatora tablic LUT. W dolnej części edytora znajduje się parametr określający przewidywaną przez użytkownika liczbę współczynników. Odpowiednio zwiększając lub zmniejszając tą liczbę możemy zmieniać liczbę pół edycyjnych odpowiadających poszczególnym współczynnikom. W momencie zapisywania pliku program pobiera z kolejnych pól wartości rzeczywiste aż do momentu napotkania pola pustego. Pozostawienie pola bez wpisu w momencie zapisywania 33 pliku oznacza miejsce, w którym zakończy się zapis współczynników, elementy znajdujące się za pustym elementem nie zostaną zapisane. Z opisywaną właściwością edytora wiąże się konieczność wpisywania zera w miejsce współczynników posiadających taką wartość, pozostawienie miejsca pustego będzie skutkowało skróceniem listy współczynników. Rys. 3. Wygląd edytora współczynników 4. Generator tablic LUT Drugim elementem opisywanego programu jest generator tablic LUT (rys. 4). Jest to główny element programu. Wykorzystuje on pliki zawierające współczynniki rzeczywiste filtra i na ich podstawie generuje odpowiednie pliki wyjściowe. Rys. 4. Wygląd generatora tablic LUT 34 4.1. Podstawowe pliki wyjściowe Podczas uruchomienia procedury liczenia tablicy LUT program zawsze tworzy 2 podstawowe rodzaje plików: • pliki .pla – zawierają opis układu kombinacyjnego realizującego określoną funkcję, • pliki .info – zawierają informacje o wersji programu, zastosowanych parametrach, wartościach współczynników oraz dokonywanych przez generator operacjach. Nazwy domyślne plików dostosowywane są do nazwy pliku wejściowego. Możliwa jest zamiana tych nazw, edytując odpowiednie pole z nazwą, lub wybierając nową z okna dialogowego, otwartego przy pomocy przycisku Przeglądaj. 4.2. Dodatkowe pliki wyjściowe W opisywanym programie istnieje możliwość wygenerowania dodatkowych plików wyjściowych. Pliki te zawierają opis układu kombinacyjnego w różnych językach opisu sprzętu lub stanowią pliki wsadowe do innych programów związanych z syntezą logiczną. Aby wygenerować odpowiedni plik należy zaznaczyć pole wyboru odpowiadające temu formatowi. W programie można wygenerować następujące pliki wyjściowe: • pliki AHDL – jest to plik zapisany w języku firmy Altera, posiada on rozszerzenie .tdf. Wraz z tym plikiem generowany jest plik .inc, co ułatwia wykorzystanie otrzymanych wyników. Wykorzystując przycisk Ustawienia możemy dobrać odpowiadające nam właściwości generowanego pliku. Wygląd okna właściwości pokazano na rysunku 5. W oknie tym możemy wybrać odpowiednie nazwy wektorów wyjściowych i wejściowych oraz postać zapisu każdego z wektorów. • pliki Verilog – jest to plik zapisany w popularnym języku opisu sprzętu, posiada on rozszerzenie .vlg. Wykorzystując przycisk Ustawienia możemy dobrać odpowiadające nam właściwości generowanego pliku. Wygląd okna właściwości jest identyczny z właściwościami pliku AHDL przedstawionego na rysunku 5. W oknie tym możemy wybrać odpowiednie nazwy wektorów wyjściowych i wejściowych oraz postać zapisu każdego z wektorów. • pliki zawierające współczynniki całkowite – są to pliki wykorzystywane w dalszej syntezie logicznej. Zawierają wartości współczynników całkowitych wykorzystywanych do tworzenia tablicy LUT. 35 Rys. 5. Okno właściwości pliku tdf Opcje generatora tablic LUT Użytkownik programu posiada możliwość wyboru opcji generacji tablicy LUT. Wygląd fragmentu okna generatora został przedstawiony na rysunku 6. Rys. 6. Fragment generatora tablic LUT zawierający dostępne opcje generacji Generując tablicę LUT użytkownik może wpływać na długość wektora wyjściowego tablicy w dwojaki sposób: • pośrednio poprzez dobór odpowiedniego współczynnika skalowania współczynnika rzeczywistego filtra, • bezpośrednio poprzez ograniczenie długości wektora wyjściowego. Współczynnik skalowania jest to liczba, która pozwala na przejście od wartości współczynników rzeczywistych do wartości całkowitych filtra zgodnie ze wzorem: współczynnik całkowity = współczynnik rzeczywisty * 2 współczynnik skalowania Poprzez odpowiedni dobór współczynnika skalowania wpływamy na długość wektora wyjściowego. Drugą możliwością wpływania na długość wektora wyjściowego jest wybór jednej z trzech opcji: • wyjście bez ograniczeń – długość wektora wyjściowego nie jest skracana, • wyjście ograniczone do N bitów (przez skracanie współczynników) – długość wektora wyjściowego jest ograniczona do N bitów. Generator sprawdza długość otrzymanego 36 wektora wyjściowego i jeśli jest ona za duża dzieli współczynniki przez potęgę 2 aż do momentu uzyskania oczekiwanej długości słowa, • wyjście ograniczone do N bitów (przez skracanie słowa wyjściowego) – długość wektora wyjściowego jest ograniczona do N bitów przez obcięcie najmniej znaczących bitów. 4.5.Generacja tablicy LUT Po dokonaniu odpowiedniego wyboru pliku wejściowego oraz po wyborze odpowiednich ustawień w celu generacji tablicy LUT wraz z odpowiednimi plikami należy wcisnąć przycisk Start. Program zacznie tworzyć odpowiednie pliki (może to potrwać do kilku minut i zależy od ilości współczynników oraz rodzaju procesora). Pliki zostaną wygenerowane a w dolnym oknie programu zostanie wyświetlona zawartość pliku informacyjnego .info. 37