Digitális technika (VIMIAA01)
Gyakorlat 4. hét
Véges állapotú gépek (FSM) tervezése F1. A digitális tervezésben gyakran szükséges a logikai jelek változását érzékelni és jelezni. A változásdetektorok készülhetnek csak egy típusú változás (0→1, vagy 1→0) jelzésére, de lehetséges minden típusú jelváltás egyetlen áramkörön belüli észlelése és jelzése is. A feladatban egy felfutó él detektort tervezünk. Az X bemenőjel az órajellel szinkron működik (azaz teljesül az előkészítési és tartási idő feltétel), és tetszőlegesen változhat, azaz lehet rajta 1, 2, 3, vagy több órajelnyi, bármilyen hosszú magas vagy alacsony pulzus is. Tervezze meg azt a szinkron működésű FSM-et, amely biztosítja, hogy az X bemenőjel 0→1 váltására a DX kimenet pontosan 1 órajel széles pulzussal reagál. F1.a Tervezze meg az áramkört hagyományos módon, kézi módszerrel előállítva a szükséges függvényeket, állapotkódolást! Rajzolja fel az áramkört! Az előírt működést az alábbi idődiagram szemlélteti, az X jel 0→1 átmeneteit az a,b,c,d,e,f,g órajel felfutó éleknél érzékelve, azaz a korábbi X=0 értékhez képest X=1:
A feladat megoldásánál az előzetes állapotdiagramból érdemes kiindulni. A tervezett FSM Moore modell szerinti lesz, azaz a kimenet csak az állapotregiszter értékétől függ. A feladat megoldása során gondoskodnunk kell arról, hogy valóban csak az érvényes 0→1 átmeneteket jelezzük, tehát a bekapcsolás utáni vagy a RESET alatti folyamatos X=1 esetben ne adjunk ki felfutó élet jelző kimeneti pulzust. Ennek figyelembe vételével a felfutó él detektor állapot diagramja a következő:
Bekapcsolás vagy RESET hatására az A kezdeti állapotba kerül. Ha a bemenetei jel értéke 0, akkor átlép a B állapotba (a kimenet ez alatt 0 marad) és várja a 0→1 átmenetet. Ha azonban a bekapcsolás vagy a RESET ideje alatt a bemenet folyamatosan „1” volt, akkor az A állapotból a D állapotba lép, mert ahhoz, hogy érvényes 0→1 átmenetet detektálhasson, legalább egy „0” állapotnak is kell lennie. Így az állapot diagramunk 4 állapotot tartalmaz. Vizsgáljuk meg, esetleg lehetséges-e egyes állapotok összevonása: Két állapotra (ezek az A és D) láthatóan a kimenetek értéke azonosan 0, továbbá a következő állapotok is azonosak, a bemenet különböző értékeire. X=0-ra B és X=1-re D. Ezért ez a két
2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
állapot összevonható. Az új összevont állapotot A-val jelölve az egyszerűsített állapot diagram a következő (A RESET jel hatása természetesen öröklődött):
Az előzetes állapot átmeneti tábla: Aktuális állapotok
Következő állapot és aktuális kimenet,
Következő állapot és aktuális kimenet,
ha X bemenet = 0
ha X bemenet = 1
A
B/0
A/0
B
B/0
C/0
C
B/1
A/1
Három állapot szükséges, a fenti kimeneti értékekkel. Láthatóan Moore modell szerint működik, hiszen az állapot átmeneti tábla egy-egy sorában (tehát ugyanazokban az állapotokban) csak azonos kimeneti értékek fordulnak elő. Ezért is írtuk a kimeneti értéket az állapotot jelző körön belül. Figyeljük meg, hogy az állapot diagramba írt B/0, C/1 stb. jelzések az AKTUÁLIS állapotot és az AKTUÁLIS kimenetet jelentik, míg az állapot átmeneti tábla celláiba írt értékek a KÖVETKEZŐ állapotot, de az AKTUÁLIS kimenetet jelzik (a C állapot sorában a B/1 ill. A/1 bejegyzések)! A 3 állapot 2 bites állapotregisztert igényel. Az állapotkódolás legyen A=00, B=01, C=10. A feladatmegoldás lényegi része eddig tartott. Ha jól értelmeztük a feladatot és helyesen rajzoltuk fel az állapotdiagramot, továbbá az előzetes állapottáblát, akkor a további lépések, bár fontosak, de már csak a részletes kidolgozást jelentik, tartalmilag nem adnak újat a munkához. Ezután a kódolt állapot átmeneti tábla: Állapot neve A
B
C
2016. szeptember 27.
Bemenet
state
next_state
Kimenet
X
[1]
[0]
[1]
[0]
DX
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
1
1
0
0
0
1
0
0
1
1
1
1
0
0
0
1
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
A kódolt állapot átmeneti táblából az állapot átmeneti függvény és a kimeneti függvény kiolvasható és felrajzolható. Például az utolsó oszlop alapján a kimenet a C állapotban mindig 1, természetesen X-től függetlenül (Moore modell!). Ez egy 2 mintermet tartalmazó szorzatkifejezés, melyben az X bemenet értéke közömbös, tehát egyszerűsíthető: DX = state[1] * /state[0] * /X + state[1] * /state[0] * X = state[1] * /state[0] MEGJEGYZÉS: Felmerülhetne a DX = state[1] egyszerűsítés is, azonban biztonsági okokból meghagyjuk a C állapot teljesen specifikált kódját. Az 11 állapotkód ugyanis nem használt, és ha esetleg véletlenül, valamely külső hatásra abba az állapotba lépne a vezérlő, akkor a DX = state[1] egyúttal aktív kimenetet is generálna, ami hibás jelzést jelentene. A következő állapot logika függvénye a next_state[0] bitre nagyon egyszerű lesz. Ha X=0, akkor a következő állapot mindig B egyébként pedig A vagy C. Láthatóan a next_state[0] az X invertáltja. next_state[0] = /X A következő állapot logika függvénye a next_state[1] bitre sem bonyolult. Egyetlen esetben 1, amikor B állapotba lépve az X továbbra is 1 értékű. next_state[1] = X */state[1] * state[0])
F1.b Tervezze meg az áramkört Verilog HDL specifikáció alapján, a nyelvi elemek legkedvezőbb alkalmazásával! Túl sok optimalizációs lehetőség nem adódik. Ha már manuálisan elkészítettük a részletes logikai függvényeket, talán az a legegyszerűbb, ha ezeket írjuk be a kódba is. Definiáljuk az állapotváltozót, state[1:0], az őt vezérlő következő állapot logika kimeneti változóját, next_state[1:0] és felírjuk a függvényeket. Az állapotváltozó egy törölhető, minden órajelben frissített 2 bites regiszter.
2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
A következő állapot logika leírása lehetséges lenne egy case szerkezettel, de ebben az esetben nem segít sokat
A felfutó él detektor működésének ellenőrzése szimulációval:
2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
SZORGALMI FELADAT F1.c Tervezze meg az áramkört azzal a feltételezéssel, hogy a feladat egy „csúszó ablakos” mintafelismerés, ahol a felismerendő minta 2 bites értékre a 01 bitvektor, (a 0 a korábban érkezett mintavétel). Miben különbözik ez a korábbi verzióktól? Jelentős a különbség. Más az áramkör, lényegesen egyszerűbb. A feladat előírása alapján közvetlenül definiálható. Nincs állapot átmeneti logika, mert a 2 bites shiftregiszter miatt ez automatikusan, implicit módon meghatározott, követi a bemeneti X jel változási szekvenciáit. Ha hosszabb ideje X=0, akkor 00-ban vár és felfutó élre 10 lesz, további X=1-re átlép az 11 állapotba és tartja, majd lefutó élre 01 állapoton keresztül visszatér a 00 állapotba. A 2 bites (jobbra léptető) shr[1:0] shift regiszteben a következő állapot mindig shr[1]<=x, shr[0] <=shr[1], a logika egyszerű vezetékezés.
Figyeljük meg az shift regiszter „11” reset állapotát, ami biztosítja a minden helyzetben történő helyes indulást. A bekapcsolási vagy RESET esetén fennálló X=1 bemeneti jel hatását csak így tudjuk kiküszöbölni. Ha „reverse enginering” módszerrel visszafejtjük az áramkör működését, állapot regiszterként a shiftregisztert tekintve, akkor azt tapasztaljuk, hogy az áramkörben mind a 4 lehetséges állapot használatban van. Az extra állapot elfogadása teszi lehetővé az állapot átmeneti logika hiányát. Tehát egy 3 állapottal jellemezhető működést 4 állapot használatával realizálunk! Ezt, ha értelmesen megindokoljuk, még a vizsgán is el tudjuk fogadni.
Ha jobban megvizsgáljuk az állapotdiagramot, akkor látható, hogy a 00/0 állapot és a 01/0 állapot egymással ekvivalens, ezért összevonható lenne. Mindkettő állapot esetén ugyanis a kimeneti jel értéke azonos, és a bemenet adott értékére (0 vagy 1) azonosan viselkednek, azaz ugyanabba a következő állapotba lépnek. Ezzel visszajutnánk a feladat előző megoldásához, de szükségünk lenne egy állapot átmeneti logikára. Értékelésünk szerint ez az áramkör minden szempontból kedvezőbb az előzőnél.
2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
F2. Mintafelismerő áramkör. A feladat a bemeneten sorosan érkező bitsorozatban egy adott bitminta felismerése. Amennyiben a legutolsó 4 beérkezett bit az 1101 volt, akkor azt a kimeneten az utolsó bit beérkezésével egyidejűleg jelezzük, egyébként a kimenet nulla. F2.a Közvetlen állapotgépes megoldás, azaz a beérkező bitek alapján egy véges állapotú gép végzi a felismerést. Ebben az esetben a kimenet már az első bit megérkezésekor helyesen jelez. A mintafelismerők fontos csoportját jelentik a FSM egységeknek. Tulajdonképpen a véges állapotú automaták egyszerűsített reprezentációi. A mintafelismerés történhet Mealy automatával, amikor a beérkező bittel azonos időben már jelezzük is a találatot (az azonnali kimeneti jelet az állapot átmeneti nyílra írjuk), vagy Moore automatával, amikor kimeneti jelzés az állapotkódból következik és csak az órajel felfutó éle után jelenik meg. A feladatot most a Mealy állapot diagrammal rajzoljuk fel. Az állapotok jele, neve legyen most az a bitsorozat, ami addig beérkezett, amíg az adott állapotba jutottunk.
Rövid magyarázat: RESET után az induló állapotban vár a rendszer. Még nem érkezett egyetlen bit sem. A várt minta az 1101 ebben a sorrendben balról jobbra (először a legnagyobb helyiértékű bit jön). Tehát amíg nullák érkeznek, a gép a kiindulási állapotban marad, a kimeneti jel értéke is 0 (ezt a nyílra írt 0/0 jelölés mutatja). Amint beérkezik egy 1 értékű bit, átlépünk az _1 jelű állapotba (Az „_” karakter a korábbi tetszőleges, a mintafelismerés szempontjából viszont értéktelen bitsorozatot jelöli, azaz eddig tetszőleges számú 0 bitet.). Ha ez után egy nulla jön, visszalépünk a kiindulási állapotba. Ha az első egyes után még egy 1 bit jön, továbblépünk az _11 jelű állapotba. Mindeddig a kimenet nulla. Az _11 jelű állapotban további 1 értékű bitek jönnek, akkor ott maradunk, hiszen ennek az állapotnak a jelentése az, hogy a legutoljára beérkezett 2 bit egy 11 páros volt. Ezután az első nullára átlépünk az _110 jelű állapotba. Ha itt egy 1 értékű bit jön, akkor megérkezett egy teljes üzenet (1101), az állapot átmeneti nyílon az 1/1 jelzéssel aktiváljuk a kimenetet is. Mivel az utolsó beérkező bit 1 értékű volt, így egyből az _1 jelű állapotba lépünk, mert ez az utolsó bit már érvényes első bitje lesz a lehetséges következő mintának. Ha viszont 0 érkezett az _110 jelű állapotban, akkor ez azt jelenti, hogy 2 nulla érkezett egymás után, ami sajnos az összes eddig beérkezett biteket érvényteleníti, azaz teljesen vissza kell lépnünk a kezdőállapotba. Az állapotdiagram alapján felrajzoltuk a kezdeti állapot átmeneti táblát. Ez alapján történhet a Verilog HDL kód elkészítése. Megjegyzés: Az állapot átmeneti tábla utolsó sorában láthatóan a bemeneti INPUT jel függvényében különböző kimeneti értékek jelennek meg. Ez mutatja, hogy Mealy modell szerint tervezünk. 2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
Az állapotdiagram és az előzetes állapottábla alapján az FSM specifikációból a Verilog HDL általános minta szerinti kód előállítható. Egyetlen modulban realizáljuk az F3a és F3b megoldást, így a kimeneti válaszok összehasonlíthatók lesznek. Az F3a megoldás előkészítése, állapotkód kijelölés, állapotváltozók.
Ezt követi a már ismert általános FSM stílusban az állapotregiszter működése, az állapot átmeneti logika, és a kimeneti logika. Figyeljük meg, hogy a kimeneti logika a Mealy működési mód miatt a változói között nem csak az állapotregiszter bitjeit, hanem az INP bemeneti adatbitet is tartalmazza!
2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
SZORGALMI FELADAT F3.b Véges memóriájú megoldás. Egy megfelelően hosszú shiftregiszter fogadja a biteket és a beérkező bittel együtt a minta felismerése logikai áramkörrel történik. Hasonlítsa össze a két megoldást egymással! A véges bemeneti memóriájú realizáció elve az ilyen mintafelismerők esetén azon alapul, hogy a minta felismeréséhez az érkező biteket egy shiftregiszterbe léptetjük. Ha az n bites minta utolsó előtti n-1 bitje már a shiftregiszterben tárolódik, akkor az éppen beérkező bittel együtt pontosan kiadják a minta bitsorozatot, ami könnyen dekódolható. A megoldásban jobbról balra léptetjük be a biteket, így a shiftregiszterben éppen a szöveges felírásnak megfelelő irányban olvashatók a bitek. Az F3b feladat Verilog HDL kódrészlete a következő (közös modulban az F3a feladattal):
A két mintafelismerő áramkört közös bemeneti bitsorozattal teszteltük. Először olyan mintákat adtunk ki, amelyek nem tartalmazták a helyes bitsorozatot, ezért mindkét egység kimenete folyamatosan nulla maradt.
Ezután két helyes 1101 bitsorozatot is kiadtunk, egyik esetben 000_1101_1111 beágyazással, a másik esetben 111_1101_000 környezettel. Mindkét esetben a két mintafelismerő helyesen reagált a mintákra, a szimulációs idődiagramok által megerősítve.
Megjegyzés: A két realizáció Mealy típusú megoldást mutat be. Azonnal látszik a Mealy típusú realizáció egyik problémája is. Az INP jel jelen esetben az órajel fél periódusában, a lefutó órajel időpontjában vált, mert a szimulációs tesztkörnyezetben éppen így állítottuk be. Ezért a kimeneti out_F3a és out_F3b pulzusok is csak fél órajel periódusnyi hosszúak. Mindaddig, amíg az ilyen 2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 4. hét
rövidítések, csonkulások a kimeneti pulzuson nem veszélyeztetik a kimenetet feldolgozó áramkörben előírt előkészítési időt, ez nem lényeges probléma. De ha esetleg a kimenet túl későn veszi fel stabil értékét, akkor sajnos lehet, hogy a kimeneti jelet feldolgozó egység „lemarad” a jelzésről. Ezért javasoljuk, hogy Mealy típusú automatánál, ha a bemeneti jel nem az automata saját órajelével szinkron keletkezett (pl. külső jel), akkor feldolgozás előtt minden esetben bemeneti mintavételezéssel gondoskodjunk annak szinkronizálásáról.
2016. szeptember 27.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01