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! 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. 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 {t AA, t CO, t OE}) 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. 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!
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, 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.