TC Moduł 12

From Studia Informatyczne

Enlarge
Projektowanie układów cyfrowych cz. 1

Enlarge
Kluczową rolę w projektowaniu układów cyfrowych (w szczególności przeznaczonych do realizacji w struk¬turach programowalnych) spełnia specjalny język specyfikacji sprzętu. Jest to tak zwany język HDL (Hardware Description Language). W najprostszym ujęciu język taki umożliwia wymianę informacji między konstruktorem, a komputerowym systemem projektowania i jest przeznaczony do tworzenia plików wejściowych specjalnego kompilatora, którego zadaniem jest przetłumaczenie pliku tekstowego napisanego w danym języku na mapę punktów programowania dla docelowego przyrządu FPLD.

Istnieje wiele języków HDL, mających różne właściwości i umożliwiających realizację różnych zadań. Niektóre z nich pochodzą od języków programowania. Na przykład język VHDL opracowano na podstawie języka ADA, jednak ze względu na naturę układów cyfrowych języki te różnią się wyraźnie od powszechnie używanych języków programowania.

Obecnie panuje tendencja do wyposażania komputerowych systemów projektowania dla struktur FPLD w kompilatory różnych języków HDL, przy czym najczęściej stosowany jest język specjalizowany (przeznaczony do produktów jednej firmy, np. AHDL firmy Altera) oraz język VHDL lub Verilog (spełniające rolę języka ogólnego przeznaczenia).


Enlarge
Język AHDL (Altera Hardware Description Language) jest strukturalnym językiem wysokiego poziomu dostosowanym do opisu układów cyfrowych w środowiskach systemów projektowania firmy Altera (MAX+PLUS II, Quartus).

Istotnymi cechami, które decydują o jakości tego języka są możliwości konstruowania projektów hierarchicznych za pomocą składni AHDL lub łączenia kilku specyfikacji AHDL ze zbiorami projektowymi innych typów w jeden projekt na wyższym poziomie hierarchii. Projekty zapisane w AHDL mogą być włączane w większe projekty hierarchiczne, tworzone na poziomie strukturalnej specyfikacji graficznej. W podobny sposób można włączać do zbiorów AHDL dowolne własne funkcje i projekty oraz wiele standardowych makrofunkcji i megafunkcji, zawartych w bibliotekach systemu projektowania.



Enlarge
Elementy leksykalne i syntaktyka języka AHDL pozwalają tworzyć wystarczająco złożone specyfikacje układów cyfrowych. Są one zapisywane do pliku wejściowego TDF (Text Design File) za pośrednictwem wbudowanego edytora. Plik TDF rozpoczyna słowo kluczowe SUBDESIGN. Nazwa następująca bezpośrednio za słowem SUBDESIGN jest nazwą pliku, w którym tworzona specyfikacja jest (lub będzie) zapisana.

Enlarge
Najprostsza struktura pliku wejściowego obejmuje następu¬jące sekcje:

sekcja deklaracji (SUBDESIGN SECTION), sekcja zmiennych (VARIABLE SECTION) oraz Sekcja Logiczna (LOGIC SECTION). Sekcja deklaracji oraz sekcja logiczna muszą występować w każdym projekcie, sekcja zmiennych jest opcjonalna.


Enlarge
Sekcja deklaracji opisuje interfejs urządzenia czyli służy do deklarowania wejść, wyjść i portów dwukierunkowych.

Sekcja logiczna służy do określania operacji logicznych w zbiorze TDF. Operacje te definiuje się za pomocą równań boolowskich, warunków logicznych i tablic prawdy. Mówiąc poglądowo sekcja logiczna opisuje działanie lub strukturę urządzenia.



Enlarge
Sposób specyfikacji układów cyfrowych w języku opisu sprzętu przyjęło się klasyfikować jako tzw. style projektowania. Wyróżnia się styl behawioralny, strukturalny oraz przepływ danych.

Enlarge
Elementami strukturalnymi języków HDL stosowanymi w opisie układów cyfrowych są przede wszystkim słowa kluczowe, równania, tablice, instrukcje itp.

