Kiegészítő segédlet szinkron sorrendi hálózatok tervezéséhez Benesóczky Zoltán 217 1
digitális automaták kombinációs hálózatok sorrendi hálózatok (SH) szinkron SH aszinkron SH Kombinációs automata Logikai függvényt valósít meg. A kimenete csak az aktuális bemeneti kombinációtól függ. z=z(x) x Z(x) z Megvalósítása kombinációs hálózattal történik. 2
Sorrendi automata A kimenet az előző bemenetektől is függ. Emlékező tulajdonsága van, melyet az állapotokkal (s) reprezentálunk. Az állapota megváltozhat, ha új bemenetet érzékel. A következő állapot (s t ) az aktuális (t időpontbeli) állapot és az aktuális bemenet függvénye. s t =S(s,x), A szinkron sorrendi hálózat (SSH) aktuális állapotát (az állapot kódját) memória tulajdonságú alkatrész, flip-flopokból álló állapot regiszter tárolja, órajellel (clk) ütemezett időpontokban, az órajel aktív élénél. (Ez vagy felfutó él (-1 átmenet), vagy lefutó él (1- átmenet) lehet. A példákban felfutó élet használunk.) A kimenete az aktuális állapot és az aktuális bemenet függvénye ún. Mealy modell szerinti működésnél. z=z(s,x) 3
A kimenet csak az aktuális állpottól függ ún. Moore modell szerinti működés esetén. z=z(s) Vegyes modell esetén egyes kimenetek Mealy zi=zi(s,x), mások Moore jellegűek zj=zj(s) A szinkron sorrendi hálózat felépítése x bemenet következõ állapot kombinációs hál. t következõ állapot next_state állapot regiszter Melay és vegyes modell esetén D rst aktuális állapot state kimeneti kombinációs hál. Z Z RESET áramkör reset clock Órajel gen. Az óragenerátor állítja elő az órajelet. A RESET áramkör bekapcsoláskor vagy a nyomógomb megnyomásakor megfelelő hosszúságú impulzust ad ki, melyet a sorrendi hálózat kezdő állapotának beállítására használunk. (A továbbiakban nem rajzoljuk le külön.) 4
A működés szemléltetése idődiagrammon CLOCK X x1 x2 x3 x4 Z Mealy Z Moore A Melay típusú kimenet megváltozhat, ha a bemenet vagy az állapot megváltozik. A Moore típusú kimenet csak állapot változáskor változhat meg. Az állapot (állapot kód, állapotregiszterben tárolt érték) csak az órajel aktív élének hatására változik meg. 5
A sorrendi hálózat leírási módjai b 1/ d 1/ állapotgráf a 1/ e 1/1 a c f /1 1/ 1/ állapottábla a b/ c/ b c d e f x= x=1 bemeneti kombináció d/ e/ e/ f/ a/ a/ a/ a/1 a/1 a/ következõ állapot/ aktuális kimenet aktuális állapot irányított gráf állapot -> gráfpont állapot átmenet ->él élre írva: bemeneti kombináció/kimeneti kombináció táblázatos forma aktuális állapot ->sor bemeneti kombinációk -> oszlop rubrika: következő állapot /aktuális kimenet 6
Legegyszerűbb állapottároló a D flip-flop. D D felfutó él érzékeny D flip-flop lefutó él érzékeny D flip-flop Az órajel aktív élére tárolja a D bemeneten levő értéket. t+1 =D A működést szemléltető idődiagram felfutó él érzékeny flip-flop esetén: CLOCK D Reset és preset bemenete is lehet: törlés (reset) Aszinkron set és reset D r esetén kimenet az órajeltől s függetlenül 1 lesz s, lesz r 1-be írás (set) hatására. Szinkron esetben csak ha ezen kívül megjön az órajel aktív éle is. Utóbbit használjuk. 7
A szinkron sorrendi hálózat állapotregiszterét közös órajelű D flip-flopok alkotják. D r regiszter D r n D n r D r clk r 8
SSH tervezése szisztematikusan Példa: Egy sorrendi hálózat egyetlen bemenetére sorosan érkeznek 3 bites számok, az órajellel szinkronban. A megtervezendő automatának fel kell ismerni, ha a 3 bites számokban pontosan 2db 1-es van, és jelezni a 3. bit beérkezésekor. Pl: x: 1 11 111 11 11 1 1 11 y: 1 1 1 1 1. Szöveg alapján előzetes állapotgráf megrajzolása. a 1/ b c 1/ 1/ d e f g 1/ 1/1 1/1 /1 1/ a 9
Az állapotgráf rajzolása során egy olyan kezdőállapotból indulunk ki, ami azt az információt tárolja, hogy a bekapcsolás (reset) óta nem jött adat. Utána a már meglévő állapotból kiindulva a feladat leírása alapján minden bemeneti kombinációra megvizsgáljuk, hogy az adott állapotban milyen kimenet kell adni és, hogy fel kell-e venni új állapotot, vagy egy már meglévő tárolja azt az információt, amire az adott bemeneti kombináció után emlékeznie kell a hálózatnak. Előbb-utóbb eljutunk oda, hogy nem kell új állapotot felvennünk és minden állapotban minden bemeneti kombiációra meghatároztuk a kimenetet és a következő állapotot. Ekkor elkészült az előzetes állapotgráf. (A fenti gráfon 2 db a állapot szerepel, ezek ugyanazok, csak az egyszerűbb rajzolás miatt kettőztük meg.) Az előzetes állapotgráf redundáns állapotokat tartalmazhat. (Olyan állapotokat, amelyek a feladat szempontjából ugyanazt az információt jegyzik meg.) Ezeket meg kell keresni és egyetlen állapottal helyettesíteni. Tehát állapotminimalizálásra lehet szükség. 1
2. Állapotminimalizálás Az előbbi e és f állapotok egyetlen állapottal helyettesíthetők mivel csak azt kell megjegyezni, hogy hány 1-es jött, a sorrendjük érdektelen. Teljesen specifikált hálózatnál (TSH, amelyben minden állapotátmenet és kimenet specifikált) ezt úgy nevezik, hogy ekvivalensek (e == f). Minden egymással ekvivalens állapotot egyetlen állapottal helyettesítünk. TSH-nál gyakorlatilag az egymással ekvivalensek közül 1-et meghagyunk a többit töröljük a gráfból vagy állapottáblából és az összes megmaradt állapotot átnevezzük. Az állapotok száma is befolyásolja a magvalósítandó hálózat bonyolultságát. Kevesebb állapothoz többnyire egyszerűbb hálózat tartozik. (Azonban nem biztos, hogy a minimális állapotszámú lesz a legegyszerűbb.) Az állapotminimalizálásra szisztematikus módszerek léteznek. Ezek kiindulópontja az előzetes állapottábla. 11
Minimalizált állapotgráf: a 1/ b c 1/ 1/ A 1/ B C 1 1/ 1/ 1/ d e f g 1/1 1/1 a 1/1 /1 1/ 1/ D E F 1 2 1/1 a /1 1/ A jobboldali rajz állapotaiba a könnyebb érthetőség miatt -beírtuk, hogy mit jegyeznek meg (eddig hány 1-es jött). A további eljárások kiindulópontja a minimalizált állapottábla. A minimalizált állapottáblát az állapotgráf alapján töltöttük ki: x= x=1 A B/ C/ B D/ E/ C E/ F/ D A/ A/ E A/ A/1 F A/1 A/ 12
3. Állapotkódolás Az állapotokhoz kódokat kell rendelni. A megvalósított hálózatban ezek képviselik az állapotokat. Az állapotkódolásra szintén vannak szisztematikus módszerek, mivel az állapotkódolás is befolyásolja a megvalósítandó hálózat bonyolultságát. Itt ad hoc kódoltunk. Az állapotot a szekunder változók (21) egy kombinációja reprezentálja. 21 x= 13 x=1 21 t /z 21 t /z A B 1/ C 1 B 1 D 11/ E 1 C 1 E 1 F 11/ D 11 A A E 1 A A /1 F 11 A /1 A A kódolt állapottábla megadja, hogy adott kódú állapotból, adott bemeneti kombináció hatására mi lesz a következő állapot kódja (21 t egyes bitjei) és a kimenet (z egyes bitjei, ha több kimenetű). Tehát a kódolt állapottábla a következő állapot bitjeinek és a kimenet(ek)nek az igazságtábláit tartalmazza!
Az előző kódolt állapottáblában még nem tüntettük fel azon állapotkódokat, amelyeket nem használunk. A nem használt állapotkódokhoz is ki kell tölteni a kódolt állapottáblát. 21 x= 21 t /z x=1 21 t /z 1/ 1 1 11/ 1 1 1 11/ 11 1 /1 11 /1 11 (---/-) (---/-) 111 (---/-) (---/-) Ha a többi (normál működésnél nem használt) állapotkódhoz közömbös bejegyzést teszünk, több egyszerűsítési lehetőség adódhat a kombinációs hálózatrész tervezésénél. Ha megbízhatóbb működésre törekszünk, akkor célszerű előírnunk, hogy a normál működésnél nem használt állapotkódokból is a használtakba vezessen a hálózat. (Normál működésnél nem használt állapotkódba kerülhet a hálózat külső zavar hatására. Közömbös kitöltésnél szerencsétlen esetben itt ragadhat az automata, ha a tervezés után a következő állapotok kódja szintén nem használt állapotkódba vezet!) 14
4. Következő állapot kódját előállító logika és a kimenet függvényeinek meghatározása A megtervezendő automata struktúrája: always@(*) következõ állapot kódját (next_state[2:]) elõállító kombinációs hálózat case(state) aktuális állapot kódja A: next_state <=... state[2:]... endcase 2() next_state[2:] 2 t D r 2 kimeneti kombinációs hálózat assign z =... 1() 1 t D r 1 Z() z x () t D r clk rst állapot reg. always@(posedge clk) if(rst) <= 3'b; else <= next_state A fenti ábrán a rövidebb leírás végett a következő jelöléseket használtuk (Verilogban megadva): assign next_state[2:] = {2 t, 1 t, t }; assign state[2:] = {2, 1,}; 15
Megtervezendők a következő állapot logika 2 t (2,1,,x), 1 t (2,1,,x), t (2,1,,x), és a kimenet Z(2,1,,x) függvényei. Mivel igazságtáblájukat egyszerre tartalmazza a kódolt állapottábla, ez alapján lehet az egyes függvények igazságtábláit kitölteni majd valamely módszerrel egyszerűsíteni. Az igazságtáblák (Logic Friday-ban megadva): 16
A Logic Friday-val minimalizált függvények: (Abban a formában, ahogy az eredményt adja. Az x' az x negáltját jelöli ) 2t = 2' 1' x + 2' 1 ' ; 1t = 2' 1' x' + 2' 1' ' x; t = 2' 1 ' x + 2' 1' x'; z = 2 1' x' + 2 1' ' x; Verilogban megadva az állapotgép leírását: reg [2:] state, next_state; //Állapotkódolás parameter A = 3'b, B = 3'b1, C = 3'b1, D = 3'b11, E = 3'b1, F = 3'b11; //Állapotregiszter always @ (posedge clk) begin if (rst) state <= A; else state <= next_state; end 17
A következő állapot logikát többféleképpen is megadhatjuk. a. megadhatjuk a minimalizált függvények alapján Boole algebrai alakban assign-al. //next state logika wire a,b,c; // ez a hozzárendelés rövidebb leírást //eredményez és reg típusú next_state esetén is működik assign {a,b,c} = state; assign next_state[2] = ~a&~b&c&x ~a&b&~c; assign next_state[1] = ~a&~b&c&~x ~a&~b&~c&x; assign next_state[] = ~a&b&~c&x ~a&~b&~c&~x; b. Azonban sokkal célszerűbb az állapottábla alapján az állpotátmeneteket megadni és a minimalizálást a tervezőrendszerre bízni. //next state logika always @(*) case(state) A: if(~x) next_state = B; else next_state = C; B: if(~x) next_state = D; else next_state = E; C: if(~x) next_state = E; else next_state = F; D: next_state = A; E: next_state = A; F: next_state = A; default: next_state = A; endcase 18
A kimeneti függvény A kimeneti függvény megadására is több lehetőségünk van. Megadhatjuk a Logic Friday által minimalizált függvényt SOP Boole algebrai alakban: assign z = a&~b&~c&x a&~b&c&~x; Megadhatjuk az állapotgráf/állapottábla alapján az állapotkódok felhasználásával: assign z = (state == E)&x (state == F)&~x; A fenti 2 megoldás összehasonlításából látható, hogy a&~b&~c& = (state == E) és a&~b&c& = (state == F), ami az állapotkódolásból következik. (Az AND kapcsolat konstanssal történő komparálásra is használható.) A következő oldalon a szinkron hálózat jobb megértése érdekénben bemutatjuk a működést egy rövid bemeneti sorozat esetére az állapotgráfon és a blokkvázlaton. 19
Mit csinál az automata RESET után az X=11 bemeneti sorozat hatására? 1 B C 1 1 1/ 1/ 11 D 1 E 111 F 1 2 1/ RESET A 1/ 1/1 /1 1/ x= 2() 1() () clk 2 t 1 t t 1 állapot reg. 2 D cl 1 D cl D cl Z() Z= a RESET A 1/ 1 B C 1 1 1/ 1/ 11 D 1 E 111 F 1 2 1/ 1/1 /1 1/ x=1 2() 1() () clk 2 t 1 1 t t állapot reg. 2 D cl 1 D cl t D 1 cl Z() Z= a RESET A 1/ 1 B C 1 1 1/ 1/ 11 D 1 E 111 F 1 2 1/ 1/1 /1 1/ x=1 2() 1() () clk 2 t 1 t t állapot reg. 2 D 1 cl 1 D cl D cl Z() Z=1 a RESET 2