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

Podobne dokumenty