Transcript Moore gép

Á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 tömbvázlata
CLK
Bemenetek
Kombinációs
logika
Regiszter
Reset
Jelen állapot
Kombinációs
logika
Kimenetek
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
A Moore gép állapotábrája
S0
0000
1
0
S3
1111
S1
1001
0
1
S2
1100
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ő




Az így kialakított modell pontosan a Moore gép tömbvázlatának felel meg



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
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;
A Moore gép tömbvázlata három
folyamattal
CLK
IN1
P0
folyamat
next_state
P1
folyamat
Reset
current_state
P2
folyamat
OUT1