Enlarge
Słowa kluczowe w języku AHDL są typowe dla firmowych języków opisu sprzętu. Są one używane na przykład do określania początku i końca deklaracji i sekcji pliku specyfikacji, do tworzenia instrukcji (np. IF, CASE) lub stanowią polecenia dla procesu kompilacji (np. INCLUDE).

Enlarge
Oprócz słów kluczowych niezbędne do opisu układów cyfrowych są identyfikatory umożliwiające wprowadzanie nazw własnych. Sposób tworzenia identyfikatorów jest określony pewnymi zasadami. Przykłady tworzenia identyfikatorów dla języka AHDL podane są na planszy.

Enlarge
Specyfikację ułatwiają (czyli upraszczają zapisy) różnego rodzaju symbole. W języku AHDL szczególnie wygodne są: symbole umożliwiające tworzenie grup sygnałów oraz tzw. rozszerzenie kropkowe stosowane przy opisywaniu różnych wyprowadzeń tego samego modułu.

Enlarge
Liczby w AHDL są zapisywane ciągami cyfr ograniczonych cudzysłowem i poprze¬dzonych odpowiednim prefiksem. Stosowane są systemy zapisu:
  • dziesiętny (Decimal),
  • binarny (Binary),
  • oktalny (Octal),
  • heksadecymalny (Hexadecimal).

Enlarge
Sygnały grupowe są zbiorami zmiennych lub stałych, na których przeprowadza się operacje tak jak na pojedynczych obiektach. Każda operacja przeprowadzana na zbiorze oznacza przeprowadzenie takiej samej operacji na każdym z jego elementów. Sygnały grupowe upraszczają zarówno zapisy specyfikacji jak też zapisy wektorów testujących poprzez możliwość odnoszenia się do grupy zmiennych, jak do pojedynczego obiektu.

Enlarge
W języku AHDL sygnały grupowe są zapisywane dwoma sposobami. W pierwszym z nich sygnał grupowy jest złożony z nazwy i operatora zakresu, a w drugim z listy identyfikatorów. Na przykład zapisy: a[4..1]\, oraz d[1..2]\, oznaczają zbiory sygnałów a4, a3, a2, a1, a0\,<math>  oraz  <math>d1, d2\,.

W drugim sposobie podaje się listę identyfikatorów ograniczonych nawiasami i oddzielanych przecinkami:(a,b,c);(a,b,c[5..1]); reg.(d,clk,clrn,prn). Jak widać, oba zapisy mogą występować wspólnie w jednej deklaracji, jak też sygnał grupowy może być stosowany w rozszerzeniach nazw obiektów, w których jest dopuszczalne stosowanie wspólnej nazwy (wyróżnionej rozszerzeniem). W wielu przypadkach zapisy te są równoważne. Na przykład: b[4..0], b[] oraz (b4,b3,b2,b1,b0) oznaczają te same zbiory sygnałów.


Enlarge
Podstawową konstrukcją do specyfikacji układów cyfrowych w języku AHDL są równania boolowskie. W równaniu występuje identyfikator, symbol przypisania oraz wyrażenie boolowskie.



Enlarge
AHDL posługuje się typowymi operatorami logicznymi, oznaczanymi symbolami lub słowami kluczowymi. Jednak ich zastosowanie jest istotnie wzbogacone przez możliwość używania sygnałów grupowych. Podane przykłady wyjaśniają interpretację operacji logicznych na sygnałach grupowych.

Enlarge
Do opisu działania typowych układów cyfrowych często stosowane są operatory arytmetyczne i relacyjne.

Enlarge
Podstawowe operatory arytmetyczne (suma, różnica), a także operatory relacyjne ułatwiają zapisy skomplikowanych wyrażeń boolowskich zgodnie z zasadami sygnałów predykatowych i „symboli logicznych”.

Enlarge
Typowe zastosowanie równań to specyfikacje układów logicznych zbudowanych z bramek. Rysunek na planszy przedstawia prosty układ kombinacyjny. Układ ten zapisany jest w języku AHDL w projekcie komb.

