Transcript Slajd 1
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy kombinacyjne 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 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 <= not (x1 and x2 and x3); end bramka_nand; 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; Entity entity - deklaracja interfejsu zawiera opis wejść i wyjść projektowanego układu (port) oraz może zawierać opis wartości parametrów (generic) 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; Porty - rodzaje in out inout buffer Typy skalarne Typy skalarne: • integer – liczby całkowite zakres predefiniowany od – (231 – 1) do + (231 – 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’ Typy skalarne • std_ulogic|std_logic – typ dziewięciowartościowy (IEEE Std 1164-1993) stan niezainicjowany stan nieznany Stosowane tylko stan 0 do symulacji stan 1 stan wysokiej impedancji słaby stan nieznany (odczyt) słabe 0 (odczyt), równoważne połączeniu przez rezystor z masą słabe 1 (odczyt), równoważne połączeniu przewodu przez rezystor z napięciem zasilania ′-′,-- stan nieokreślony, podobnie jak ′X′ ′U′, ′X′, ′0′, ′1′, ′Z′, ′W′, ′L′, ′H′, --------- 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’ 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; 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; Architecture architecture – obiekt zawierający opis zawartości jednostki projektowej, czyli funkcji realizowanej przez układ. Możliwe są trzy style opisu architektury 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 <= not (x1 and x2 and x3); end bramka_nand; 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 <= wartość | wyrażenie Przykład: b <= ”110X0Z01”; 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”; 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; Operatory • Logiczne: and or • Relacji: = < • Przesunięć: sll • Dodawania: + • Znaku: + • Multiplikatywne: * • Różne: ** \= nand <= srl - nor > xor sla sra - abs not => & / xnor mod rem rol ror Instrukcje współbieżne • <= - przypisanie podstawowe • when-else – przypisanie warunkowe – należy wymienić wszystkie możliwe warunki lub wpisać wyrazenie_koncowe, które domyślnie spełnia warunek when others – warunki badane są kolejno i realizowane jest przypisanie dla pierwszego spełnionego warunku Składnia: sygnal <= wyrazenie when warunek [and | or warunek] else wyrazenie_koncowe; Przykład: y <= a when s = ′0′ else b when s = ′1′ else ′X′; 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 <= wyrazenie when wartosc_wyboru, sygnal <= wyrazenie_koncowe when others; Przykład: with s select x <= a when ″00″, b when ″01″, c when ″10″, d when ″11″, ″--″ when others; 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]; 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; Przykład: if R = ′1′ then Q <= ′0′; elsif C = ′1′ then Q <= D; else Q <= Q; end if; end if; cdn