1 Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy sekwencyjne
2 Instrukcje sekwencyjne c.d. case-when – odpowiednik współbieżnej instrukcji with-select-when –należy wymienić wszystkie możliwe warunki (wyłączające się) –warunki są sprawdzane jednocześnie Składnia: case wyrazenie is when wybor => instrukcje sekwencyjne; when others => instrukcje sekwencyjne | null; end case; Przykład: case y is when „00” => x x x x
3 Instrukcje sekwencyjne c.d. for-loop – pętla wykonująca określoną liczbę iteracji na podstawie wartości kontrolnej i Składnia: for wartosc_kontrolna in zakres loop instrukcje sekwencyjne; end loop; Przykład: for i in 0 to 7 loop x(i)
4 Instrukcje sekwencyjne c.d. while-loop – pętla kontynuująca wykonywanie określonej sekwencji instrukcji tak długo jak długo spełniony jest warunek kontrolny Składnia: while warunek_kontrolny loop instrukcje sekwencyjne; end loop; Przykład: while i < 7 loop Q(i)
5 Instrukcje sekwencyjne c.d. wait – instrukcja chwilowego wstrzymania procesu –wykorzystywana jeśli process nie ma określonej listy czułości Składnia: wait until warunek; -- czekaj dopóki wait on nazwa_sygnalu; -- czekaj na wait for odcinek_czasu; -- czekaj przez Przykład: wait until a = ‘1’; -- czekaj dopóki wait on a; -- czekaj na wait for 20 ns; -- czekaj przez
6 Instrukcje sekwencyjne c.d. exit – instrukcja wyjścia z pętli przy wykryciu odpowiedniego warunku Składnia: exit [etykieta_petli][when warunek]; -- wyjście warunkowe exit [etykieta_petli]; -- wyjście bezwarunkowe Przykład: Loop1: for i in a downto 0 loop if i > 10 then lub exit loop1 when i < 10; exit loop1;......
7 Instrukcje sekwencyjne c.d. next – instrukcja służąca do pomijania operacji wewnątrz pętli po spełnieniu określonego warunku Składnia: next [etykieta_petli][when warunek]; Przykład: while i < 7 loop if i = 4 then next; else x(i)
8 Atrybuty Atrybuty wprowadzają dodatkowe informacje o elementach: - interfejs - architektura - sygnał Atrybuty wartości dla typów skalarnych: ‘left -- odwołanie do skrajnej lewej wartości danego typu ‘right-- odwołanie do skrajnej prawej wartości danego typu ‘high-- największa wartość danego typu | prawej ‘low-- najmniejsza wartość danego typu | lewej ‘lenght-- określa liczbę elementów ograniczonej macierzy ‘event-- zwraca true jeśli atrybut zanotował w tym momencie zmianę ‘range-- określa zakres ograniczanego obiektu
9 Sygnał zegarowy Sposoby określenia sygnału zegarowego dla układu sekwencyjnego: clk = ’1’ -- sygnał zegarowy aktywny poziomem wysokim clk = ’0’ -- sygnał zegarowy aktywny poziomem niskim clk’event -- sygnał zegarowy aktywny przy zmianie stanu (reakcja na obu zboczach sygnału) clk’event and clk = ’1’ -- sygnał aktywny zboczem narastającym clk’event and clk = ’0’ -- sygnał aktywny zboczem opadającym Definicje sygnału zegarowego za pomocą funkcji zawartych w wykorzystywanej bibliotece (std_logic_1164): rising_edge(clk) -- sygnał aktywny zboczem narastającym falling_edge(clk) -- sygnał aktywny zboczem opadającym
10 Przerzutnik D entity ffd is port(D,clk,R : in bit; Q : out bit); end ffd; architecture ffd1 of ffd is begin process(clk) begin if clk′event and clk = ′1′ then Q
11 Przerzutnik D Przerzutnik D z asynchronicznym resetem entity ffd is port(D,clk,R : in bit; Q : out bit); end ffd; architecture ffd2 of ffd is begin process(clk,R) begin if R = ′1′ then Q
12 Przerzutnik D Przerzutnik D z synchronicznym resetem entity ffd is port(D,clk,R : in bit; Q : out bit); end ffd; architecture ffd3 of ffd is begin process(clk) begin if clk′event and clk = ′1′ then if R = ′1′ then Q
13 Przerzutnik D Przerzutnik D z asynchronicznym resetem i setem entity ffd is port(D,clk,R,S : in bit; Q : out bit); end ffd; architecture ffd4 of ffd is begin process(clk,R,S) begin if R = ′1′ then Q
14 Zatrzask D entity ffd is port(D,clk : in bit; Q : out bit); end ffd; architecture ffd5 of ffd is begin process(clk, D) begin if clk = ′1′ then Q
15 Przerzutnik T architecture fft1 of fft is signal temp : std_logic; -- sygnal wewnetrzny begin process (clk,R) begin if R = ′1′ then temp
16 Przerzutnik T architecture fft2 of fft is begin process (clk,R) variable temp : std_logic; begin if R = ′1′ then temp := ′0′; elsif clk′event and clk = ′1′ and T = ′1′ then temp := not temp; end if; Q
17 Licznik process (clk, reset) variable Qint : std_logic_vector (3 downto 0); begin if reset = '1' then Qint := "0000"; else if clk'event and clk = '1' then if Qint < 9 then Qint := Qint + 1; else Qint := "0000"; end if; Q
18 Licznik rewersyjny process (clk, reset) begin if reset='1' then counter