3.1. A SZINKRON SZEKVENCIÁLIS HÁLÓZATOK A mai összetett digitális rendszerek nem vezethetők vissza egyszerű kombinációs funkciókra: a berendezés viselkedése nem csak a bemeneti változók pillanatnyi értékeitől függ, hanem figyelembe kell venni bizonyos előzményeket is. Az olyan hálózatokat, amelyek viselkedése az előzményektől is függ, szekvenciális (sorrendi) hálózatoknak nevezzük. A hálózat előzményei alatt érthetnénk a korábbi időpontokban jelentkező bemeneti és kimeneti jelek kombinációit. Sokkal inkább célszerű úgy kezelni a dolgot, hogy az összes előzmény a hálózatot egy bizonyos állapotba juttatta, és a hálózat jelenlegi reakciója ettől az állapottól és a pillanatnyi bemeneti jelektől függ. A gyakorlatban előforduló hálózatoknál az állapotok száma viszonylag kicsi, ezért könnyen kódolható. Az állapotok véges számára utal a sorrendi hálózatok angol elnevezése: finite state machine – véges állapotú gép, a magyar szakirodalomban is használatos az állapotgép elnevezés. A szekvenciális hálózatok megépíthetők úgy, hogy a bemeneti jel(ek) megváltozása azonnal beindítja az állapotváltozást. Az ilyen hálózatokat aszinkron sorrendi hálózatoknak nevezzük. Tekintettel az aszinkron hálózatok bizonyos problémáira (versenyfutási jelenség, metastabilitás) a mai tervezéseknél általában szinkron hálózatokat építünk. A szinkron hálózatokra jellemző, hogy az állapotváltozás (léptetés) csak bizonyos, előre meghatározott időpontokban következhet be. Ezeket az időpontokat az órajellel (clock) határozzuk meg. A szinkron hálózatoknak is vannak bizonyos időzítési problémáik: újabb léptetés csak az előző léptetést követő átmeneti jelenségek lecsengése után engedélyezett. Ez korlátozza a maximális órajel frekvenciát. A fejezet jórészt a szinkron hálózatokat tárgyalja, csak az utolsó alfejezetben térünk ki az aszinkron hálózatokra, mivel azok jórészt elavult megoldások.
AZ ELEMI TÁROLÓ ÁRAMKÖRÖK Egy sorrendi hálózat minden egyes állapota megadható bizonyos bináris értéksorozattal (kóddal). Ha n bites az értéksorozat (az állapot kódja), azzal legtöbb 2n állapotot tudunk megkülönböztetni. A kód minden egyes bitje egy elemi tárolóval jegyezhető meg (memorizálható). Régi tervezéseknél igyekeztek a lehető legrövidebb kóddal dolgozni. Így kétállapotú hálózatot egy elemi memóriával oldottak meg, négy állapotot két memóriával kódoltak stb. Ma már gyakran az ilyen fajta takarékosság nem szempont. A VLSI áramkörökben bőségesen állnak rendelkezésre elemi memóriák, így könnyen építhető olyan megvalósítás, amelynél kód bitjeinek száma megegyezik az állapotok számával. Léteznek szintvezérelt tárolók és élvezérelt tárolók. A szintvezérlés aszinkron működést jelent: a szintvezérelt elemi memória egy kis aszinkron sorrendi hálózat, amely a bemeneti vezérlőjelekre közvetlenül reagál. Ezzel szemben, az élvezérelt elemi memória egy kis szinkron hálózat, amely a vezérlőjel megváltozására nem reagál azonnal, hanem az órajelre vár, ennek az értékváltozását követően hajtja végre a vezérlőjelekkel előre definiált változást. A SZINTVEZÉRELT TÁROLÓK (LATCH) Ha a 3.xx ábra szerint két logikai inverterre (invertáló illesztő) visszacsatolást alkalmazunk, a kapcsolásnak két stabil állapota lesz. Egyik esetben a Q kimenet van magas szinten, ezzel biztosítva a kimeneten az alacsony szintet, ami viszont fenntartja a Q kimeneten fennálló magas szinten, tehát a kapcsolás öntartó. A másik eset szimmetrikus: Q van alacsony szinten, Q_L magas szinten.
Alaposabb elemzést a logikai inverterek átviteli jelleggörbéinek ismeretében végezhetünk. Egy diagramon megrajzolva az átviteli jelleggörbéket a 3.xx ábrát kapjuk. A görbék metszéspontjai a lehetséges munkapontokat mutatják. A tengelyek közelében levő munkapontok adják a két stabil állapotot. A diagramok középső részén látható metszéspontról bizonyítható, hogy instabil: ha belső vagy külső zajok hatására elmozdul a munkapont, beindul egy folyamat, amely a munkapontot a stabil állapotok egyike felé tolja. Sajnos, nem tudható, hogy az átmenet mennyi ideig fog tartani és melyik állapotban végződik. A viselkedés hasonlít az ábrán bemutatott golyó viselkedéséhez: a két szélső állapot stabil, ha viszont a golyó a csúcson van, bizonytalan, hogy mikor és melyik oldalra fog legurulni. Az ilyen instabil, vagy más szóval metastabil viselkedés a digitális rendszerekben nagyon nem kívánatos. Körültekintő tervezéssel a metastabil viselkedés nagyrészt kiküszöbölhető. A bemutatott inverteres kapcsolásnál a tápfeszültség bekapcsolásakor véletlenszerűen jön létre egyik vagy másik stabil állapot. Mindkét állapot végtelen ideig fennmaradhat. Ha kis ellenálláson keresztül az ellenkező logikai szint felé húzzuk a kimenetet, addig módosítható a kimeneti feszültség, amíg a kapcsolás átbillen az ellenkező állapotba. Ez nem számít szabályos vezérlési eljárásnak, a szabályos vezérléshez vezérlőbemeneteket kell biztosítani. Az (a) ábra szerint összekötve két NOR kaput kapunk egy szet (S) és egy reszet (R) vezérlőbementet. A vezérlésekre a kapcsolás a (b) ábrán adott táblázat szerint viselkedik. Ha mindkét bemenetre logikai nullát vezetünk, az állapot nem változik. S=1, R=0 bemeneti kombinációra a Q=1, QN=0 állapot alakul ki, S=0, R=1 bemeneti kombinációra a Q=0, QN=1 állapot alakul ki. A táblázat alsó sorában a két bemeneti egyes mindkét kimeneten nullát hoz létre, ami önmagában is általában nemkívánatos, ugyanakkor bizonytalan a viselkedés, ha a két bemenet nagyjából egy időben esik vissza alacsony logikai szintre. Az (a) ábrán az
első három sornak megfelelő szabályos viselkedésnek megfelelő idődiagramokat látjuk, míg a (b) ábrán a két bemenet egyidejű aktiválásnak következményeit látjuk. Hasonló módon építhető bistabil kapcsolás két NAND kapura alkalmazott visszacsatolással az (a) ábra szerint. Itt akkor van gond, ha mindkét bemenetre egyszerre nullát kötünk.
A fent ismertetett bistabil kapcsolásokat S-‐R latch-‐eknek nevezik. Ezek logikai szintekkel vezérelhető elemi memóriák. Az SR latch-‐ek kiegészíthetők engedélyező bemenettel az ábra szerint.
A viselkedés az ábrán megadott idődiagramokkal jellemezhető. Amikor adatok egyszerű tárolásáról van szó, inkább D latch-‐et kell alkalmazni. Ezt a kapcsolást az engedélyező bemenettel rendelkező S-‐R latch-‐ből vezetjük le, azzal, hogy az S és az R jeleket ugyanabból a D bemenetből képezzük. Az ábrán a D-‐latch logikai rajzát és funkcionális táblázatát láthatjuk. A működést az alábbi idődiagramok írják le.
A D latch-‐et szokták transzparens (átlátszó) latch-‐nek is nevezni, mivel mindaddig, amíg az engedélyező jel (C) aktív, a bemenő jel (D) megegyezik a kimenő jellel.
AZ ÉLVEZÉRELT TÁROLÓK (FLIP-‐FLOP) Az élvezérlés azt jelenti, hogy a tároló nem figyeli folyamatosan a bemenetét, hanem csak az órajel felfutó vagy lefutó éle körül mintavételezi azt, majd közvetlenül az élet követően változtatja meg az állapotát (ha szükséges). Az angol szakirodalomból eredően az élvezérelt tárolókat flip-‐flopoknak is nevezzük. Két megvalósítása ismeretes az éllel történő vezérlésnek: egyik a master-‐slave kapcsolás, a másik az úgynevezett igazi élvezérlés. A master-‐slave kapcsolásnál két latch áramkört az ábra szerint kell összekötni. Az első latch engedélyezése során (!"# = 0, !"# = 1) a D érték beíródik a latch-‐be. A második latch (slave – szolga) ilyenkor nem kap engedélyező jelet. A második latch akkor aktivizálódik, amikor az órajel alacsony szintről magasra vált. Ekkor az első latch rögzíti az órajel felfutó élénél érvényes állapotot a QM kimeneten, a második latch pedig megnyílik és átviszi ezt a Q kimenetre.
Az ábrán megadtuk a D flip-‐flop funkcionális táblázatát és rajzjelét is. A táblázat szerint az órajel felfutó élénél történhet állapotváltás. Az alábbi ábrán idődiagramokkal szemléltetjük a master-‐slave D flip-‐flop működését. A harmadik diagramon megfigyelhető, hogy a master latch továbbra is transzparens jellegű. A Q kimenet élvezérlést mutat, QN követi Q változásait. A hibátlan működéshez a D adatbemenet stabil logikai szinten kell, hogy legyen az órajel felfutó éle környékén.
A master-‐slave kapcsolást kiegészíthetjük aszinkron szet és reszet funkcióval. Ezeket a lehetőségeket rendszerint nem használjuk üzemszerűen, hanem csak a szekvenciális hálózat indításánál.
Kevesebb számú logikai kapuval és kisebb késésekkel működik az alábbi kapcsolás, ezt nevezzük igazi élvezérlésű flip-‐flopnak. A működés részletes leírása hosszadalmas. Röviden annyi mondható el, hogy itt is van kimeneti latch, a bemeneten viszont két latch kapcsolás is van, ezek készítik elő a kimenő latch számára a beírandó értéket, amely rövid impulzus formájában jelenik meg az órajel felfutó élénél.
Az alapváltozat mellett szükség lehet olyan, engedélyező jellel rendelkező flip-‐ flopokra, amelyek engedélyezés esetén minden órajelre beírás végeznek, engedélyezés hiányában viszont tartják a korábbi értéket.
Az engedélyező jel (EN) egy 2/1 –es multiplexert vezérel. Ezzel döntjük el, hogy beírjuk a bemeneti adatot (D) vagy megtartjuk a Q értéket. A D típusú flip-‐flopok mellett léteznek más funkcionális táblázattal működő flip-‐ flopok is. Az alábbi ábra SR flip-‐flop logikai rajzát, működési táblázatát és rajzjelét mutatja.
Hasonlóképpen szerkeszthető úgynevezett JK flip-‐flop, amelynek az az előnye, hogy szabályos a működése akkor is, ha mindkét adatbemenet (J és K) magas szinten van. A megfelelő logikai rajzot, a funkcionális táblázatot és a rajzjelet az alábbi ábrán láthatjuk.
Egy további variáció a T típusú flip-‐flop, amelynek egyetlen adatbemenete (T) van. Amikor ezt magas szinten tartjuk, minden egyes órajelre (felfutó vagy lefutó élre) a flip-‐ flop megváltoztatja az állapotát, egyébként az állapot változatlan. Gyakori az egyszerűsített kivitel (lásd a lenti ábrán), amelynek csak órajel bemenete van, ilyenkor ezt jelölik T-‐vel, ennek a jelnek minden felfutó vagy lefutó élére billen a kimenetet az ellenkező állapotba.
Fontos megjegyezni, hogy mai digitális szintézisnél szinte csak D flip-‐flopok használatosak, különösen jellemző ez a VLSI áramkörökben.