OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:03-sekvencni_obvody:main [2011/04/12 16:04] vagabund |
temata:03-sekvencni_obvody:main [2016/06/03 13:01] (aktuální) xpavel27 [FSM - finite state machine] |
||
---|---|---|---|
Řádek 80: | Řádek 80: | ||
<note tip> | <note tip> | ||
- | Každý KO obsahuje obrázek schématu (struktury), pravdivostní tabulku a časové schéma. Pokud vám nebude jasné, jak daný KO (schéma) funguje, vyzkoušejte si jednotlivé vstupy (pravdivostní tabulka) a podívej se, jak se jednotlivé hodnoty mění v závislosti na čase (časové schéma) | + | Každý KO obsahuje obrázek schématu (struktury), pravdivostní tabulku a časové schéma. Pokud vám nebude jasné, jak daný KO (schéma) funguje, vyzkoušejte si jednotlivé vstupy (pravdivostní tabulka) a podívej se, jak se jednotlivé hodnoty mění v závislosti na čase (časové schéma)\\ |
+ | \\ | ||
+ | Hladinový KO reaguje na úroveň, derivační reaguje na hranu. Dvoufázový má stejnou funkčnost jako derivační (uloží hodnotu jen při změně úrovňe). | ||
</note> | </note> | ||
==== R-S KO ==== | ==== R-S KO ==== | ||
- | === R-S KO (NOR) - hladinový === | + | <box round red 90%> |
+ | Slouží pro uchování hodnoty (0 nebo 1). Nevýhodou je, pokud jsou R i S rovny 1 => neznámý stav. | ||
+ | </box> | ||
+ | |||
+ | === R-S KO (NAND) - hladinový === | ||
<box round red 90%> | <box round red 90%> | ||
**Struktura zapojení**\\ | **Struktura zapojení**\\ | ||
- | {{:temata:03-sekvencni_obvody:rsko.jpg}} | + | {{:temata:03-sekvencni_obvody:34-sr-latch-nand.png?300}} |
\\ | \\ | ||
Řádek 97: | Řádek 103: | ||
**Časový diagram**\\ | **Časový diagram**\\ | ||
{{:temata:03-sekvencni_obvody:rstime.jpg}} | {{:temata:03-sekvencni_obvody:rstime.jpg}} | ||
- | </box> | ||
- | |||
- | === R-S KO (NAND) - hladinový === | ||
- | |||
- | <box round red 90%> | ||
- | **Struktura zapojení**\\ | ||
- | {{:temata:03-sekvencni_obvody:rsnand.jpg}} | ||
</box> | </box> | ||
Řádek 109: | Řádek 108: | ||
<box round red 90%> | <box round red 90%> | ||
- | **Zapojení pomocí NOR**\\ | ||
- | {{:temata:03-sekvencni_obvody:rscenor.jpg}} | ||
- | \\ | ||
**Zapojení pomocí NAND**\\ | **Zapojení pomocí NAND**\\ | ||
{{:temata:03-sekvencni_obvody:rscenand.jpg}} | {{:temata:03-sekvencni_obvody:rscenand.jpg}} | ||
Řádek 148: | Řádek 144: | ||
{{:temata:03-sekvencni_obvody:rsdertime.jpg}} | {{:temata:03-sekvencni_obvody:rsdertime.jpg}} | ||
</box> | </box> | ||
- | |||
==== D KO ==== | ==== D KO ==== | ||
+ | |||
+ | <box round red 90%> | ||
+ | R-S KO, jehož S je napojen na D, R na ~D, čímž zabráníme stavu 1,1 na R,S. Použit pro ukládání 1 bitu. | ||
+ | </box> | ||
=== D KO - hladinový s povolovacím vstupem === | === D KO - hladinový s povolovacím vstupem === | ||
Řádek 181: | Řádek 180: | ||
==== JK KO ==== | ==== JK KO ==== | ||
+ | |||
+ | <box round red 90%> | ||
+ | Řeší problém, kdy na S a R je 1. Opět pro uložení hodnot. | ||
+ | </box> | ||
=== JK KO - dvoufázový === | === JK KO - dvoufázový === | ||
Řádek 213: | Řádek 216: | ||
==== T KO ==== | ==== T KO ==== | ||
+ | |||
+ | <box round red 90%> | ||
+ | KO, který mění svou hodnotu při každé hraně hodinového signálu | ||
+ | </box> | ||
=== T KO - derivační === | === T KO - derivační === | ||
Řádek 230: | Řádek 237: | ||
===== Čítače ===== | ===== Čítače ===== | ||
+ | |||
+ | <note tip> | ||
+ | Asynchronous (ripple) counter – changing state bits are used as clocks to subsequent state flip-flops | ||
+ | Synchronous counter – all state bits change under control of a single clock | ||
+ | </note> | ||
==== Asynchronní ==== | ==== Asynchronní ==== | ||
Řádek 275: | Řádek 287: | ||
==== posuvné ==== | ==== posuvné ==== | ||
<box round blue 90%> | <box round blue 90%> | ||
- | {{:temata:03-sekvencni_obvody:regroll.jpg}} | + | {{:temata:03-sekvencni_obvody:regroll.jpg?700}} |
</box> | </box> | ||
Řádek 312: | Řádek 324: | ||
**Pameť**\\ | **Pameť**\\ | ||
- | \\ | ||
* registr - sestaven z klopných obvodů s dynamickým řízením hodinovým signálem (CLK) | * registr - sestaven z klopných obvodů s dynamickým řízením hodinovým signálem (CLK) | ||
* pamatuje si (binární) kód současného stavu automatu (Present State) | * pamatuje si (binární) kód současného stavu automatu (Present State) | ||
Řádek 318: | Řádek 329: | ||
**Výstupy**\\ | **Výstupy**\\ | ||
- | \\ | ||
* Mealy | * Mealy | ||
* Moore | * Moore | ||
* kombinované Mealy/Moore | * kombinované Mealy/Moore | ||
+ | </box> | ||
+ | |||
+ | <box round blue 90%> | ||
+ | **Mealyho automat**\\ | ||
+ | {{:temata:03-sekvencni_obvody:meally.jpg?600}} | ||
+ | |||
+ | \\ | ||
+ | **Moorův automat**\\ | ||
+ | {{:temata:03-sekvencni_obvody:moore.jpg?600}} | ||
+ | |||
+ | \\ | ||
+ | **Mealyho/Moorův automat**\\ | ||
+ | {{:temata:03-sekvencni_obvody:meallymoore.jpg?600}} | ||
+ | </box> | ||
+ | |||
+ | === Přehled KO ==== | ||
+ | |||
+ | <box round blue 90%> | ||
+ | |||
+ | ^ <m>S</m> ^ <m>R</m> ^ <m>Q_t</m> ^ <m>Q_{t+1}</m> ^ | ||
+ | | 0 | 0 | 0 | 0 | | ||
+ | | 0 | 0 | 1 | 1 | | ||
+ | | 0 | 1 | 0 | 0 | | ||
+ | | 0 | 1 | 1 | 0 | | ||
+ | | 1 | 0 | 0 | 1 | | ||
+ | | 1 | 0 | 1 | 1 | | ||
+ | | 1 | 1 | 0 | x | | ||
+ | | 1 | 1 | 1 | x | | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:rsdiagram.jpg?200}} | ||
+ | |||
+ | ^ <m>J</m> ^ <m>K</m> ^ <m>Q_{t+1}</m> ^ | ||
+ | | 0 | 0 | <m>Q_{t+1}</m> | | ||
+ | | 0 | 1 | 0 | | ||
+ | | 1 | 0 | 1 | | ||
+ | | 1 | 1 | <m>~Q_{t+1}</m> | | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:jkdiagram.jpg?200}} | ||
+ | |||
+ | ^ <m>D</m> ^ <m>Q_t</m> ^ <m>Q_{t+1}</m> ^ | ||
+ | | 0 | 0 | 0 | | ||
+ | | 0 | 1 | 0 | | ||
+ | | 1 | 0 | 1 | | ||
+ | | 1 | 1 | 1 | | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:ddiagram.jpg?200}} | ||
+ | ^ <m>T</m> ^ <m>Q_t</m> ^ <m>Q_{t+1}</m> ^ | ||
+ | | 0 | 0 | 0 | | ||
+ | | 0 | 1 | 1 | | ||
+ | | 1 | 0 | 1 | | ||
+ | | 1 | 1 | 0 | | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:tdiagram.jpg?200}} | ||
+ | |||
+ | </box> | ||
+ | |||
+ | === Tabulka přechodů === | ||
+ | |||
+ | <box round blue 90%> | ||
+ | ^ <m>Q_t</m> ^ <m>Q_{t+1}</m> ^ ^ <m>S</m> ^ <m>R</m> ^ <m>J</m> ^ <m>K</m> ^ <m>D</m> ^ <m>T</m> ^ | ||
+ | | 0 | 0 ^ | 0 | X | 0 | X | 0 | 0 | | ||
+ | | 0 | 1 ^ | 1 | 0 | 1 | X | 1 | 1 | | ||
+ | | 1 | 0 ^ | 0 | 1 | X | 1 | 0 | 1 | | ||
+ | | 1 | 1 ^ | X | 0 | X | 0 | 1 | 0 | | ||
+ | </box> | ||
+ | === Příklad === | ||
+ | |||
+ | <box round blue 90%> | ||
+ | |||
+ | Mějme navrhnout řídicí obvod (automat) robota, který bude fungovat následovně: | ||
+ | |||
+ | **robot má dvě kolečka a umí se otáčet vlevo a vpravo**: | ||
+ | * z1=1...zatoč vlevo | ||
+ | * z2=1...zatoč vpravo | ||
+ | * z1=0 a z2=0...robot jede dopředu | ||
+ | **robot má vpředu dotekový senzor, který generuje signál x následovně**: | ||
+ | * x=1...detekována překážka | ||
+ | * x=0...žádná překážka není detekována | ||
+ | **robot má na střeše majáček** | ||
+ | * m=1...svítí, pokud robot jede | ||
+ | * m=0...nesvítí, pokud robot zatáčí vlevo či vpravo | ||
+ | **„inteligentní“ chování robota – stavy řídícího automatu** | ||
+ | * A...překážka není detekována, poslední zatočení bylo vlevo | ||
+ | * B...překážka detekována, zatoč vpravo | ||
+ | * C...překážka není detekována, poslední zatočení bylo vpravo | ||
+ | * D...překážka detekována, zatoč vlevo | ||
+ | |||
+ | ^ otáčení ^ z1=1 | zatoč vlevo | | ||
+ | ^ ^ z2=1 | zatoč vpravo | | ||
+ | ^ ^ z1=0 a z2=0 | robot jede dopředu | | ||
+ | ^ senzor ^ x=1 | detekována překážka | | ||
+ | ^ ^ x=0 | žádná překážka není detekována | | ||
+ | ^ majáček ^ m=1 | svítí, pokud robot jede | | ||
+ | ^ ^ m=0 | nesvítí, pokud robot zatáčí vlevo či vpravo | | ||
+ | ^ stavy řídícího automatu ^ A | překážka není detekována, poslední zatočení bylo vlevo | | ||
+ | ^ ^ B | překážka detekována, zatoč vpravo | | ||
+ | ^ ^ C | překážka není detekována, poslední zatočení bylo vpravo | | ||
+ | ^ ^ D | překážka detekována, zatoč vlevo | | ||
+ | |||
+ | **definice výstupů** | ||
+ | * robot začne zatáčet ihned, jakmile detekuje překážku a po celou dobu její přítomnosti => z1 a z2 jsou Mealyho výstupy, neboť jsou funkcí stavů a vstupu x | ||
+ | * majáček svítí jen v případě, že není detekována žádná překážka a robot jede => m je Moorův výstup, neboť závisí pouze na stavu | ||
+ | |||
+ | **přiřazení kódů jednotlivým stavům** | ||
+ | * A=00, B=01, C=10 a D=11 | ||
+ | |||
+ | **podrobný popis chování robota** | ||
+ | * pokud je ve stavu A a není detekována překážka, robot zůstane ve stavu A, jede dopředu a maják svítí | ||
+ | * pokud je ve stavu A a je detekována překážka, robot přechází do stavu B, zatáčí doprava a maják nesvítí | ||
+ | * pokud je ve stavu B a je detekována překážka, robot zůstane ve stavu B, zatáčí doprava a maják nesvítí | ||
+ | * pokud je ve stavu B a není detekována překážka, robot přechází do stavu C, jede dopředu a maják svítí | ||
+ | * pokud je ve stavu C a není detekována překážka, robot zůstane ve stavu C, jede dopředu a maják svítí | ||
+ | * pokud je ve stavu C a je detekována překážka, robot přechází do stavu D, zatáčí doleva a maják nesvítí | ||
+ | * pokud je ve stavu D a je detekována překážka, robot zůstane ve stavu D, zatáčí doleva a maják nesvítí | ||
+ | * pokud je ve stavu D a není detekována překážka, robot přechází do stavu A, jede dopředu a maják svítí | ||
+ | |||
+ | **typ KO pro paměť** | ||
+ | * S-R, J-K, D a T?, viz tabulka níže | ||
+ | |||
+ | **Pravdivostní tabulka** | ||
+ | |||
+ | ^ Současný stav ^^ Vstup X ^ Následující stav ^^^ Moorův výstup M ^ | ||
+ | ^ jméno ^ kód ^ ::: ^ jméno ^ kód ^ Mealyho výstupy Z1 Z2 ^ ::: ^ | ||
+ | | A | 00 | 0 | A | 00 | 00 | 1 | | ||
+ | | A | 00 | 1 | B | 01 | 01 | 1 | | ||
+ | | B | 01 | 0 | C | 10 | 00 | 0 | | ||
+ | | B | 01 | 1 | D | 01 | 01 | 0 | | ||
+ | | C | 10 | 0 | C | 10 | 00 | 1 | | ||
+ | | C | 10 | 1 | D | 11 | 10 | 1 | | ||
+ | | D | 11 | 0 | D | 11 | 00 | 0 | | ||
+ | | D | 11 | 1 | A | 00 | 10 | 0 | | ||
+ | |||
+ | **Graf přechodů** | ||
+ | |||
+ | ve stavech - kód stavu/hodnota Moorova výstupu M (kód/M)\\ | ||
+ | na hranách - hodnota vstupu X/hodnota Mealyho výstupů Z1a aZ2 (X/Z1Z2)\\ | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:fsmgraf.jpg?300}} | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:fsmtable.jpg?700}} | ||
+ | |||
+ | **Vytvoření rovnic pro dané KO** | ||
+ | |||
+ | <note tip> | ||
+ | Vybereme část tabulky, která nám reprezentuje daný KO. Sloupce pro KO nám vyjadřují, jakou hodnotu je potřeba přivést na jejich vstup, abychom dostali požadovaný výstup (násl. stav). Jinými slovy, potřebujeme najít rovnice obsahující vstup a souč. stav, jejichž výstupem je hodnota vstupu do KO. | ||
+ | </note> | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:tfsmtable.jpg?300}} | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:dtable.jpg?500}} | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:jktable.jpg?500}} | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:jksolution.jpg?500}} | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:srtable.jpg?500}} | ||
+ | |||
+ | {{:temata:03-sekvencni_obvody:ttable.jpg?500}} | ||
+ | |||
+ | |||
</box> | </box> | ||
===== Odkazy ===== | ===== Odkazy ===== | ||
<box round blue 90%> | <box round blue 90%> | ||
- | [[http://en.wikipedia.org/wiki/Flip-flop_(electronics)|Flip-Flop]] | + | [[http://en.wikipedia.org/wiki/Flip-flop_(electronics)|Flip-Flop]]\\ |
+ | [[http://en.wikipedia.org/wiki/Mealy_machine|Mealyho automat]]\\ | ||
</box> | </box> | ||
+ | ===== Zdroje ===== | ||
+ | <box round blue 90%> | ||
+ | INP přednáška č. 10: [[https://wis.fit.vutbr.cz/FIT/st/course-files-st.php/course/INC-IT/lectures/inc10_syncho.pdf|inc10_syncho]]\\ | ||
+ | odkazy | ||
+ | </box> | ||
===== Potvrzení ===== | ===== Potvrzení ===== | ||