bpc-los_11 - Speciální čítače, KSA
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.
• Využitelné u vstupu, které není svým významem vzájemně závislý na ostatních
vstupech. (např.: hodnoty tlačítek, koncové spínače mechanických systému, apod.).
• Pro skupiny vstupů (např. bitové vektory), používáme jiný způsob synchronizace tzv.
korespondenční provoz.
• Správná funkce dvojitého vzorkovače vyžaduje platnost podmínky, kdy perioda
hodinového signálu vzorkovače je delší než doba trvání případného
metastabilního stavu na prvním KO.
• Problém šíření metastabilního stavu dále do obvodu, byl převeden na nejistotu,
zda se změna vstupu přenese na výstup vzorkovače, při druhé nebo až při třetí
nástupné
hraně hodinového signálu.
• Bohužel dobu trvání případného metastabilního stavu nelze pro obecnou realizaci
přesně stanovit, proto žádný vzorkovač nemůže zajistit obecně absolutní spolehlivost.
Synchronního čítače v kaskádě
Synchronní čítače v kaskádě
• Jelikož je hodinový shodný signál (CLK) přiveden na všechny čítače v
kaskádě, je třeba využít vstup (CE) (clock enable) k povolení okamžiku čítání.
• Celá kaskáda potom obsahuje vstupní signál (CE) a výstupní signál (CEO) pro
povolení čítání další kaskády.
• Dále zde bývá navíc ještě výstupní signál (PULSE), případně (TC) (terminal
count), podávající informaci, že čítač již dosáhl své maximální hodnoty (MAX)
a při příští změně stavu začne znovu od začátku.
CLK
CEO
PULSE
CE
ENTITY counter IS GENERIC (MAX : positive);
PORT (
CLK, CE : IN std_logic;
PULSE, CEO : OUT std_logic
);
END counter;
Synchronní čítač VHDL implementace
ENTITY counter IS GENERIC (MAX : positive);
PORT (
CLK, CE : IN std_logic;
PULSE, CEO : OUT std_logic
);
END counter;
CLK
CEO
PULSE
CE
Synchronní čítač VHDL implementace
ARCHITECTURE Behavioral OF counter IS SIGNAL COUNT: natural RANGE 0 TO MAX := 0; -- omezení na: <0 - MAX>
BEGIN PROCESS(CLK)
BEGIN IF(rising_edge(CLK)) THEN IF(CE = '1') THEN
COUNT <= COUNT + 1;
END IF;
END IF;
END PROCESS;
PULSE <= '1' WHEN (COUNT = MAX) ELSE
'0';
CEO <= '1' WHEN (COUNT = MAX AND CE = '1') ELSE
'0';
END Behavioral;
ENTITY counter IS GENERIC (MAX : positive);
PORT (
CLK, CE : IN std_logic;
PULSE, CEO : OUT std_logic
);
END counter;
CLK
CEO
PULSE
CE
Synchronní čítač VHDL implementace
ARCHITECTURE Behavioral OF counter IS SIGNAL COUNT: natural RANGE 0 TO MAX := 0; -- omezení na: <0 - MAX>
BEGIN PROCESS(CLK)
BEGIN IF(rising_edge(CLK)) THEN IF(CE = '1') THEN
COUNT <= COUNT + 1;
END IF;
END IF;
END PROCESS;