Digitális technika (VIMIAA01)
Gyakorlat 6. hét
Adatfeldolgozó rendszer tervezése funkcionális elemekkel F1. Tervezzünk egy adatbányász egységet, amely egy 256x8 bites ROM adattároló memóriában megkeresi a megadott keresési feltételnek megfelelő legelső (legkisebb címen elhelyezkedő) adatot. A keresés egy nyomógomb lenyomására indul. A feladat befejezését a ready kimenetre kapcsolt LED jelzi. Amennyiben a keresés sikeres volt, azaz talált a feltételnek megfelelő adatot, akkor a find kimenetre kapcsolt LED is bekapcsol. A megtalált adat címe és a megtalálta adat jelenjen meg két 8 bites kimeneten hexadecimális formában. Ezek a kimenetek a keresés alatt tetszőleges értékűek lehetnek. F1.a Legyen a keresési feltétel a következő: Találjuk meg egy 8 bites adatbemeneten megadott értékkel megegyező adatot! Tervezzük meg a feltétel kiértékelő logikát és definiáljunk egy cond_log.v Verilog modult, ami a feladatot képes elvégezni és az ok kimeneten jelzi, ha a feltétel teljesült! Az ilyen adatkeresési feladatokban a feltétel logika kialakítása mindig az egyéni, speciális előírásoktól függ. A modul általános interfészei az alábbi ábra szerintiek. Jelen esetben két 8 bites adat egyenlőségét kell csak vizsgálnunk, tehát erre a legcélszerűbb a Verilog == operátorát használnunk. A modul forráskódja:
F1.b Tervezzük meg a 256x8 bites ROM memória címzését vezérlő áramkört. Milyen funkcionális elemet érdemes választani a 0x00…0xFF címtartomány végig pásztázására? Soroljuk fel, milyen vezérlőjelekkel, kimenetekkel kell rendelkeznie a feladat ellátásához? Az első cím beállításához használjuk a clear törlő jelet, az utolsó cím megcímzésekor jelezzen a mem_end jellel! Írjuk fel a Verilog kódot! A 256x8 bites ROM memóriát egy 8 bites bináris felfelé számlálóval címezzük. Ezt a keresés indításakor töröljük a clear jellel, értéke 0x00 lesz, ezután egyenként számol, amíg a feltétel logika az ok jellel nem jelzi, hogy talált, illetve amíg el nem ér a memória utolsó adatáig. Ezt a mem_end jellel jelzi. A működést mindkét jelzés le fogja állítani, aminek határásra a clear vezérlőjel újra 0x00-ra törlai a számlálót.
2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
F1.c Definiáljuk a 256x8 bites ROM memóriát a Verilog HDL tervezési nyelven. Adjuk meg a ROM feltöltését biztosító adatfájl tartalmát, használatai módját. A ROM egy lehetséges specifikációját az alábbi kódrésztlet tartalmazza. Természetesen lehetséges az egyszerű assign data = ROM[addr]; előírás is.
A rom_data256.txt fájl tartalma minden címen a cím értékét reprezentáló karaktersorozat, 00-tól FFig. Tetszőleges más tartalom is előírható, fontos, hogy minden címhez legyen előírt adat!
F1.d A manuálisan működtetett nyomógomb használata a választott órajel sebességétől függően speciális figyelmet érdemel! Elemezzük a lehetséges problémákat és említsük meg a megoldási lehetőséget! Az indítójelet nevezzük start jelnek! A nyomógombok manuális használata nem egyszerű. Az egyszerű mechanikus nyomógombok gyakran mutatják a pergés (egy lenyomásra több be-ki-be kapcsolás) jelenségét, ami esetleg gyors órajelnél többszörös indítást is okozhat. Hasonlóan, a kézi működtetés miatt, gyors órajelnél, a feladat elvégzése után, a nyomógombot még aktívnak találva esetleg újraindulhat. Ennek elkerülésére a 4. heti gyakorlaton megismert felfutó él detektorhoz hasonló modult R_EdgeSense_FSM.v használjuk az 1 órajel periódus széles start pulzus előállítására. Ennek részleteit most nem tárgyaljuk, a feladat forráskódjában megtekinthető. F1.e Utolsó lépésként rajzoljuk fel a vezérlő állapot diagramját! A bemeneti jelek: start, kimeneti jelek: ready, find, a rendszer vezérlő jelek: cl, a keresés állapotjelei: ok és mem_end. A teljes rendszer vezérlését egy önálló vezérlőegység biztosítja. Ez a vezérlő egység egy Moore típusú FSM, amelynek bemeneti, feltétel, vezérlő és kimeneti jelei a fentiek szerintiek. A vezérlő állapotdiagramja a következő: 2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
Bekapcsolás vagy alaphelyzet beállítás (RST) után indítójelre várakozik, kimenetei kikapcsoltak, a címszámláló törölt állapotban van, IDLE állapotban várakozik. A nyomógomb megnyomásával generált start jelzésre átlép WORK állapotba, ahol folyamatosan dolgozik, azaz minden órajelre kiadja az aktuális címet, kiolvasva ezzel a ROM-ban ott tárolt adatot, amit összehasonlít a feltétel szerint a kapcsolókon beállított értékkel. Amennyiben nincs találat és még nem végzett, azaz sem ok, sem mem_end nem aktív, akkor a cím inkrementálásával folytatja a munkát a WORK állapotban. Ha megérkezik az ok jel, azaz találat van, akkor átlép HIT állapotba, ahol kiadja mindkét aktív kimenetét (ready és find), törli a címszámlálót és vár újabb indításra. Ha megérkezik a mem_end jel, ok nélkül, azaz nincs találat, akkor átlép MISS állapotba és csak a ready kimenetét aktíválja, a find nulla marad. Ekkor is törli a címszámlálót és vár újabb indításra. Mivel a WORK állapot kivételével minden állapotban a címszámláló törölt állapotban van, ezért a feladatban megkívánt kijelzés érdekében a sikeres találat címét és adatát egy-egy 8 bites kimeneti regiszterbe el kell tárolni. A beírásra két lehetőség van: 1. Az ok jel használata, tehát ha van találat, az engedélyezi a beírást. Ekkor működés közben a kijelzők mindig nullát mutatnak, csak találat esetén íródik be a helyes eredmény. 2. A clear jel negáltja, azaz amíg nulla, tehát a teljes WORK állapotban, addíg engedélyezzük a beírást, ami által folyamatosan megjelenik/láthatjuk az működést, majd megáll a működés. A projekthez tartozó forrásfájlok a trágyhonlapon elérhetők.
SZORGALMI FELADAT F2. Tervezzen egy statikus aszinkron SRAM memóriainterfész áramkört a kártyán található 128Ki*8 bites memóriához! Az áramkör legyen képes az írási és olvasási műveletek végrehajtására 8 bites adatok esetén! A működéshez használja fel a 16MHz-es rendszer órajelet!
2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
F2.a Első lépésként tegyen javaslatot a tervezendő áramkör interfészének kialakítására. A belső interfészjelek: mem_din[7:0], mem_dout[7:0], mem_addr[16:0], mem_wr, mem_rd, clk16M, rst. A külső interfész jelek az SRAM interfészjeleivel azonosak: A[16:0], DIO[7:0], WEn, OEn, CSn. Az adatinterfészek eltérő módon csatlakoznak az áramkörön belül és az áramkörön kívül. A külső interfészt egyértelműen meghatározzák az SRAM memória áramkör jelei. Itt az adatbusz kétirányú, azaz be-/kimenet típusú. A vezérlőjelek pedig negált logika szerint működnek. A belső interfész kialakításánál nem használunk HiZ állapotú jeleket, ezért szétválasztott mem_din és mem_dout adatbuszok vannak. (Az alábbi szimbólumon mem_din és rdy jelei áramkörön belüli jelek, csak a kimeneti jellegük miatt kerültek a szimbólum jobb oldalára)
F2.b Tervezze meg az SRAM memóriainterfész áramkör cím és adatkezelő hálózatát.
2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
A memória vezérlő WR és RD bemenetei a működést indító parancsjelek. A bármelyik megjelenése esetén a 17 bites mem_addr címet regiszterben tárolja és majd ezt fogja használni az írás ill. olvasás művelet során. Az írási mem_dout adatot is regiszterben tárolja.
A belső adatbusz szétválasztott, külön din és dout vezetékeket használ. A din a bemeneti adatbusz, amely az olvasott adatot fogadja, folyamatosan kapja a külső kétirányú dio vonalak értékét. Ezt a dio kétirányú külső adatbuszt, amely közvetlenül az SRAM memória I/O adatvonalaira csatlakozik csak ÍRÁS esetén hajtja meg a memória vezérlő, minden más esetben a vonalakat elengedi, a kimenetek HiZ állapotban vannak. Az SRAM mindhárom vezérlőjele negált értelmezésű, ennek figyelembe vételét a kimeneti pontoknál történő invertálással biztosítjuk. A kimeneti cím a mem_adr_reg tartalma, ezt csak egy beérkező új parancs esetén módosítjuk (és reset esetén sem állítjuk, értéke közömbös).
F2.c Tervezze meg az SRAM memóriainterfész áramkör vezérlő egységét. Az állapotvezérlő megtervezése előtt röviden ismerjük meg az SRAM memória működését. Az olvasás folyamatának időzítését a következő ábra mutatja. A cím kiadása után, ha a CSn és az OEn alacsony (a WEn magas értéke mellett), akkor elindul az olvasás, és a memóriára jellemző leghosszabb időzítés (max {tAA, tCO, tOE}) után az adatkimeneti vonalak tartalmazzák az érvényes kiolvasott adatot. A használt memória időzítései a 10ns nagyságrendben vannak, tehát a 16MHz-es órajel 62,5ns periódusú órajele bőven elegendő időt hagy a működésre. Az olvasás végén a vezérlőjelek visszakapcsolhatók az inaktív állapotukba. 2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
Az írási ciklus időzítése is hasonló, de abban az esetben 3 jól elkülöníthető fázist be kell tartanunk: Az írás előkészítése, az írás végrehajtása és az írás lezárása. Az írás előkészítését az jelenti, hogy kiadjuk az érvényes címet, inaktív állapotban hagyjuk az OEn jelet, aktiváljuk CSn vezérlést és esetleg kiadjuk a beírandó adatot. Ha a cím már elegendő ideje stabil, aktiválhatjuk a WEn beíró pulzust, melynek van egy minimális szélessége. Mivel mi most a 16MHz-es órajellel ütemezünk, minden időzítési adat teljesül. A WEn kikapcsolása lezárja az írást, de az adatot és a címet még egy rövid tartási időre stabilan kell tartanunk. Ez nálunk egy újabb órajel ciklust jelent. Ezért az írás folyamatát 3 fázisban, 3 órajel ciklus alatt hajtjuk végre.
Az SRAM memóriavezérlő működését egy magasszintű állapotgépen ismertetjük. Ez abban különbözik az egyszerű állapotdiagramoktól, hogy nem csak bitváltozói vannak, hanem több bites adatokat reprezentáló értékei is lehetnek. Jelen esetben a memória cím, a memória olvasott adata és a memóriába írandó adat. természetesen teljesen tartalmazza a vezérlőjelek kiadásának időbeli sorrendjét is. A magas szintű állapotdiagram alapján a működés és a Verilog HDL FSM kód megérthető. A diagramban a belső, ponált értékű memóriavezérlő jeleket (CS,WE,OE) tüntettük fel!
2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
Az SRAM vezérlő működéséről a szimulációs diagram az alábbi ábrán látható. A bekapcsolás után a külső adatbusz HiZ állapotú (kék szín), a címvonalak nem rendelkeznek konkrét értékkel, mert csak az első parancs után töltődik a címregiszter. Amint megérkezik a WR parancs, az állapotgép átkapcsol a WR1 állapotba. Kiadja a címvonalakra címet, az adatvonalakat kimeneti módba kapcsolja és kiadja az írási adatot, továbbá aktiválja a CSn memória kiválasztó jelet. Egy órajel ütem múlva, ami előkészítési időként van beállítva, aktiválja a WEn memória írásvezérlő jelet, ez alatt a cím és az adat stabil, nem változik. Amikor deaktiválja a WEn írásvezérlő jelet, akkor a beírás megtörtént, de még egy órajelig fenntartja a cím, adat és CSn vezérlést, ez szolgál a tartási idő teljesítésére. Eközben kiadja a RDY jelet, 2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 6. hét
ami jelzi, hogy majd képes lesz újabb parancsot fogadni. Az órajel végén visszalép az IDLE állapotba és minden aktív memória vezérlőjelet kikapcsol. Az olvasás egyszerűbb, mivel az egy nem destruktív művelet. Amint észlelte a parancsot (RD =1) kiadja az olvasási címet, aktiválja a CSn és OEn vezérlőjeleket, jelezve, hogy olvasási művelet van (WEn =1, inaktív). Az egy órajel ciklus időzítés elegendő, a memória 10ns alatt kiadja az olvasott adatot. Ez megjelenik a belső mem_din buszon, ahonnan az olvasást indító egység átveheti. Ezzel egy időben kiadja a RDY jelet, ami jelzi, hogy majd újabb parancsot lesz képes fogadni. Az órajel végén visszalép az IDLE állapotba és minden aktív memória vezérlőjelet kikapcsol. Az írásnál mem_addr = 17’h01234, mem_dout =8’hab, az olvasásnál mem_addr = 17’h04567, az olvasott adat mem_din = 8’hfb.
2015. október 13.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01