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