Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D.
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX Vlastnosti: ) Čítač inkrementuje svůj výstup o 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=), že na výstupu je maximum ()
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX entity counter is Port ( clk,rst : in STD_LOGIC; max : out STD_LOGIC; : 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) begin if (rst= then q_ reg <= (others=> 0 ); elsif (clk event and clk= ) then q_reg <= d_int; end if; end process; -- oddelena kombinanci cast d_ int <= q_ reg + ; max <= when q_reg= else 0 ; -- detekce maxima <= q_reg; end Behavioral;
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX Koncepční schéma: 3 d_int q_reg 3
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX Výstupní signál max může zakmitávat => hazardy
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem 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í 3-bitový čítač s KO D, asyn. RST a výstupem 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; : 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= then q_reg <= (others=> 0 ); elsif (clk event and clk= ) then max<= 0 ; q_reg <= q_reg + ; if q_reg= then max<= ; end if; end if; end process;
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX Koncepční schéma nežádoucí výstupní registr
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX V případě nutnosti synchronizace výstupu max koncepční schéma nebo
Synchronní 3-bitový čítač s KO D, asyn. RST a výstupem MAX entity counter is Port ( clk,rst : in STD_LOGIC; max : out STD_LOGIC; : 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); signal max_int : std_logic; begin -- oddelena pametova cast process (clk,rst) begin if (rst= ) then q_reg <= (others=> 0 ); max <= 0 ; elsif (clk event and clk= ) then q_reg <= d_int; max <= max_int; -- max je nyni synchronni (bez moznych hazardu) end if; end process; -- oddelena kombinanci cast d_ int <= q_ reg + ; max_int <= when d_int= else 0 ; -- detekce maxima <= q_reg; end Behavioral;
Univerzální synchronní 3-bitový čítač s nastavitelnými operacemi Vlastnosti: ) Výstup max oznamuje (max=), že na výstupu je maximum () 2) Vstup D a load slouží k nastavení čítače 3) Čítač umožňuje asynchronní i synchronní reset 4) Signál dir slouží k řízení směru čítaní dir= (inkrementace), dir=0 (dekrementace) 5) Všechny vstupní signály vlevo jsou synchronní clk syn_rst load en dir operace - - - "000" syn. reset 0 - - D přednastavení (=D) 0 0 0 - pauza (=) 0 0 + inkrementace 0 0 0 - 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_int : std_logic; begin -- oddelena pametova cast process (clk,rst) begin if (rst='') then q_reg <= (others=>'0'); max <= '0'; elsif (clk'event and clk='') then end if; end process; q_reg <= d_int; max <= max_int; -- max je nyni synchronni (bez moznych hazardu) -- oddelena kombinanci cast d_int <= "000" when syn_rst='' else -- synchr. reset D when load='' else -- prednastaveni q_reg when en='0' else -- pauza q_reg + when dir='' else -- inkrementace q_reg ; -- dekrementace max _ int <= '' when d_ int="" else '0'; -- detekce maxima a <= q_reg; end Behavioral;
Synchronní 3-bitový čítač s nastavitelnými operacemi 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íř dhá jíístav k určeníč následujícího áldjííh stavu Mealyho stavový automat Moorůvů stavový automat
Stavové automaty Blokové schéma Moorova stavového automatu Výstupy jsou přímo vyvedeny z paměťové části a jsou 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 jsou synchronní Výstupní dekodér není povinný N Komb. logika (následující stav) buzení Paměťová část současný stav Výstupní logika výstupy F G clk
Stavové automaty symbolické značení podmínka 5 podmínka 6 st0 00 výstup=0 výstup2=0 podmínka 7 podmínka st 0 výstup=0 výstup2=0 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 pouze při náběžné hraně hod. signálu clk st2 0 výstup=0 výstup2= podmínka 3 && podmínka 4 Programovatelné logické obvody podmínka 2 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 přechod proběhne při náběžné hraně hod. signálu clk a zároveň musí být splněna podmínka 3 a podmínka 4
Synchronní 3-bitový čítač skod Vlastnosti: ) Čítač inkrementuje svůj výstup o 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; : out STD_LOGIC_VECTOR(2 downto 0)); end counter; architecture Behavioral of counter is type state_type is (s0,s,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 => next_state<=s; <="000"; when s => next_state<=s2; <="00"; when s2 => next_ state<=s3; <="00"; when s3 => next_state<=s4; <="0"; when s4 => next_state<=s5; <="00"; when s5 => next_state<=s6; <="0"; when s6 => next_state<=s7; <="0"; end case; end process; end Behavioral; when s7 => next_state<=s0; <="";
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. obvodů D a blok G není vůbec potřeba!!!!!
Synchronní 3-bitový čítač s KO D Synchronní 3-bitový čítač s KO D Návrh bloku F vytvoříme pravdivostní tabulku (3 vstupy) S č ý t Následující stav 0 2 0 2 2 D Neminimalizované funkce stav Současný stav Následující stav (buzení) 2 0 D2 D D0 s0 0 0 0 0 0 0 2 0 2 0 2 0 2 2 D + + + + = 0 2 0 2 D + + = s0 0 0 0 0 0 s 0 0 0 0 s2 0 0 0 0 2 0 2 0 D + + = 0 2 0 2 0 2 0 2 D + + + + = s3 0 0 0 s4 0 0 0 s5 0 0 0 2 0 2 + + s5 0 0 s6 0 s7 0 0 0
Synchronní 3-bitový čítač s KO D Konečné schéma komb. logika F paměťová část 0 0 D0 D 0 2 2 CLK & & & D D výstupy & CLK & & D2 D 2 & CLK clk
Detektor posloupnosti 0 na sériové lince
Detektor posloupnosti 0 na sériové lince Blokové schéma data Komb. logika (následující stav) buzení Paměťová část současný stav Výstupní logika detection F G N clk
Detektor posloupnosti 0 na sériové lince Stavový diagram
Detektor posloupnosti 0 na sériové lince Podrobnější blokové schéma nyní víme, že paměťová část bude složena ze 2 klop. obvodů D!!!!!
Detektor posloupnosti 0 na sériové lince Návrh bloku F vytvoříme pravdivostní tabulku (3 vstupy) Vstupy Výstupy Současný stav Současný stav Následující stav (buzení) Následující stav data 0 D D0 st0 0 0 0 0 0 st0 st0 0 0 0 st st 0 0 st st 0 0 0 st2 st2 0 0 0 0 st0 st2 0 st3 st3 0 0 st2 st3 0 st
Detektor posloupnosti 0 na sériové lince Návrh bloku F vyjádření logických funkcí z pravdivostní tabulky D= data 0+ data 0= = data 0data 0 D0 = data
Detektor posloupnosti 0 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í paměťová část současný stav výstupní logika G data D0 D 0 data data Výstupní logika 0 0 CLK & G & D D & detection CLK clk
Detektor posloupnosti 0 na sériové lince Návrh bloku F vytvoříme pravdivostní tabulku (2 vstupy) Současný stav Vstupy Výstupy Současný č stav 0 detection st0 0 0 0 st 0 0 st2 0 0 st3 detection = 0
Detektor posloupnosti 0 na sériové lince Konečné schéma
Detektor posloupnosti 0 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,st,st2,st3); -- definice vlastniho typu state signal present_state,next_state state,next state : state; -- deklarece signalu typu state Begin -- pametova cast process (clk,rst) begin if (rst='') then -- asynchronni reset present_state <= st0; elsif rising_edge(clk) then present_state <= next_state; -- prechod mezi stavy pri nabezne hrane clk end if; end process; -- kombinacni cast F process (present_state,data) begin case present_state is when st0 => if (data='0') then next_state <= st0; else next_state <= st; -- prisla prvni end if; -- pokracovani na nasledujicim snimku
Detektor posloupnosti 0 na sériové lince VHDL popis end case; end process; when st => if (data='0') then next_state <= st2; -- prisla 0 else next_state <= st; end if; when st2 => if (data='0') then next_state <= st0; else next_state <= st3; -- prisla druha end if; when st3 => if (data='0') then next_state <= st2; else next_state <= st; end if; -- kombinacni cast G detection <= '' when present _ state=st3 else '0'; -- vystup prejde do ve stavu st3 end Behavioral;