VHDL - K. Kołek (AGH).DOC

(3437 KB) Pobierz
VHDL - język opisu sprzetu

 

 

 

 

 

Język opisu sprzętu VHDL

 

 

Materiały pomocnicze dla przedmiotu

"Technika cyfrowa i mikroprocesorowa" II/III RA

 

 

 

 

 

 

Krzysztof Kołek

Katedra Automatyki, Akademia Górniczo-Hutnicza

Al. Mickiewicza 30, 30-059 Kraków

tel. (0-12) 617-28-55

kko@aquarium.ia.agh.edu.pl

 



Spis treści

1. Wstęp             

2. Podstawowe pojęcia języka VHDL             

2.1. Predefiniowane typy             

2.2. Logika wielowartościowa             

2.3. Komponenty             

2.4. Pakiety             

2.5. Podprogramy             

2.6. Operatory             

2.7. Sygnały, zmienne, stałe             

2.8. Definicja i użycie typów             

2.9. Równoległe oraz szeregowe wykonanie instrukcji. Koncepcja procesu             

2.10. Zawieszanie wykonania procesu             

2.11. Instrukcje wykonywane szeregowo             

2.12. Cykl "delta"             

2.13. Atrybuty             

2.14. Pozostałe cechy języka             

2.15. Przeładowanie operatorów             

3. Strukturalny opis sprzętu             

3.1. Sumator 4-bitowy. Opis strukturalny             

3.2. Generator numerów górników. Projekt w postaci schematu elektrycznego             

4. Behawioralny opis sprzętu             

4.1. Wielokrotne wywołanie procesu             

4.2. Definiowanie rejestrów             

4.3. Czterobitowy rejestr z równoległym ładowaniem i asynchronicznym zerowaniem             

4.4. Czterobitowy binarny licznik asynchroniczny             

4.5. Konwerter kodu BCD na kod wyświetlacza siedmiosegmentowego             

4.6. Multiplekser 4 na 1             

4.7. Czterobitowy rejest przesuwający             

4.8. Czterobitowy licznik synchroniczny z wejściem zezwalającym na zliczanie, asynchronicznym zerowaniem i synchronicznym ładowaniem             

4.9. Bufor trójstanowy             

4.10. Funkcja konwersji typu bit_vector do typu integer             

4.11. Automat o skończonej liczbie stanów             

4.12. Implementacja układów z rodziny TTL             

4.12.1. Implementacja układu 7400             

4.12.2. Implementacja układu 74138             

5. Wykaz funkcji języka VHDL             

5.1. Atrybuty             

5.2. Definicja tablic             

5.3. Instrukcja case             

5.4. Scalanie wartości (ang. aggregate)             

5.5. Typ Bit             

5.6. Typ Bit_Vector             

5.7. Typ Boolean             

5.8. Typ Character             

5.9. Pakiet             


6. Wykorzystanie programu OrCAD do projektowania bloków w języku VHDL             

6.1. Kompilacja projektu             

6.1.1. Opcje optymalizacji             

6.1.2. Opcje syntezy             

6.1.3. Opcje formatu docelowego             

6.2. Opcje tworzenia pliku programującego układy FPGA             

7. Przykłady             

7.1. Konwerter liczby binarnej na kod BCD. Wyświetlenie liczby BCD na wyświetlaczu 7segmentowym             

7.2. Częstotliwościomierz             

7.3. Generator numerów górników             

7.4. Generator sygnału wizyjnego dla monitora monochromatycznego             

 


1.                Wstęp

 

Język VHDL (skrót pochodzi od dwóch innych skrótów: V - Very High Speed Integrated Circuit oraz HDL - Hardware Description Language) rozwijany był na początku lat 80-tych do opisu niezależnych metod opisywania układów elektronicznych przez American Department of Defence (ang. DoD). Po raz pierwszy został zestandaryzowany w roku 1983, a następnie standaryzację powtórzono w latach 1987 oraz 1993.

Główne cechy języka VHDL to:

·                    równoległość przejawiająca się w możliwości zdefiniowania potrzeby oraz wykonywania równoległego (jednoczesnego w czasie) przetwarzania różnych porcji informacji,

