150 likes | 234 Views
Állapotgépek (state machines). Az állapotgép és a CPU összehasonlítása Moore gép. Az állapotgép és a CPU összehasonlítása I. Az állapotgépek használatával hatékonyan lehet szabályozási feladatokat megvalósítani
E N D
Állapotgépek(state machines) Az állapotgép és a CPU összehasonlítása Moore gép
Az állapotgép és a CPU összehasonlítása I. • Az állapotgépek használatával hatékonyan lehet szabályozási feladatokat megvalósítani • A Neumann-féle szerkezetben (CPU), pl. olyan műveletek kellenek, mint a előhozási (fetch) és végrehajtási ütem, adat útvonalak, ALU regiszterek, stb • Egy állapotgép teljesítménye sokkal jobb, mint egy CPU-é, mivel a viselkedést leíró kód a Bool-algebrát megvalósító kapu-hálózatban jelenik meg az állapot pedig flip-flopokban van tárolva • A következő kód megvalósítható CPU-ban vagy VHDL nyelven leírt állapotgépben: if a>37 and c<7 then state <= alarm; out_a <= ‘0’; out_b <= ‘0’; out_analog <= a+b; else state <= running; end if; • Ha a kódot egy CPU-ban valósítják me,g akkor kb. 10-20 gépi utasítást igényel • A végrehajtása különböző számú assembler utasítást igényel attól függően, hogy az if utasítás melyik útvonalat választja
Az állapotgép és a CPU összehasonlítása II. • A CPU-nál tehát nem határozható meg egy pontos végrehajtási idő, helyette minimum és maximum végrehajtási időtartamot kell használni • Ha ugyanezt a kódot kapukkal és flip-flopokkal valósítják meg, akkor a végrehajtás egy órajel ciklusig tart • Következésképpen az állapotgépes megvalósítás teljesítménye és időbeli meghatározottsága lényegesen jobb, mint a CPU-belié • Az állapotgép két ütemben működik: • első ütemben az új állapotot kiszámítja • második ütemben az új állapotot betölti egy regiszterbe • A következő állapot kiszámításának időigénye határozza meg az állapotgép sebességét • Minden egyes órajelnél frissítik a regisztereket • Majd elkezdődik a következő állapot kiszámítása, aminek be kell fejeződnie, mielőtt a következő órajel megérkezik, hogy amikor a regisztereket frissíteni kell, a belső jelek ismét stabil állapotban legyenek
Az állapotgépek típusai • Két alapvető típus: • Mealy gép • a kimenete a jelenlegi állapotának és az összes bemenet függvénye • mindig egy órajel ciklus alatt működik • azonnal változtatja a kimeneteit, amint változnak a bemenetek • Moore gép • a kimenete csak a jelenlegi állapotának függvénye • először az állapotát kell megváltoztatnia, azaz várnia egy órajel ciklust, mielőtt a kimeneti értékei megváltoznak
A Moore gép elemzése I. • Példa: legyen négy állapot: S0, S1, S2 és S3, a hozzájuk tartozó kimeneti értékek rendre: “0000”, “1001”, “1100” és “1111”, a VHDL kód: entity pelda is port(clk,in1,reset: in std_logic; out1: out std_logic); end pelda; architecture moore of pelda is type state_type is (s0,s1,s2,s3); -- Állapot bejelentés signal state: state_type; begin demo_process: process(clk,reset) -- Órázott folyamat begin if reset=‘1’ then state<=s0; -- Állapot törlése elsif clk’event and clk=‘1’ then case state is when s0=> if in1=‘1’ then state<=s1; end if; when s1=> if in1=‘0’ then state<=s2; end if; when s2=> if in1=‘1’ then state<=s3; end if; when s3=> if in1=‘0’ then state<=s0; end if; end case; end if; end process;
A Moore gép elemzése II. • Folytatás: output_p: process(state) -- Kombinációs folyamat begin case state is when s0=> out1<=“0000“; when s1=> out1<=“1001“; when s2=> out1<=“1100“; when s3=> out1<=“1111“; end case; end process; end moore; • Ahogy a fenti leírásból is látszik, az állapotgép három részből áll: • Bejelentés (deklaráció) • órázott folyamat • kombinációs folyamat
Bejelentés • A bejelentés az állapotot jelenti be • Bármilyen név választható az állapot számára, amely felsorolt típusú • Egy célszerű választás: type state_type is (start_state, run_state, error_state); signal state: state_type;
Órázott folyamat • Az órázott folyamat dönti el, hogy mikor kell az állapotgépnek állapotot váltania • Ezt a folyamatot az állapotgép órája aktiválja • A jelen állapottól és a bemeneti jelek állapotától függően az állapotgép minden aktív órajel változásra változtathatja az állapotot
Kombinációs folyamat • A kombinációs folyamat a jelen állapottól függően rendeli hozzá a kimeneti jelekhez az értékeket • Az előző példában látható, hogy az output_p folyamat érzékenységi listájában csak az állapot vektorok vannak felsorolva, ami megfelel a Moore gép kimeneti jeleire vonatkozó meghatározásnak
Moore modell három folyamattal I. • Az előző, általános VHDL modellel szemben van olyan modell, amely három folyamatból áll, melyek feladata a következő • egy a következő állapotot dekódolja • egy hozzárendeli az állapot vektort a current_state-hez • egy a kimeneti jelek értékeit állítja be • Az így kialakított modell pontosan a Moore gép tömbvázlatának felel meg • Némileg hosszabb VHDL kódra vezet és kicsit lassabb a szimulációja • Dokumentációs szempontból előnyösebb • A későbbi szintézis szempontjából nincs különbség a két modell között
Moore modell három folyamattal II. entity pelda is port(clk,in1,reset: in std_logic; out1: out std_logic); end pelda; architecture moore of pelda is type state_type is (s0,s1,s2,s3); -- Állapot bejelentés signal current_state, next_state: state_type; begin P0: process(state,in1) -- Kombinációs folyamat begin case state is when s0=> if in1=‘1’ then next_state<=s1; end if; when s1=> if in1=‘0’ then next_ state<=s2; end if; when s2=> if in1=‘1’ then next_ state<=s3; end if; when s3=> if in1=‘0’ then next_ state<=s0; end if; end case; end if; end process;
Moore modell három folyamattal III. P1: process(clk,reset) -- Órázott folyamat begin if reset=‘1’ then state<=s0; -- Állapot törlése elsif clk’event and clk=‘1’ then current_state<=next_state; end if; end process; P2: process(current_state) -- Kombinációs folyamat begin case state is when s0=> out1<=“0000“; when s1=> out1<=“1001“; when s2=> out1<=“1100“; when s3=> out1<=“1111“; end case; end process; end moore;