Předmět
BDIO - Digitální obvody
Ústav
Ústav mikroelektroniky
Úloha č. 10
Komplexní příklad - návrh řídicí logiky pro jednoduchý nápojový automat, kombinační + sekvenční logika (stavové automaty)
Student
Cíle • Praktický návrh složitějších stavových automatů. • Implementace návrhu do cílového obvodu FPGA Spartan3-200k na vývojové desce Spartan-3 Starter Board.
Teoretický úvod
vstupy
...
Stavové automaty představují nejobecnější číslicové subsystémy zahrnující jak kombinační, tak i sekvenční podbloky (paměťová část). Obecné blokové schéma stavového automatu je na obrázku 1.
...
sekvenční vstupy
Výstupní dekodér (nepovinná část)
...
...
...
Kontrolní logika (kombinační část)
výstupy
sekvenční výstupy
Paměťová část (sekvenční část) clk
Obr. 1: Obecné schéma stavového automatu Další způsob znázornění stavového automatu pomocí blokového schématu je na obrázku 2. Kombinační logika definující následující stav F je funkce současného stavu a vstupů. Kombinační logika G definující hodnoty výsupů je funkcí současného stavu. Bloky F a G obsahují pouze z kombinační logiku.
n
vstupy
Komb. Logika (následující stav)
buzení
Paměťová část
současný stav
Výstupní logika
F
výstupy G
clk
Obr. 2: Blokové schéma stavového automatu Analýza stavového automatu řízeného hodinovým signálem se skládá z těchto základních kroků: • Určení následujícího stavu a výstupních funkcí F a G. • Využití F a G k vytvoření stavové/výstupní tabulky, která definuje následující stav a výstup pro všechny možné kombinace současného stavu a vstupu. • Nakreslení stavového diagramu, který definuje přechod mezi jednotlivými stavy. Enkódování stavových automatů Enkódování stavového automatu je proces, který rozhoduje o tom, kolik paměťových prvků (např. klopný obvod typu D) bude použito při návrhu paměťové části stavového automatů. Počet těchto prvků bude závislý na počtu stavů a na typu zvoleného enkódování. Nejčastějším typem enkódováním je binární. V tabulce 1 je zobrazen počet potřebných klopných obvodů typu D v závislosti na počtu stavů. Tab. 1: Závislost počtu stavů a potřebných KO typu D počet stavů počet KO typu D enkódovací kombinace 2
1
0a1
3 až 4
2
00, 01, 10, 11
5 až 8
3
000, 001, 010, 011, 100, 101, 110, 111
9 až 16
4
0000 ... 1111
17 až 32
5
00000 ... 11111
33 až 64
6
000000 ... 111111
Symbolické značení stavů stavového automatu ve stavovém diagtamu je na obrázku 3. název stavu
st0 enkódovací kombinace stavu
000 výstup1 = 01 výstup2 = 0
výstupy
Obr. 3: Symbolické značení stavů stavového automatu ve stavovém diagramu Ukázka přechodu mezi jednotlivými stavy je zobrazena na obrázku 4. Přechody mezi jednotlivými stavy se dějí vždy při náběžné hraně hodinového signálu clk a splněných vstupních podmínkách. Tyto podmínky nejsou povinné a vždy záleží na příslušném zadání a funkci stavového automatu. podmínka5 or podmínka6
st0
st1
podmínka7
00 výstup1 = 01
01
přechod proběhne při náběžné hraně hodinového signálu clk a zároveň musí být splněna podmínka5 nebo podmínka6
výstup1 = 01
podmínka1
výstup2 = 0
přechod proběhne pouze při náběžné hraně hodinového signálu clk
po dm í
nk a
2
výstup2 = 0
st2
přechod proběhne při náběžné hraně hodinového signálu clk a zároveň musí být splněna podmínka2
10 výstup1 = 01 výstup2 = 0
podmínka3 and podmínka4
přechod proběhne při náběžné hraně hodinového signálu clk a zároveň musí být splněna podmínka3 a podmínka4
Obr. 4: Ukázka možných přechodů ve stavovém diagramu
Zadání laboratorní úlohy Nápojový automat na kávu Definování problému Tato úloha demonstruje návrh nápojového automatu na kávu. Bude realizována na speciálním modulu, který je nutné zasunout do konektoru B1 na vývojové desce.
Zapojení 7-segmentového displeje, tlačítka a LED diody je na následujícím obrázku.
Budeme předpokládat, že všechny elektromechanické části nápojového automatu jsou zrealizovány a náš návrh se bude zaměřovat pouze na návrh logické části. Nápojový automat bude fungovat následujícím způsobem: 1) Vhazuje se jednokorunová (BTN7) a dvoukorunová mince (BTN8). 2) Káva bude vydána, když budou v automatu (zásobníku) 3 Kč. 3) Může nastat situace, že v automatu budou 4 Kč po vhození dvou dvoukorunových mincí po sobě. Automat bude schopen vrátit jednokorunovou minci. 4) Nemůže nastat případ, že by byly vhozeny obě mince najednou. 5) Pokud bude stlačeno tlačítko nápoje 1 (BTN1), objeví se na 7-segmentovém displeji jeho cena. V klidovém stavu se na 7-segmentovém displeji bude zobrazovat celková suma vhozených mincí.
Opět se jedná o sekvenční systém. Tento sekvenční systém má 5 vstupů (j, d, napoj, clk, rst) a 3 výstupy (kava_out, j_out, seg). j d napoj
kava_out nápojový automat
j_out 7
seg
clk
rst
1) a. b. c.
d.
e.
Vstupy vstup clk (T9) – Hodinový signál clk. vstup rst (M13) – asynchronní reset. Přechod do počátečního stavu. vstup j (C16) – Pokud byla vhozena jednokorunová mince do nápojového automatu, tak se na vstupu j objeví log. 1 po dobu jednoho hodinového taktu clk. Bude nutné rovněž ošetřit zákmity na tlačítku. vstup d (B16) – Pokud byla vhozena dvoukorunová mince do nápojového automatu, tak se na vstupu d objeví log. 1 po dobu jednoho hodinového taktu clk. Bude nutné rovněž ošetřit zákmity na tlačítku vstup napoj (E10) – tento vstup je asynchronní. Po zmáčknutí bude zobrazeno na 7-segmentovém displeji cena nápoje v jakémkoliv stavu. Zde nebude použit obvod debouncer s generováním jednoho výstupního pulzu.
Na vstupy j a d je nutné připojit obvod pro ošetření zákmitů na tlačítkách a rovněž generovat jeden výstupní pulz pod dobu jednoho hodinového taktu. K tomu bude sloužit obvod DEBOUNCER s generováním jednoho výstupního pulzu. Použijte váš popis obvodu debouncer z minulého cvičení. 2) Výstupy a. výstup kava_out (K16) – Výstup kava_out indikuje, že byly do nápojového automatu vhozeny 3 Kč a káva může být vydána. Výstup kava_out je v úrovni log.1 po dobu jednoho hodinového taktu. b. výstup j_out (F15) – Výstup j_out indikuje, že byly vhozeny 4 Kč a tudíž má být vrácena 1 Kč. Výstup j_out je v úrovni log.1 po dobu jednoho hodinového taktu. c. výstup seg (C11,D12,R7,C12,D11,P10,T3) – 7-bitový výstupní signál pro řízení 7-segmentového displeje
Vypracování laboratorní úlohy Úkol č. 1 (1 bod) Nakreslete stavový diagramnápojového automatu na kávu podle zadání. Nápověda: Potřebných stavů je méně než 8.
Úkol č. 2 (0,2 bodu) Kolik klopných obvodů by bylo potřeba v případě one-hot enkodování pro realizaci tohoto stavového automatu z úkolu č. 1? Odpověď:
Kolik stavů bude nutné ošetřit v případě one-hot enkodování, aby vznikl bezpečný stavový automat? Odpověď:
Úkol č. 3 (3x0,6 bodů=1,8bodů) Ve vývojovém prostředí Xilinx ISE založte nový projekt. Vytvořte VHDL popis nápojového automatu. Použijete děličku frekvence z předcházejících cvičení a upravte ji tak, aby byl základní hodinový kmitočet pro všechny bloky 10 Hz. Pro VHDL popis zvolte strukturální styl. Implementujte výsledný návrh do paměti PROM. Výslednou funkci otestujte na vývojové desce. Použité komponenty: 1) Divider – dělička kmitočtu na 10 Hz 2) Stavový automat – řídicí logika 3) Debouncer – ošetření zákmitů a generování jednoho výstupního pulzu Blokové schéma bude vypadat následovně: TOP j
debouncer
d
debouncer
kava_out nápojový automat
napoj rst
clk_100Hz
j_out 7
seg
divider clk
clk_10Hz
clk rst
Bonusový úkol č. 4 (0,6 bodu) Ve vývojovém prostředí Xilinx ISE založte nový projekt. Upravte VHDL popis nápojového automatu tak, aby plnil tyto dodatečné funkce: 1) V případě vhození částky 3 Kč se vydává káva. Vydání kávy a suma vhozených mincí bude svítit na 7-segmentovém displeji po dobu 2 sekund. 2) V případě vhození částky 4 Kč se vydává káva a jednokorunová mince. Vydání jednokorunové mince, kávy a hodnota vhozených mincí bude svítit na 7-segmentovém displeji po dobu 4 sekund.