1 Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy kombinacyjne
2 Wprowadzenie VHDL - Very (high speed integrated circuits) Hardware Description Language Etapy projektowania: 1.Zdefiniowanie założeń i wymagań projektowych 2.Opisanie projektu w języku VHDL 3.Kompilacja 4.Symulacja kodu źródłowego 5.Synteza, optymalizacja i dopasowanie projektu 6.Symulacja zrealizowanego projektu 7.Zaprogramowanie układu
3 NAND3 library ieee; use ieee.std_logic_1164.all; entity nand3 is -- deklaracja jednostki nand3 port (x1, x2, x3 in bit; y out bit); end nand3; architecture bramka_nand of nand3 is begin y
4 Biblioteki i pakiety Biblioteka to miejsce do którego mogą być kompilowane jednostki projektowe Rodzaje bibliotek: ieee, work Biblioteka ieee zawiera jednostki projektowe standardu IEEE: –std_logic_1164 –numeric_std –numeric_bit Pakiet stanowi jednostkę projektową, w której zdefiniowane są typy, komponenty, funkcje, itp. Deklaracja biblioteki i pakietu: library ieee; use ieee.std_logic_1164.all;
5 Entity entity - deklaracja interfejsu zawiera opis wejść i wyjść projektowanego układu ( port ) oraz może zawierać opis wartości parametrów ( generic )
6 Entity - składnia entity nazwa_jednostki is -- deklaracja jednostki [generic (lista_deklarowanych_stalych);] [port (lista_sygnalow_wej. in|inout nazwa_typu; lista_ sygnalow_wyj. out|buffer|inout nazwa_typu);] end nazwa_jednostki; Przykład: entity nand3 is -- deklaracja jednostki nand3 port (x1, x2, x3 in bit; y out bit); end nand3;
7 Porty - rodzaje out in inoutbuffer
8 Typy skalarne Typy skalarne: integer – liczby całkowite zakres predefiniowany od – (2 31 – 1) do + (2 31 – 1) można ograniczyć zakres, np: type przedzial is range -10 to +10; range – pozwala uzyskać prostsze struktury logiczne po syntezie subtype natural is integer range 0 to 2147483647; subtype positive is integer range 1 to 2147483647; real – liczby rzeczywiste zakres predefiniowany od – 1.0E+38 do + 1.0E+38 można ograniczyć zakres, np: type przedzial is range –10.0 to +10.0; bit – typ bitowy zakres to znaki: ‘0’ oraz ‘1’
9 Typy skalarne std_ulogic|std_logic – typ dziewięciowartościowy (IEEE Std 1164-1993) ′U′, -- stan niezainicjowany ′X′, -- stan nieznany ′0′, -- stan 0 ′1′, -- stan 1 ′Z′, -- stan wysokiej impedancji ′W′, -- słaby stan nieznany (odczyt) ′L′, -- słabe 0 (odczyt), równoważne połączeniu przez rezystor z masą ′H′, -- słabe 1 (odczyt), równoważne połączeniu przewodu przez rezystor z napięciem zasilania ′-′, -- stan nieokreślony, podobnie jak ′X′ Stosowane tylko do symulacji
10 Typy skalarne std_logic kontra std_ulogic Typ std_logic jest podtypem std_ulogic boolean – typ boolowski zakres to wyrażania: true oraz false character – typ znakowy zakres to: 128 znaków kodu ASCII, sposób zapisu: ‘a’, ‘b’
11 Typy skalarne Typy wyliczeniowe - definiowane przez listę nazw lub literałów (pojedynczych cyfr lub liter) type kolory is (niebieski, zielony, czerwony); type litery is (′A′,′B′,′C′,′c′); Typy fizykalne - stosowane do zdefiniowania jednostek miar - nie mają fizycznego znaczenia dla syntezy - jedynym predefiniowanym typem fizykalnym jest typ time type time is range –2147483647 to 2147483647 units fs;
12 Typy złożone array - typy macierzowe (tablicowe) - obiekt składa się z wielu elementów tego samego typu - najczęściej stosowane: type bit_vector is array (natural range ) of bit; type std_logic_vector is array (natural range ) of std_logic; type std_ulogic_vector is array (natural range ) of std_ulogic; - definicja magistrali: signal a: std_logic_vector(3 downto 0); - macierz dwuwymiarowa: type table_8x4 is array (0 to 7, 0 to 3) of bit;
13 Architecture architecture – obiekt zawierający opis zawartości jednostki projektowej, czyli funkcji realizowanej przez układ. Możliwe są trzy style opisu architektury
14 Architecture – składnia architecture nazwa_architektury of nazwa_jednostki is [czesc_deklaracyjna: typy, sygnaly_wewnetrzne, stale] begin instrukcja_wspolbiezna; --cialo architektury end nazwa_architektury; Przykład: architecture bramka_nand of nand3 is begin y
15 Sygnały signal – obiekt reprezentujący połączenie pomiędzy składnikami projektu – sygnałem może być typ skalarny, nie dopuszcza się sygnałów typu wyliczeniowego lub plikowego signal nazwa_sygnalu: nazwa_typu [ograniczenie][:= wyrazenie]; Przykład: signal a: integer; signal b: std_ulogic_vector(0 to 7); Przypisanie wartości do sygnału: nazwa_sygnalu
16 Zmienne variable – obiekt przechowywujący informację lokalną w procesie lub podprogramie – przypisanie wartości do zmiennej jest natychmiastowe [shared] variable nazwa_zmiennej: nazwa_typu [ograniczenie] [:=wyrazenie]; Przykład: variable a: bit; variable b: std_logic_vector(3 downto 0); Przypisanie wartości do zmiennej: nazwa_zmiennej := wartość | wyrażenie; Przykład: b := „1000”;
17 Stałe constant - obiekt, którego wartość jest zawsze stała - musi mieć wartość początkową - zakres „widzialności” stałej jest zależny od miejsca deklaracji constant nazwa_stalej: typ := wyrazenie; Przykład: constant pi: real := 3.1415;
18 Operatory Logiczne: and or nand nor xor xnor not Relacji: = \= => Przesunięć: sll srl sla sra rol ror Dodawania: + - & Znaku: + - Multiplikatywne: * / mod rem Różne: ** abs
19 Instrukcje współbieżne
20 Instrukcje współbieżne with-select-when – przypisanie selektywne -do sygnału zostaje przypisana taka wartość, która jest uzależniona od wartości sygnału selekcji -wszystkie wartości wyboru muszą być określone i różne Składnia: with wybor select sygnal
21 Instrukcje współbieżne process – jedna z konstrukcji projektowych - proces może być w danej chwili wykonywany lub wstrzymany - lista czułości określa, które sygnały powodują wykonanie procesu (w układzie kombinacyjnym zawiera wszystkie jego wejścia) Składnia: [etykieta:] process [(lista_wrazliwosci)][is] [czesc_deklaracyjna ] -- deklaracje zmiennych, stałych, typów begin [wait on (lista_wrazliwosci);] -- przy nieokreślonej liście -- wrażliwości przy process; -- „czekaj na zmianę sygnałów” instrukcja_ sekwencyjna; end process [etykieta];
22 Instrukcje sekwencyjne if-then-elsif-else – sekwencyjne przypisanie warunkowe - stosowane wewnątrz procesu - warunki są typu boolean, warunki są sprawdzane kolejno Składnia: if warunek then instrukcja sekwencyjna; elsif warunek then instrukcja sekwencyjna; else instrukcja sekwencyjna; end if; Przykład: if R = ′1′ then Q