Véges állapotú gépek (FSM) tervezése F1. A 2. gyakorlaton foglalkoztunk a 3-mal vagy 5-tel osztható 4 bites számok felismerésével. Abban a feladatban a bemenet bitpárhuzamosan, azaz egy időben minden adatbit rendelkezésre állt. Tervezzünk egy soros mintafelismerőt, ami a bemenetére ciklikusan sorosan érkező 4 bites számok közül felismeri a fenti tulajdonságnak megfelelő bitsorozatokat és a 4. ütemben, a 4. bit beérkezésével egy időben jelzi a feltétel teljesülését, a kimenet 1-be állításával. Egyébként a kimenet a többi bitciklusban legyen 0. F1.a Idézzük fel, mi volt a megadott feltételnek megfelelő számok halmaza és milyen tulajdonság alapján terveztük meg a párhuzamos kombinációs logikai hálózatot a feladat végrehajtására? A soros működésnél melyik sorrendben várjuk a biteket? A korábban már megoldott feladat alapján a feltételeket kielégítő számok: 0, 3, 5, 6, 9, 10, 12, 15. A lehetséges értékhalmaz fele, azaz 8 érték. A bitmintákat elemezve észrevettük, hogy a jó értékekre jellemző az adatbitek páros paritása, tehát 4 bitre a párhuzamos megoldás egy XNOR függvény volt. A soros mintafelismerő egy lehetséges verziója is e tulajdonság alapján származtatható. A 4 bites beérkező minták páros paritását kell vizsgálnunk. A beérkező bitsorrend ebben az esetben érdekes módon ill. természetesen közömbös. Egyrészt a nyolc bitminta mindegyikének szimmetrikus párja is szerepel a jó értékek között, ezért nyilván a bitsorrend megcserélhető. Másrészt a páros/páratlan paritás tulajdonság csak a 0 és/vagy az 1 bitek számosságától függ, és független a számolás sorrendjétől. De feltételezhetjük a továbbiakban, hogy pl. MSb-vel (legnagyobb helyiértékű bit) kezdve érkeznek a bitek, ha ez segít a feladat megoldásában. F1.b Tervezze meg a mintafelismerő egység állapotdiagramját és előzetes állapottábláját az FSM-ek általános felépítését választva! A páros paritást felismerő állapotdiagram a következő: RESET után, vagy minden 4. ciklusban a rendszer az INIT állapotba kerül. A következő 4 bit első beérkező bitje alapján a páros (even) vagy páratlan (odd) oldalra lép. A 2. és 3. bitek beérkezésével a lehetséges váltások lényegében a páros-páratlan tulajdonság megtartását vagy váltását jelentik. A 3.
bit beérkezése után a 4. bit hatására visszalép az INIT állapotba, egyúttal a kimeneten kiadja az találatot jelző 1 vagy 0 kimeneti értéket. Ennek megfelelően ez egy Mealy FSM. Állapotminimalizálás sajnos nem lehetséges, mert meg kell különböztetni a 4 bit beérkezési fázisát, és minden bitnél szükséges a páros-páratlan megkülönböztetés is. Az állapot átmeneti tábla a következő: F1.b Tervezze meg az áramkört Verilog HDL specifikáció alapján, a nyelvi elemek kedvező alkalmazásával!
SZORGALMI FELADAT F1.c Tervezze meg az áramkört egy bemeneti véges hosszú memória használatával, és a minta párhuzamos felismerésével! Az áramkör az előírt specifikáció szerint működik? Milyen kiegészítésre van szükség, az eredeti specifikáció kielégítéséhez? A bemeneti soros memória egység szükséges mérete 3 bit. Az adatbitek az így kialakult 3 bites shiftregiszterbe ütemenként belépnek, tárolódnak és a negyedik ütemben a 4 bites bitminta minden bitje (az aktuális bemeneti bitet is tartalmazva) rendelkezésre áll. Ezért alkalmazható a második gyakorlat F4. feladatában is használt 4 változós XNOR kapu a kimenet előállítására. MEGJEGYZÉS: A soros bemeneti memóriát használó ciklikus (azaz nem csúszóablakos, mindig a legutolsó biteken dolgozó felismerő) mintafelismerők esetében sajnos egy komoly problémát meg kell oldani. A kimeneti jel csak minden 4. ütemben lehet érvényes, addig nullázni kell. Az átmeneti időszakban, amikor egy korábbi mintafelismerés befejeződött és az új minta bitjei lépegetnek be a soros memóriába, a rendszer önmagában nem biztosítja az adatméretnek megfelelő ciklus (jelen esetben 4) kivárását, a párhuzamos kiértékelő esetleg a shiftregiszter átmeneti tartalma és az aktuális bemenet alapján is generálhat találatot jelző kimeneti jelet. Amennyiben garantált, hogy a kimeneti jelet fogadó és feldolgozó hálózat a kimenetet mindig csak a 4 bites adathatárnak megfelelő pillanatban használja fel, akkor használhatnánk az egyszerű soros bemeneti memóriás megoldást minden kiegészítés nélkül. (Ez azt jelentené, hogy a kimenet az 1.,2.,3. bitciklusokban közömbös lehet, ami egy jó példa lehetne az NTSH, Nem Teljesen Specifikált Hálózatra, amikkel mi a tárgyban most nem foglalkozunk).
De a feladat specifikációja ezt nem engedi meg, tehát az egyszerű soros memóriás mintafelmerőnket ki kel egészítenünk egy olyan hálózattal, ami csak minden 4. ciklusban engedélyezi a kimenetet. Egy lehetséges megoldás egy 4 bites jobbra léptető visszacsatolt shiftregiszter 1000 kezdeti tartalommal, aminek kilépő bitje ÉS kapcsolatban van a 4 bites XNOR kapu kimenetével. Ez kapuzza/korlátozza a kiértékelő függvény megjelenését a kimeneten, úgy, hogy az 1., 2., 3. bitciklusokban a kimenet tiltva 0 kimenetet ad. A megoldás Verilog HDL kódja: A soros bemeneti 3 bites memória és a 4 bites XNOR függvény. A 4 ütemű kimeneti érvényesítést biztosító részhálózat: A második megoldás több bittárolót használ (3 + 4), mint az első (3), azonban talán áttekinthetőbb, és valószínűleg a tesztelése is egyszerűbb.
F2. Tervezzen egy regiszterekből és műveletvégző egységekből álló adatfeldolgozót, ami képes egy mintasorozat utolsó 4 adatának átlagát kiszámolni (pl. a napi hőmérsékletek alapján). A bemeneti és a kimeneti adatformátum 8 bites, az adatok korlátosak, túlcsordulás nem lehetséges. F2.a Első lépésként tervezze meg a 4 utolsó adatot tároló, 8 bites regiszterekből álló egységet. Rajzolja fel az egyes regiszterekben R0, R1, R2, R3 tárolt adatok értékeit, ha a bemeneti sorozat adatai (kb. a heti délutáni időjárás előrejelzés): x(0) = 21, x(1) = 19, x(2) = 22, x(3) = 20, x(4) = 27, x(5) = 22, x(6) = 20, x(7) = 21, x(8) = 18, x(1) = 22, F2.b Írjuk fel az átlag kiszámításának aritmetikai összefüggését! Milyen műveletvégzőkre, funkcionális egységekre van szükség a feladat elvégzéséhez? y(t) = 1/4*(x(t-4) + x(t-3) + x(t-2) + x(t-1)) = 1/4*(R0 + R1 + R2 + R3) Az átlag kiszámítása a 4 adat összegzését és 4-gyel történő osztását jelenti. Ez utóbbi művelet a bináris számrendszerben megfelel a 2-vel történő jobbra léptetésnek. Lehetséges a műveletet az adatok egyenkénti osztásával is elvégezni, de ez nagyobb kerekítési hibát okoz. y(t) = R0/4 + R1/4 + R2/4 + R3/4 F2.c Rajzolja fel a teljes átlagszámító egységet, a kimeneti átlagot is egy regiszterben eltárolva. 4 regiszter egymás után X R0 R1 R2 R3 a fenti ábra szerint A regiszterek kimenetei egy-egy 8 bites összeadóra mennek, ezek kimenetei fa struktúrában egy újabb 8 bites összeadóra. Ennek kimenetét egy 2 bites jobbra shiftelő kapja, ami a 2 bites léptetéssel realizálja ¼ -es skálázást, balról 0-kat beléptetve. A kimenetet egy újabb regiszterbe írjuk.