bpc-los_08 - Metastabilita, VHDL-popis 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.
+Dt ⋅ Qt
Dále uvedené zdrojové texty jsou založeny na použití procesu s
příkazy IF-THEN, které neobsahují část s příkazem ELSE.
Není-li splněna podmínka, (a nebyla-li hodnota v těle procesu jinde
nepodmínečně modifikována) zůstává hodnota signálu v obvodu
zachována (je vložena tzv.
implicitní paměť), což právě vyžadujeme.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY latch_d IS PORT(
d, clk: IN std_logic;
q, nq: OUT std_logic;
);
END latch_d;
Hladinový synchronní klopný
obvod D (latch)
D
Q
Q
C
Qt = Dt−1
D
Qt
Qt
0
0
1
1
1
0
C
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY latch_d IS PORT(
d, clk: IN std_logic;
q, nq: OUT std_logic;
);
END latch_d;
Hladinový synchronní klopný
obvod D (latch)
D
Q
Q
C
Qt = Dt−1
D
Qt
Qt
0
0
1
1
1
0
C
ARCHITECTURE Behavioral OF latch_d IS
BEGIN PROCESS (d, clk) -- Musí zde být oba signály
BEGIN IF (clk = '1') THEN q <= d;
nq <= NOT d;
END IF;-- Neuvedením větve else generujeme impl. paměť
END PROCESS;
END Behavioral;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY register_d IS PORT(
d, clk: IN std_logic;
q, nq: OUT std_logic;
);
END register_d;
Hranový synchronní klopný
obvod D (register)
Qt = Dt−1
D
Qt
Qt
0
0
1
1
1
0
D
Q
Q
C
C
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY register_d IS PORT(
d, clk: IN std_logic;
q, nq: OUT std_logic;
);
END register_d;
Hranový synchronní klopný
obvod D (register)
Qt = Dt−1
D
Qt
Qt
0
0
1
1
1
0
D
Q
Q
C
C
ARCHITECTURE Behavioral OF register_d IS
BEGIN PROCESS (clk) -- Pouze signál clk spouští proces
BEGIN IF (clk'event AND clk = '1') THEN q <= d;
nq <= NOT d;
END IF;-- Neuvedením větve else generujeme impl. paměť
END PROCESS;
END Behavioral;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY register_d_arst IS PORT(
d, clk, arst: IN std_logic;
q, nq: OUT std_logic;
);
END register_d_arst;
Obvod D (register) včetně
asynchronního resetu
Qt = Dt−1
AR D Qt Qt
1
X
0
1
0
0
0
1
0
1
1
0
D
Q
Q
C
AR
C
ARCHITECTURE Behavioral OF register_d_arst IS
BEGIN PROCESS (clk, arst) -- Signál clk nebo arst spouští proces
BEGIN
IF (arst = '1') THEN q <= '0'; nq <= '1'; -- Resetujeme
ELSIF rising_edge(clk) THEN -- Funkce ze std_logic_1164
q <= d;
nq <= NOT d;
END IF;-- Neuvedením větve else generujeme impl. paměť
END PROCESS;
END Behavioral;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;