·                    strukturalność oznaczająca możliwość hierarchicznego opisywania projektów. W opisie hierarchicznym projekt zbudowany jest z połączonych bloków o mniejszym stopniu złożoności, które z kolei zbudowane są z prostszych bloków, które zawierają w sobie jeszcze prostsze bloki i tak dalej aż dochodzimy do bloków podstawowych, którymi np. w przypadku układów cyfrowych są bramki logiczne. Strukturalność oznacza możliwość opisu sprzętu od poziomu systemu do poziomu bramki,

·                    "redesign" - typowy projekt cyfrowego układu elektronicznego zawiera w sobie do 80% fragmentów z innych projektów. Nowe projekty nie powstają w pustce. Projektanci wykorzystują poprzednio zdobyte doświadczenia przenosząc opracowane i poznane uprzednio rozwiązania do nowych projektów. Proces ten określa się pochodzącym z języka angielskiego słowem redesign,

·                    możliwość wykonywania instrukcji sekwencyjnie (czyli w sposób przeciwstawny do wykonywania równoległego) oznaczająca możliwość definiowania czynności wykonywanych jedna po drugiej, w sposób analogiczny jak w tradycyjnych językach programowania. ,

·                    zdolność do jednolitego opisywania struktury układów zbudowanych w oparciu o różne technologie stwarzająca możliwość przenoszenia projektów pomiędzy różnymi platformami sprzętowymi,

·                    możliwość symulowania projektowanych układów; możliwość tworzenia sekwencji sygnałów testujących. Istnieje możliwość wbudowania sygnałów testowych w projekt,

·                    "samodokumentowanie" osiągnięte dzięki prostej i przejrzystej strukturze,

·                    modelowanie układów z uwzględnieniem upływającego czasu.

Programowanie w języku VHDL może odbywać się na różnych poziomach abstrakcji. Są to:

·                    warstwa topograficzna (ang. layout) specyfikująca połączenia z uwzględnieniem również zależności czasowych i efektów analogowych. Przykładowo realizuje opóźnienia propagacji sygnału oraz blokowanie sygnałów poniżej minimalnej zadanej szerokości,

·                    warstwa logiki zawierająca informację o funkcjach, architekturze, technologii i szczegóły zależności czasowych. Podstawowo opisuje zależności logiczne między blokami,

·                    warstwa RTL (ang. Register Transfer Level) - zawiera opis każdego rejestru oraz logiki między nimi. Zawiera informacje o architekturze ale nie o technologii. Zależności czasowe nie są specyfikowane. Istotna jest tylko informacja o zegarach taktujących,

·                    warstwa behawioralna (ang. behavioural) opisująca funkcje projektu. Zawiera tak dużo informacji o zależnościach czasowych, jak jest to niezbędne do opisaniu funkcji projektu.

Każdy element opisywany w języku VHDL może posiadać dowolną liczbę definicji w każdej z omówionych warstw. Umożliwia to skupienie się w różnych fazach projektu na różnych jego aspektach.

Język przypomina języki programowania typu C lub Pascal jednak jego podstawowym celem nie jest wykonywanie obliczeń. Zadaniem języka jest wspieranie całości procesu projektowania układów cyfrowych poczynając od symulacji poprzez modelowanie, testowanie, implementacje oraz tworzenie dokumentacji. Podstawowym celem języka VHDL jest "zaprogramowanie" programowalnego układu logicznego niezależnie od technologii w jakiej ten układ został wytworzony (ASIC, FPGA, PLD, itp.). Dotyczy to również układów opracowywanych w przyszłości, których parametry nie są jeszcze aktualnie znane.

Podstawowym ograniczeniem języka VHDL jest, iż pierwotnie był projektowany wyłącznie do systemów cyfrowych. Aktualnie trwają prace nad standaryzacją wersji dla układów analogowych oraz nad opracowaniem analogowych programowalnych i konfigurowalnych układów scalonych o podobnym stopniu elastyczności jaki osiągnęły układy FPGA w technice cyfrowej.

Dostępne oprogramowanie wspomagające użytkowanie języka zwykle automatycznie tworzy i optymalizuje struktura komórek i połączeń podczas programowanie programowalnych układów logicznych. Język VHDL wydaje się być szczególnie użyteczny dla układów FPGA o 10-20 tysiącach komórek. Narzędzia języka HVDL dla układów FPGA kosztują od 1 do 20 tysięcy USD (w porównaniu z cenami 50-100 tysięcy USD dla układów ASIC).

 

