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 15:22] 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 === | ||
+ | <box round red 90%> | ||
+ | **Struktura pomocí NAND**\\ | ||
{{:temata:03-sekvencni_obvody:dkonand.jpg}} | {{:temata:03-sekvencni_obvody:dkonand.jpg}} | ||
+ | \\ | ||
+ | **Struktura pomocí NOR**\\ | ||
{{:temata:03-sekvencni_obvody:dkonor.jpg}} | {{:temata:03-sekvencni_obvody:dkonor.jpg}} | ||
+ | </box> | ||
=== D KO - dvoufázový === | === D KO - dvoufázový === | ||
+ | <box round red 90%> | ||
+ | **Struktura zapojení**\\ | ||
{{:temata:03-sekvencni_obvody:dtwophase.jpg}} | {{:temata:03-sekvencni_obvody:dtwophase.jpg}} | ||
+ | \\ | ||
+ | **Pravdivostní tabulka**\\ | ||
{{:temata:03-sekvencni_obvody:dtwophasetrue.jpg}} | {{:temata:03-sekvencni_obvody:dtwophasetrue.jpg}} | ||
+ | </box> | ||
=== D KO - derivační === | === D KO - derivační === | ||
+ | <box round red 90%> | ||
+ | **Struktura zapojení**\\ | ||
{{:temata:03-sekvencni_obvody:dder.jpg}} | {{:temata:03-sekvencni_obvody:dder.jpg}} | ||
+ | </box> | ||
==== 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ý === | ||
+ | <box round red 90%> | ||
+ | **Značka**\\ | ||
{{:temata:03-sekvencni_obvody:jk.jpg}} | {{:temata:03-sekvencni_obvody:jk.jpg}} | ||
+ | \\ | ||
+ | **Schema zapojení**\\ | ||
{{:temata:03-sekvencni_obvody:jkschema.jpg}} | {{:temata:03-sekvencni_obvody:jkschema.jpg}} | ||
+ | \\ | ||
+ | **Pravdivostní tabulka**\\ | ||
{{:temata:03-sekvencni_obvody:jktrue.jpg}} | {{:temata:03-sekvencni_obvody:jktrue.jpg}} | ||
+ | \\ | ||
+ | **Časový diagram**\\ | ||
{{:temata:03-sekvencni_obvody:jktime.jpg}} | {{:temata:03-sekvencni_obvody:jktime.jpg}} | ||
+ | </box> | ||
=== JK KO - derivační === | === JK KO - derivační === | ||
+ | <box round red 90%> | ||
+ | **Zapojení**\\ | ||
{{:temata:03-sekvencni_obvody:jkder.jpg}} | {{:temata:03-sekvencni_obvody:jkder.jpg}} | ||
+ | \\ | ||
+ | **Časový diagram**\\ | ||
{{:temata:03-sekvencni_obvody:jkdertime.jpg}} | {{:temata:03-sekvencni_obvody:jkdertime.jpg}} | ||
+ | </box> | ||
==== 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í === | ||
+ | <box round red 90%> | ||
+ | **Značka**\\ | ||
{{:temata:03-sekvencni_obvody:tko.jpg}} | {{:temata:03-sekvencni_obvody:tko.jpg}} | ||
+ | \\ | ||
+ | **Pravdivostní tabulka**\\ | ||
{{:temata:03-sekvencni_obvody:tkotrue.jpg}} | {{:temata:03-sekvencni_obvody:tkotrue.jpg}} | ||
+ | \\ | ||
+ | **Časový diagram**\\ | ||
{{:temata:03-sekvencni_obvody:tkotime.jpg}} | {{:temata:03-sekvencni_obvody:tkotime.jpg}} | ||
+ | </box> | ||
===== Čítače ===== | ===== Čítače ===== | ||
- | ==== Asynchronní ==== | + | <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> | ||
- | **Tříbitový binární asynchronní čítač** | + | ==== Asynchronní ==== |
+ | **Tříbitový binární asynchronní čítač**\\ | ||
+ | \\ | ||
+ | <box round blue 90%> | ||
{{:temata:03-sekvencni_obvody:counter3.jpg}} | {{:temata:03-sekvencni_obvody:counter3.jpg}} | ||
{{:temata:03-sekvencni_obvody:counter3time.jpg}} | {{:temata:03-sekvencni_obvody:counter3time.jpg}} | ||
+ | </box> | ||
- | **čítač asynchronní (modulo 10)** | + | **čítač asynchronní (modulo 10)**\\ |
+ | \\ | ||
+ | <box round blue 90%> | ||
{{:temata:03-sekvencni_obvody:countermod10.jpg}} | {{:temata:03-sekvencni_obvody:countermod10.jpg}} | ||
{{:temata:03-sekvencni_obvody:countermod10time.jpg}} | {{:temata:03-sekvencni_obvody:countermod10time.jpg}} | ||
+ | </box> | ||
- | **čítač asynchronní (modulo 12)** | + | **čítač asynchronní (modulo 12)**\\ |
+ | \\ | ||
+ | <box round blue 90%> | ||
{{:temata:03-sekvencni_obvody:countermod12.jpg}} | {{:temata:03-sekvencni_obvody:countermod12.jpg}} | ||
{{:temata:03-sekvencni_obvody:countermod12time.jpg}} | {{:temata:03-sekvencni_obvody:countermod12time.jpg}} | ||
+ | </box> | ||
- | **Čtyřbitový binární asynchronní čítač** | + | **Čtyřbitový binární asynchronní čítač**\\ |
+ | \\ | ||
+ | <box round blue 90%> | ||
{{:temata:03-sekvencni_obvody:counter4.jpg}} | {{:temata:03-sekvencni_obvody:counter4.jpg}} | ||
+ | </box> | ||
==== Synchronní ==== | ==== Synchronní ==== | ||
Řádek 228: | Řádek 282: | ||
==== paralelní ==== | ==== paralelní ==== | ||
+ | <box round blue 90%> | ||
{{:temata:03-sekvencni_obvody:regpar.jpg}} | {{:temata:03-sekvencni_obvody:regpar.jpg}} | ||
+ | </box> | ||
==== posuvné ==== | ==== posuvné ==== | ||
+ | <box round blue 90%> | ||
+ | {{:temata:03-sekvencni_obvody:regroll.jpg?700}} | ||
+ | </box> | ||
- | {{:temata:03-sekvencni_obvody:regroll.jpg}} | + | ===== Sekvenční automaty ===== |
+ | |||
+ | <box round green 90%|**Definice**> | ||
+ | Sekvenční automat je šestice: | ||
+ | |||
+ | <m>A=(X,Y,Q,q_0,P,V)</m>\\ | ||
+ | |||
+ | <m>X</m> ... vstupní abeceda (množina hodnot vstupního vektoru)\\ | ||
+ | <m>Y</m> ... výstupní abeceda (množina hodnot výstupního vektoru)\\ | ||
+ | <m>Q</m> ... vnitřní abeceda (množina hodnot vektoru vnitřního stavu)\\ | ||
+ | <m>q_0 \in Q</m> ... počáteční stav\\ | ||
+ | <m>P</m> ... přechodová funkce, přiřazuje některým dvojicím z <m>X*Q</m> přiřazuje prvek z Q, <m>q_{i+1}=P(x_i,q_i)</m>\\ | ||
+ | <m>V</m> ... výstupní funkce, která některým dvojicím z <m>X*Q</m> přiřazuje prvek z Y; rozlišujeme Mealyho a Moorův výstup\\ | ||
+ | |||
+ | **Mealyho automat**\\ | ||
+ | <m>y_i = V(x_i, q_i)</m>\\ | ||
+ | výstup je funkcí jak stavu, tak i vstupu | ||
+ | |||
+ | **Moorův automat**\\ | ||
+ | <m>y_i = V(q_i)</m>\\ | ||
+ | výstup je funkcí stavu | ||
+ | |||
+ | </box> | ||
+ | |||
+ | ==== FSM - finite state machine ==== | ||
+ | |||
+ | <box round blue 90%> | ||
+ | {{:temata:03-sekvencni_obvody:sekv_init.jpg?300}} | ||
+ | |||
+ | **Kombinační síť**\\ | ||
+ | \\ | ||
+ | Na základě současného stavu a hodnoty vstupů generuje (binární) kód následujícího stavu automatu (Next State) | ||
+ | |||
+ | **Pameť**\\ | ||
+ | * 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) | ||
+ | * musí být inicializována – uvedena do výchozího stavu - asynchronní/synchronní reset | ||
+ | |||
+ | **Výstupy**\\ | ||
+ | * 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> | ||
===== 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í ===== | ||