Enlarge
Specyfikacje wielopoziomowych układów kombinacyjnych można upraszczać stosując węzły deklarowane jako zmienne wewnętrzne. Układ kombinacyjny z poprzedniej planszy można – po zastosowaniu węzła jako zmiennej wewnętrznej – opisać prościej.

Enlarge
Dużym ułatwieniem w specyfikacjach układów jest możliwość stosowania sygnałów grupowych w wyrażeniach boolowskich. W przykładzie podanym na planszy sygnał grupowy pozwala zapisać 4 wyrażenia boolowskie w postaci jednego.

Enlarge
Najłatwiejszym sposobem tworzenia układów, dla których możemy jednoznacznie określić odpowiedzi na zadane wektory wejściowe, jest użycie tablic prawdy (Truth Table). Tablica w języku AHDL jest zapisywana w formie sekcji rozpoczynającej się od słowa kluczowego TABLE. Nagłówek umieszczony w następnym wierszu zawiera listę sygnałów wejściowych, separator (=>) oraz listę sygnałów wyjściowych. Poszczególne sygnały listy (również grupowe) są oddzielane przecinkami. W następnych wierszach – zgodnie z kolejnością ustaloną w nagłówku – są podawane wartości sygnałów wejściowych i wyjściowych. Wejścia i wyjścia są oddzielone znakiem strzałki (=>). Dopuszcza się specyfikację z uwzględnieniem wartości nieokreślonych (don’t care), oznaczonych symbolem X. Specyfikację tablicy kończą słowa kluczowe END TABLE.

Enlarge
Instrukcja warunkowa IF i wyboru CASE pozwalają definiować różne zachowania ukła¬du w zależności od warunków logicznych, któ¬rych argumentami są sygnały wejściowe.

Instrukcja IF THEN reprezentuje listę deklaracji wykonywanych w zależności od wartości logicznej wyrażenia boolowskiego (CONDITION) zapisywanego między słowami IF oraz THEN.



Enlarge
Analogiczną rolę jak instrukcja IF THEN spełnia wyrażenie warunkowe.

Enlarge
Instrukcja CASE reprezentuje listę wykluczających się deklaracji wykonywanych w zależności od wartości zmiennej występującej po klauzuli CASE.

Enlarge
Doskonałym przykładem ilustrującym specyfikacje układów kombinacyjnych z zastosowaniem instrukcji IF THEN oraz CASE jest koder priorytetowy opisany tablicą prawdy podaną na planszy.

Enlarge
Specyfikacja kodera instrukcją IF THEN jest wygodna o tyle, że wykorzystuje ona naturalne własności kodera, a mianowicie priorytet sygnału w_3\,, następnie w_2, w_1, nad pozostałymi.

Enlarge
Jak widać specyfikacja instrukcją CASE jest w przypadku kodera nieco bardziej skomplikowana, gdyż nie pozwala ona na naturalne wykorzystanie priorytetu. Trzeba zatem wyliczać wszystkie możliwe wartości słów wejściowych i wyjściowych.

Enlarge
Przerzutniki deklaruje się jako zmienne typu np. DFF, DFFE, JKFF, SRFF. Formalnie każdy przerzutnik jest obiektem, którego wejścia i wyjścia (wejścia informacyjne D, T, JK, SR, wejście zegarowe CLK, wejście zezwolenia ENA i wyjście Q) są obejmowane wspólną nazwą z rozszerzeniem określającym rodzaj wejścia.

Enlarge
Z punktu widzenia układów logicznych do realizacji automatu wystarcza podać diagram stanów (graf automatu) i skonstruować tablicę przejść-wyjść. Na poziomie języka HDL tablica przejść-wyjść jest reprezentowana specyfikacją automatu, na podstawie której kompilator automatycznie wykona wszystkie czynności związane z syntezą.

