bpc-los_09 - Posuv. registry, VHDL-implementace sekv. obvodů
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
• Oddělená paměťová a kombinační část. Bude výhodné i pro stavové
automaty.
D
clk
Q
Q
D
clk
Q
Q
D
clk
Q
Q
Q0
Q1
Q2
clk
Kombinační obvody
Synchronní čítač - implementace ve VHDL
D
clk
Q
Q
D
clk
Q
Q
D
clk
Q
Q
Q0
Q1
Q2
clk
Kombinační obvody
• Oddělená paměťová a kombinační část. Bude později výhodné i pro popis
stavových automatů.
• Jak elegantně ve VHDL implementovat kombinační část?
(log. funkce, minimalizace, přímý zápis pomocí aritmetických operátorů).
• Jak elegantně ve VHDL implementovat paměťovou část?
(proces, sekvenční příkazy).
Synchronní čítač - implementace ve VHDL
D
clk
Q
Q
D
clk
Q
Q
D
clk
Q
Q
Q0
Q1
Q2
clk
Kombinační obvody
ENTITY counter IS PORT(
clk : IN std_logic;
Q : INOUT std_logic_vector(2 DOWNTO 0)
);
END counter;
Synchronní čítač - 1.implementace ve VHDL
ENTITY counter IS PORT(
clk : IN std_logic;
Q : INOUT std_logic_vector(2 DOWNTO 0)
);
END counter;
Synchronní čítač - 1.implementace ve VHDL
ENTITY counter IS PORT(
clk : IN std_logic;
Q : INOUT std_logic_vector(2 DOWNTO 0)
);
END counter;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
Synchronní čítač - 1.implementace ve VHDL
ENTITY counter IS PORT(
clk : IN std_logic;
Q : INOUT std_logic_vector(2 DOWNTO 0)
);
END counter;
ARCHITECTURE Behavioral OF counter IS SIGNAL D : std_logic_vector(Q'range);
-- vnitřní signál pro buzení sekvenční části
BEGIN -- kombinační část
D(2) <= (NOT Q(2) AND Q(1) AND Q(0)) OR ...;
D(1) <= (NOT Q(2) AND NOT Q(1) AND Q(0)) OR ...;
D(0) <= (NOT Q(2) AND NOT Q(1) AND NOT Q(0)) OR ...;
-- paměťová část
PROCESS (clk)
BEGIN IF(clk’event AND clk = '1') THEN Q <= D;
END IF;
END PROCESS;
END Behavioral;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
Synchronní čítač - 2.implementace ve VHDL
ENTITY counter IS PORT(
clk: IN std_logic;
Q : OUT std_logic_vector(2 DOWNTO 0)
);
END counter;
Synchronní čítač - 2.implementace ve VHDL
ENTITY counter IS PORT(
clk: IN std_logic;
Q : OUT std_logic_vector(2 DOWNTO 0)
);
END counter;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL; -- pro konverzi na std_logic_vector
Synchronní čítač - 2.implementace ve VHDL
ENTITY counter IS PORT(
clk: IN std_logic;
Q : OUT std_logic_vector(2 DOWNTO 0)
);
END counter;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL; -- pro konverzi na std_logic_vector
ARCHITECTURE Behavioral OF counter IS SIGNAL q_int : unsigned(Q'range);
-- vnitřní signál pro buzení sekvenční části
BEGIN -- není oddělena kombinační a paměťová část, raději 2 i více procesů
PROCESS (clk)
BEGIN IF(rising_edge(clk)) THEN q_int <= q_int + 1; -- inkrementace signálu+odlož. přiřaz.
END IF;
END PROCESS;
Q <= std_logic_vector(q_int); -- unsigned na std_logic_vector
END Behavioral;