CLK
Transkrypt
CLK
Laboratorium 4 Temat: Synchroniczne układy logiczne: rejestry i rejestry przesuwne. Wykorzystanie procesów. 1. Przerzutnik synchroniczny typu D a) układ przerzutnika D – wejście Q – wyjście reset – wejście zerujące (if reset='0' then Q <= '0') clk – wejście zegarowe b) tabela prawdy Dn Qn+1 0 0 1 1 Przerzutnik typu D zapamiętuje stan swojego wejścia (w cyklu n) na zboczu zegara (najczęściej narastającym) udostępniając tę wartość podczas następnego (n+1) cyklu zegarowego. c) realizacja w języku VHDL (fragmenty) entity: port (D : in std_logic; -- wejście Q : out std_logic; -- wyjście clk : in std_logic; -- wejście zegarowe reset : in std_logic); -- wejście zerujące architecture: przerzutnik: process (reset,clk) -- proces z listą czułości: reset,clk begin if (reset = '0') then -- asynchroniczne zerowanie układu Q <= '0'; elsif (clk'Event and clk='1') then -- wyzwalanie zboczem narastającym Q <= D; end if; end process przerzutnik; Projektowanie układów VLSI © 2005 Copyright by Tomasz Fałat 2. N-bitowy rejestr równoległy Przerzutnik typu D jest jednobitowym rejestrem. W celu zrealizowania rejestru wielobitowego naleŜy zdefiniować zbiór przerzutników typu D. a) układ n-bitowego rejestru(równoległe wejście, równoległe wyjście) a (n-1...0) – n-bitowy port wejściowy q (n-1...0) – n-bitowy port wyjściowy reset – wejście zerujące clk – wejście zegarowe b) realizacja w języku VHDL (fragmenty dla rejestru 8-bitowego) entity: port (a : in std_logic_vector(7 downto 0); -- wejście 8-bitowe q : out std_logic_vector(7 downto 0); -- wyjście 8-bitowe clk : in std_logic; -- wejście zegarowe nreset : in std_logic); -- wejście zerujące architecture: rejestr: process (nreset,clk) -- proces z listą czułości: reset,clk begin if (nreset = '0') then -- asynchroniczne zerowanie układu q <= (others => '0'); elsif (clk'Event and clk='1') then -- wyzwalanie zboczem narastającym q(7 downto 0) <= a(7 downto 0); end if; end process rejestr; 3. N-bitowy rejestr przesuwny a) układ n-bitowego rejestru przesuwnego (szeregowe wejście, szeregowe wyjście) we – wejście szeregowe wy – wyjście szeregowe reset – wejście zerujące clk – wejście zegarowe c(n-1...0) – wyjścia przerzutników Projektowanie układów VLSI © 2005 Copyright by Tomasz Fałat b) realizacja w języku VHDL (fragmenty dla rejestru 8-bitowego) entity: port (we : in std_logic; -- wejście szeregowe wy : out std_logic; -- wyjście szeregowe clk : in std_logic; -- wejście zegarowe nreset : in std_logic); -- wejście zerujące architecture: signal c : std_logic_vector(7 downto 0); -- sygnał wewn. 8-bitowy begin rejestr: process (nreset,clk) -- proces z listą czułości: reset,clk begin if (nreset = '0') then -- asynchroniczne zerowanie układu c <= (others => '0'); elsif (clk'Event and clk='1') then c <= we & c(7 downto 1); end if; -- wyzwalanie zboczem narastającym -- przesuwanie bitów w prawo -- c(7) <= we; ... c(0) <= c(1); end process rejestr; -- wyjście z najmłodszego bitu; wy <= c(0); -- poza procesem (!), bo to tylko -- połączenie a nie kolejny rejestr 4. Zadania do realizacji a) zrealizować 4-bitowy rejestr przesuwny z moŜliwością równoległego wpisu, np. za pomocą instrukcji if – else zagłębionej w elsif clk'event itd. Rew. 2007, P.M. Szecówka Projektowanie układów VLSI © 2005 Copyright by Tomasz Fałat