Automaty tworzy się deklarując ich nazwę oraz nazwy i kody stanów. Kodowanie stanów nie jest jednak konieczne; można podać jedynie ich listę, a kompilator automatycznie zakoduje stany i wybierze odpowiedni typ przerzutnika do ich realizacji. Do pełnego opisu jest niezbędna specyfikacja działania automatu oraz określenie sygnałów sterujących dla przerzutników: Reset, Clock, Enable. Sygnały te definiuje się podobnie jak w przypadku pojedynczych przerzutników, tj. posługując się identyfikatorem z rozsze¬rzeniem. Działanie automatu (czyli jego tablicę przejść oraz wyjść) można opisać kilkoma sposobami, wykorzystując instrukcje typu IF, CASE lub opis tablicowy (TABLE).



Enlarge
Zasady specyfikacji układów sekwencyjnych omówimy na przykładzie prostego automatu, którego graf i tablica przejść wyjść jest podana na planszy. Automat ma dodatkowy sygnał reset. Sygnał ten sprowadza automat do stanu początkowego. Stan początkowy automatów koduje się słowem 0,...,0\,.

Enlarge
W specyfikacji automatu należy wyróżnić istotne fragmenty: deklarację automatu, przypisanie sygnału zegarowego i reset, opisanie przejść między stanami, opisanie wyjść. Zauważmy specjalny zapis w deklaracji automatu: MACHINE WITH STATES oraz wygodny zapis wejść sterujących (w tym zegarowego) za pośrednictwem tzw. rozszerzenia kropkowego. Przejścia między stanami opisuje się instrukcjami CASE oraz IF THEN ELSE.

Enlarge
Po procesie kompilacji działanie automatu można zaobserwować na wykresach czasowych symulatora.

Enlarge
W podobny sposób opisuje się działanie automatu w innych językach HDL w szczególności w języku VHDL oraz Verilog. Jakkolwiek ograniczony zakres wykładu uniemożliwia omówienie zasad specyfikacji tych języków, to dla pokazania podobieństw w specyfikacji automatu, na planszy niniejszej podajemy specyfikację naszego przykładowego automatu w języku VHDL, a na następnej w języku Verilog.

Dla specyfikacji w języku VHDL można zauważyć rozbudowany sposób deklaracji, za pomocą słów kluczowych TYPE i SIGNAL oraz brak opisu sterowania przerzutnikami.



Enlarge
W języku Verilog deklaracja automatu jest prostsza, ale brak informacji dotyczącej przerzutników jest również charakterystyczny.

Enlarge
Sytuacja taka jest zrozumiała o tyle, że język AHDL jest językiem firmowym, a więc związanym z konkretnymi układami programowalnymi (jednej firmy), zatem specyfikacje mogą być „bliższe sprzętu”. Natomiast w językach uniwersalnych opis jest bardziej abstrakcyjny. Mówiąc poglądowo – więcej pracy wykonuje kompilator. Porównanie opisów automatu w tych trzech językach w pełni potwierdza taką sytuację. Warto o tym pamiętać, aby nie denerwować się w sytuacjach, gdy specyfikacja w „lepszym” języku doprowadzi do „gorszej” realizacji projektowanego układu.

Enlarge
Jest bardzo wiele systemów projektowania układów cyfrowych przeznaczonych do realizacji w strukturach programowalnych. Do najpopularniejszych (również w Polsce) należy zaliczyć systemy firm amerykańskich Altera oraz Xilinx, a mianowicie Quartus oraz ISE Foundation. Trzy następne plansze pozwolą nam umiejscowić zdobytą do tej pory wiedzę w bardziej praktycznym ujęciu.

Enlarge
Otóż w komputerowych narzędziach projektowania specyfikację układu zapisuje się w edytorze tekstowym. Następnie, po wprowadzeniu odpowiednich opcji kompilacji (np. dotyczących wyboru docelowej struktury programowalnej).

Enlarge
system dokona kompilacji, w ramach której wykonane zostaną wszystkie czynności związane z translacją wprowadzonej specyfikacji na poziom logiczny oraz odwzorowaniem technologicznym.

Enlarge
Po pomyślnym zakończeniu procesu kompilacji (o czym użytkownik będzie powiadomiony odpowiednim komunikatem) dokonuje się weryfikacji projektu obserwując jego działanie na wykresach czasowych symulatora.