Niniejsze opracowanie przedstawia skrótowy opis struktur języka VHDL ukierunkowany na wykorzystanie do programowania programowalnych układów logicznych firmy XILINX z wykorzystanie firmowego oprogramowania wspomagany przez pakiet oprogramowanie ORCAD w wersji 7.11. Należy zwrócić uwagę na występujące różnice między opisem standardu języka VHDL oraz jego implementacją w programie ORCAD. Praktyczna implementacja zawiera bowiem istotne ograniczenia w stosunku do ogólnej specyfikacji języka podyktowane kłopotami w realizacji niektórych cech w oparciu o aktualną technologię. Specyfikacja języka, będąc bardzo elastyczną, uwzględnia cechy, które aktualnie mogą być wyłącznie symulowane w sposób programowy (nie jest możliwa ich praktyczna realizacja z zastosowaniem okładów firmy XILINX) nie należy jednak wykluczyć ich praktycznej realizacji w oparciu o nowe rozwiązania technologiczne.

 

2.                Podstawowe pojęcia języka VHDL

 

Poniżej przedstawiono podstawowe pojęcia występujące w opisie języka VHDL. Należy pamiętać, iż język VHDL został zaprojektowany jako język opisu sprzętu. Powoduje to istotne różnice w stosunku do języków programowania ogólnego przeznaczenia. Język VHDL wykazuje duże podobieństwa składniowe do języków typu Pascal lub C niemniej podobnie wyglądające instrukcje mogą charakteryzować się dramatycznie odmiennym zachowaniem. W szczególności dotyczy to zasad określania zależności czasowych oraz pracy równoległej.

 

2.1.           Predefiniowane typy

 

Język VHDL posiada następujące predefiniowane typy danych:

·                    BOOLEAN przyjmuje jedną z dwóch wartości: FALSE lub TRUE,

·                    BIT jest równe '1' lub '0',

·                    BIT_VECTOR ciąg wartości typu BIT np. "000000", "01101". Można użyć do modelowania magistral,

·                    CHARACTER umożliwia używanie znaków alfanumerycznych np. 'a', 'X',

·                    STRING definiuje ciągi znaków np. "ABCD", "012ws"

·                    INTEGER reprezentuje liczby całkowite,

·                    REAL umożliwia zapis liczb zmiennopozycyjnych.

Powyższe typy powinny być zdefiniowane w pakiecie STANDARD wchodzącym w skład języka. Definicja pewnych typów może być zależna od implementacji lub nie występować. Dotyczy to na przykład typu REAL, który ze względu na problemy implementacyjne nie zawsze jest dostępny.

 

2.2.           Logika wielowartościowa

 

Logika wielowartościowa posiada więcej typów niż tylko zero i jedynka logiczna. Pakiet Std_Logic_1164 wchodzący w skład języka VHDL zawiera definicję typów std_logic (typ "resolved") oraz std_ulogic (typ "unresolved") o następujących wartościach wraz z operującymi na nich funkcjami:

'U'              - wartość nigdy dotychczas nie została określona,

'X'              - wartość była znana ale aktualnie nie można podać jej konkretnej wartości; sygnał "strong drive",

'0'              - sygnał logicznego 0 typu "strong drive",

'1'              - sygnał logicznej 1 typu "strong drive",

'Z'              - stan wysokiej impedancji; sygnał nie posiada "driver"-a,

'W'              - wartość była znana ale aktualnie nie można podać jej konkretnej wartości; sygnał "weak drive"; rzadko używany,

'L'              - sygnał logicznego 0 typu "weak drive",

'H'              - sygnał logicznej 1 typu "weak drive",

'-'              - wartość sygnału nie ma znaczenia.

Pakiet zawiera również definicje typów Std_logic_vector oraz Std_ulogic_vector.

Pakiet Std_logic zawarty jest w bibliotece IEEE. Poniższe instrukcje czynią elementy zdefiniowane w pakiecie Std_logic dostępnymi w projekcie:

library IEEE;                                              -- Uczyń bibliotekę dostępną

use IEEE.Std_Logic_1164.all;              -- Całość biblioteki dostępna

Jest możliwe podstawianie elementów typu std_ulogic do std_logic i vice-versa.

 

2.3.           Komponenty

 

Opis komponentów składowych projektu wykonywany jest za pomocą dyrektywy ENTITY...

Zgłoś jeśli naruszono regulamin