Digitální obvody
Doc. Ing. Lukáš Fujcik, Ph.D.
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX
Vlastnosti: 1) Čítač inkrementuje svůj výstup o 1 2) Změna výstupu nastává vždy při změně náběžné hrany hodinového signálu 3) Výstup max oznamuje (max=1), (max=1) že na výstupu je maximum (111)
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX entity counter is Port ( clk,rst : in STD_LOGIC; max : out t STD_LOGIC; STD LOGIC Q : out STD_LOGIC_VECTOR (2 downto 0)); end counter; architecture Behavioral of counter is signal d_int,q_reg : STD_LOGIC_VECTOR (2 downto 0); begin -- oddelena pametova cast process (clk,rst) ( lk t) begin if (rst=‘1’ then q reg q_ g <= (others=>’0’); elsif (clk’event and clk=‘1’) then q_reg <= d_int; end if; end process process; -- oddelena kombinanci cast d_int <= q_reg + 1; max <= ‘1’ when q_reg=“111” else ‘0’; -- detekce maxima Q <= q_reg; end Behavioral;
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX
Koncepční schéma:
3
d_int
q_reg
3
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX
Výstupní signál max může zakmitávat => hazardy
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX Hazardy není potřeba řešit => následující blok je synchronní s clk
Hazardy je nutné řešit => následující blok není synchronní
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX Zápis čítače v jednom procesu – riziko zanesení chyby, registr navíc !!! entity counter is Port ( clk,rst : in STD_LOGIC; max : out STD_LOGIC; Q : out STD_LOGIC_VECTOR (2 downto 0)); end counter; architecture Behavioral of counter is signal q_reg : STD_LOGIC_VECTOR (2 downto 0); begin process (clk,rst) begin if (rst=‘1’ then q_reg <= (others=>’0’); elsif (clk’event and clk=‘1’) then max<=‘0’; q reg <= q_reg q_reg q reg + 1; if q_reg=“111“ then max<=‘1’; end if; end if; end process;
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX Koncepční schéma – nežádoucí výstupní registr
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX V případě nutnosti synchronizace výstupu max – koncepční schéma
nebo
Synchronní y 3-bitový ý čítač s KO D,, asyn. y RST a výstupem ý p MAX entity counter is Port ( clk,rst : in STD_LOGIC; max : out STD_LOGIC; STD LOGIC; Q : out STD_LOGIC_VECTOR (2 downto 0)); end counter; architecture Behavioral of counter is signal d d_int,q_reg int,q reg : STD STD_LOGIC_VECTOR LOGIC VECTOR (2 downto 0); signal max_int : std_logic; begin -- oddelena pametova cast process (clk,rst) begin if (rst=‘1’) then q_reg <= (others=>’0’); max < <= ‘0’; 0 ; elsif (clk’event and clk=‘1’) then q_reg <= d_int; max <= max_int; -- max je nyni synchronni (bez moznych hazardu) end if; end process; -- oddelena kombinanci cast d int d_ t <= q_ q reg eg + 1; ; max_int <= ‘1’ when d_int=“111” else ‘0’; -- detekce maxima Q <= q_reg; end Behavioral;
Univerzální synchronní y 3-bitový ý čítač s nastavitelnými ý operacemi p
Vlastnosti: 1) 2) 3) 4)
Výstup max oznamuje (max (max=1), 1), že na výstupu je maximum (111) Vstup D a load slouží k nastavení čítače Čítač umožňuje asynchronní i synchronní reset Signál dir slouží k řízení směru čítaní – dir=1 (inkrementace), (inkrementace) dir=0 (dekrementace) 5) Všechny vstupní signály vlevo jsou synchronní
clk syn_rst load en ↑ 1 ↑ 0 1 ↑ 0 0 0 ↑ 0 0 1 ↑ 0 0 1
dir Q operace - "000" syn. reset D přednastavení p (Q (Q=D)) Q pauza (Q=Q) 1 Q+1 inkrementace 0 Q-1 dekrementace
Synchronní 3-bitový čítač s nastavitelnými operacemi (Entita definovana podle obrázku) architecture Behavioral of counter is signal d_int,q_reg : STD_LOGIC_VECTOR (2 downto 0); signal max max_int int : std std_logic; logic; begin -- oddelena pametova cast process (clk,rst) begin if (rst='1') then q_reg <= (others=>'0'); max <= '0'; elsif (clk'event (clk event and clk='1') clk 1 ) then q_reg <= d_int; max <= max_int; -- max je nyni synchronni (bez moznych hazardu) end if; end process; -- oddelena kombinanci cast d_int <= "000" when syn_rst='1' else -- synchr. reset D when load='1' load 1 else -- prednastaveni q_reg when en='0' else -- pauza q_reg + 1 when dir='1' else -- inkrementace q_reg – 1; -- dekrementace max a _int t <= '1' when e d_ d int="111" t e else se '0'; 0 ; -- dete detekce ce maxima a a Q <= q_reg; end Behavioral;
Synchronní y 3-bitový ý čítač s nastavitelnými ý operacemi p – konc. schéma
Stavové automaty
Představují nejobecnější číslicové systémy Zahrnují jak kombinační, tak i sekvenční bloky Popis složitějších stavových automatů zvyšuje riziko výskytu chyb Čítače a posuvný registr jsou příklady stavových automatů. Stavový automat obsahuje paměť, která udržuje předcházející ř d há jí í stav t k určení č í následujícího á l d jí íh stavu t Mealyho stavový automat M ů stavovýý automat Moorův
Stavové automaty
...
...
Blokové schéma Moorova stavového automatu Vý t Výstupy jsou j přímo ří vyvedeny d z paměťové ěť é čá částiti a jjsou synchronní Výstupní dekodér není povinný ...
Stavové automaty
Blokové schéma Moorova stavového automatu Výstupy jsou přímo vyvedeny z paměťové části a jjsou synchronní y Výstupní dekodér není povinný N Komb. logika (následující stav)) F
clk
buzení
Paměťová část
současný stav
Výstupní logika G
výstupy ý py
Stavové automaty – symbolické značení
podmínka 5 || podmínka 6
přechod proběhne pouze při náběžné hraně hod. signálu clk
st0 t0 00
podmínka 7
st1 t1 01
výstup1=01 výstup2=0
podmínka 1
výstup1=10 výstup2=0
podmínka 2
st2 10
přechod proběhne při náběžné hraně hod. signálu clk a zároveň musí být splněna podmínka 5 nebo podmínka 6
přechod proběhne při náběžné hraně hod. signálu clk a zároveň musí být splněna podmínka 2
výstup1=10 výstup2=1
podmínka 3 && podmínka 4
Programovatelné logické obvody
přechod proběhne při náběžné hraně hod. hod signálu clk a zároveň musí být splněna podmínka 3 a podmínka 4
Synchronní 3-bitový 3 bitový čítač s KO D Vlastnosti: 1) Čítač inkrementuje svůj výstup o 1 2) Změna výstupu nastává vždy při změně náběžné hrany hodinového signálu
Příklad: synchronní 3-bitový čítač s KO D Obecné blokové schéma – ještě nevíme o obvodu potřebné informace
Synchronní 3-bitový čítač s KO D Stavový diagram
Synchronní 3-bitový čítač entity counter is Port ( clk : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(2 downto 0)); end counter; architecture Behavioral of counter is type state_type is (s0,s1,s2,s3,s4,s5,s6,s7); -- definice typu a vsech stavu signal next_state, present_state : state_type; -- vnitrni signaly typu state begin -- pametova cast process(clk) begin if rising_edge(clk) then present_state <= next_state; end if; end process; -- kombinacni cast F process(present_state) begin case present_state is when s0 when s1 when s2 when s3 when s4 when s5 when s6 when s7 end case; end process; end Behavioral;
=> => => => => => => =>
next_state<=s1; next_state<=s2; next_state<=s3; ; next_state<=s4; next_state<=s5; next_state<=s6; next_state<=s7; next state<=s0; next_state<=s0;
Q<="000"; Q<="001"; Q Q<="010"; ; Q<="011"; Q<="100"; Q<="101"; Q<="110"; Q<="111"; Q<= 111 ;
Příklad: synchronní 3-bitový čítač s KO D Podrobnější blokové schéma – nyní víme, že paměťová část bude složena ze 3 klop. klop obvodů D a blok G není vůbec potřeba!!!!!
Synchronní 3-bitový čítač s KO D Návrh bloku F – vytvoříme pravdivostní tabulku (3 vstupy)
stav
S č ý stav Současný t
Následující stav (buzení)
Q2
Q1
Q0
D2
D1
D0
s0
0
0
0
0
0
1
s1
0
0
1
0
1
0
s2
0
1
0
0
1
1
s3
0
1
1
1
0
0
s4
1
0
0
1
0
1
s5
1
0
1
1
1
0
s6
1
1
0
1
1
1
s7
1
1
1
0
0
0
Neminimalizované funkce D 2 = Q 2 ⋅ Q1 ⋅ Q0 + Q 2 ⋅ Q1 ⋅ Q0 + + Q 2 ⋅ Q1⋅ Q0 + Q 2 ⋅ Q1⋅ Q0
D1 = Q 2 ⋅ Q1⋅ Q0 + Q 2 ⋅ Q1 ⋅ Q 0 + + Q 2 ⋅ Q1 ⋅ Q 0 + Q 2 ⋅ Q1⋅ Q0 D 0 = Q 2 ⋅ Q1 ⋅ Q 0 + Q 2 ⋅ Q1⋅ Q0 + + Q 2 ⋅ Q1 ⋅ Q 0 + Q 2 ⋅ Q1⋅ Q0
Synchronní 3-bitový 3 bitový čítač s KO D Konečné schéma komb. logika F
Q0
1 Q0
Q1
1 Q1
Q2
1 Q2
paměťová část
D0
D
Q
Q0
CLK & &
D1
&
D
&
D2
D
&
CLK
clk
Q1
CLK
& &
Q
Q
Q2
výstupy
Detektor posloupnosti 101 na sériové lince
Detektor posloupnosti 101 na sériové lince Blokové schéma
data
1 Komb. logika (následující stav)
buzení
Paměťová část
současný stav
F
G
N clk lk
Výstupní logika
detection
Detektor posloupnosti 101 na sériové lince Stavový diagram
Detektor posloupnosti 101 na sériové lince Podrobnější blokové schéma – nyní víme, že paměťová část bude složena ze 2 klop. p obvodů D !!!!!
Detektor posloupnosti 101 na sériové lince Návrh bloku F – vytvoříme pravdivostní tabulku (3 vstupy) Vstupy Současný stav
Výstupy
Současný stav
Následující Násled jící stav sta (buzení)
Následující stav
data
Q1
Q0
D1
D0
st0
0
0
0
0
0
st0
st0
1
0
0
0
1
st1
st1
1
0
1
0
1
st1
st1
0
0
1
1
0
st2
st2
0
1
0
0
0
st0
st2
1
1
0
1
1
st3
st3
0
1
1
1
0
st2
st3
1
1
1
0
1
st1
Detektor posloupnosti 101 na sériové lince Návrh bloku F – vyjádření logických funkcí z pravdivostní tabulky
D1 = data ⋅ Q0 + data ⋅ Q1⋅ Q0 = = data d ⋅ Q0 ⋅ data d ⋅ Q1⋅ Q0
D0 = data
Detektor posloupnosti 101 na sériové lince Podrobnější schéma s paměťovou částí a navrženým blokem F komb. logika – následující stav F
buzení
d data
D0 data
1 data
Q0
1 Q0
paměťová část
D
Q
současný stav
výstupní logika G
Q0 Výstupní logika
CLK &
G &
&
D1
D
Q
CLK
clk
Q1
detection
Detektor posloupnosti 101 na sériové lince Návrh bloku F – vytvoříme pravdivostní tabulku (2 vstupy) Vstupy Současný ý stav
S č ý stav Současný t
Výstupy
Q1
Q0
detection
st0
0
0
0
st1
0
1
0
st2
1
0
0
st3
1
1
1
detection = Q1⋅ Q0
Detektor posloupnosti 101 na sériové lince Konečné schéma
Detektor posloupnosti 101 na sériové lince – VHDL popis entity detektor is Port ( clk,rst : in STD_LOGIC; data : in STD_LOGIC; detection : out STD_LOGIC); end detektor; architecture Behavioral of detektor is type state is (st0,st1,st2,st3); signal present_state,next_state present state,next state : state; Begin -- pametova cast process (clk,rst) begin if (rst='1') then present_state <= st0; elsif rising_edge(clk) then present_state <= next_state; end if; end process;
-- definice vlastniho typu state -- deklarece signalu typu state
-- asynchronni reset
-- prechod mezi stavy pri nabezne hrane clk
-- kombinacni cast F process (present_state,data) begin g case present_state is when st0 => if (data='0') then next_state <= st0; else next_state <= st1; end if; -- pokracovani na nasledujicim snimku
-- prisla prvni 1
Detektor posloupnosti 101 na sériové lince – VHDL popis when st1 => if (data='0') then next_state <= else next_state <= end if; when st2 => if (data='0') then next state <= next_state else next_state <= end if; when st3 => if (data='0') then next_state <= else next_state <= end if; end case; end process;
st2; -- prisla 0 st1;
st0; st3; -- prisla druha 1
st2; st1;
-- kombinacni cast G detection <= '1' when p present_state=st3 else '0'; ; -- vystup y p p prejde j do 1 ve stavu st3 end Behavioral;