1 / 14

A verem működése fpga-n

A verem működése fpga-n. Készítette: Labancz Anita. A verem fogalma és működése. A verem egy olyan memória terület, ahol átmenetileg adatokat tudunk tárolni.

hashim
Download Presentation

A verem működése fpga-n

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A verem működése fpga-n Készítette: Labancz Anita

  2. A verem fogalma és működése • A verem egy olyan memória terület, ahol átmenetileg adatokat tudunk tárolni. • A vermet tekinthetjük egy speciális „listának”, amelynek legfőbb jellemzője, hogy az utoljára beírt adatokat lehet először kiolvasni. Az adatforgalom a bemeneti sorrenddel ellenkező kimeneti sorrendű. • LIFO (LastInFirst Out) szervezésűnek is hívjuk.

  3. A systemstack(SS) és stack pointer(SP)fogalma SYSTEM STACK • Minden mikrokontrollernek van egy rendszer verme (systemstack) • Alkalmazása • Ide tároljuk le azt a visszatérési memóriacímet, ahová vissza akarunk térni a szubrutin befejezése után • Más állapot információk tárolása interrupt bekövetkezésekor STACK POINTER • A stack pointer = veremmutató regiszter • A verem legfelső elemére mutat.

  4. A verem műveletei • Két műveletét különböztetjük meg • PUSH: Ezzel teszünk be új értékeket a verembe ( beolvasás) • POP: Ezzel törlünk a veremből régi értékeket (kiírás) • Ha új értéket teszünk be a verembe (PUSH), akkor az SP értékét csökkentem eggyel • Ha értéket törlök a veremből (POP), akkor az SP értékét megnövelem eggyel.

  5. A stack32x16 module bemutatása • Az FPGA-ban megosztott memóriát használunk a verem implementálásához • 16-bite szavakat tudunk tárolni benne és a verem kapacitása 32 lesz. • Ha push=1, akkor a verembe helyezett érték d[15:0] (órajel 0-ból 1-be áll) • Ha pop=1, akkor a veremből kiolvasott érték q[15:0] (órajel 0-ból 1-be áll) • A verem tetejéről írjuk ki az értéket. • Ha a pop=push=0, akkor nem történik változás (az órajel nem áll 01) • Ha a pop=push=1, ekkor a d[15:0] értéket úgy tárolom el a verem tetején (01), hogy az SP értéke nem változik (nem csökken) • Ha a verem üres, akkor empty = 1 • Ha a verem tele van, akkor a full = 1 d[15:0] stack32x16 q[15:0] clr full push pop empty clk

  6. A stack32x16 module bemutatása • 32x16 megosztott RAM (CoreGenerator) • Az SP tartalmazza a verem tetején elhelyezett érték címét. • Hova mutasson az SP? • A verem tetején tárolt elem címére • A következő elem címére, ami üres még • Az előző részben azt állítottuk, hogy az SP értékét csökkenteni kell eggyel és azután tároljuk el az érték új címét. • Előnye: A verem tetejére mutat az SP ( amit ki tudunk venni belőle; q[15:0)] • Hátránya: Kettő órajel ciklus kell ennek a megvalósításához • 1 lépés: SP értékét csökkentjük • 2. lépés: érték új címének elmentése

  7. A stack32x16 module bemutatása • A második lehetőséget mellett maradjunk( az üres helyre mutasson az SP) • 1. lépésben betesszük az SP által mutatott üres címre az új értéket • 2. lépésben csökkentjük az SP-t • Előnye: Egy órajel alatt elvégezhetjük a két lépést • Hátránya: Üres memória címre mutat az SP • Dual-port RAM alkalmazása • wr_addr : beleteszünk a verembe egy értékét és annak a címét letároljuk ebben, majd csökkentjük a wr_addr és az rd_addr-t • Mindig igaz lesz: wr_addr = rd_addr+1 • rd_addr : ebben tároljuk annak az elemnek a címét, amit éppen kiolvastunk (q[15:0]), majd növeljük az rd_addr és a wr_addr-t 00000 wr_addr rd_addr 11111

  8. A stack32x16 module bemutatása stack32x16 d[15:0] dpram32x16 d[15:0] clk we clk we stack_ctrl32 asmel clr open spo[15:0] wr_addr push 0 wr2_addr a[4:0] pop rd_addr q[15:0] 1 dpo[15:0] dpra[4:0] full empty

  9. A dpram32x16 module beállítása • Elérési útvonala • ISE DesingSiute 14.3 • New project… • IP(CoreGenerator&ArchitectureWizard) • ViewbyNamefül • DistributedMemorygenerator

  10. A stack32x16 module bemutatása • Ha a we=1, akkor az órajel(clk) 01, az érték d[15:0], és a címe: a[4:0] • Kimenet: spo[15:0] ez az az érték ami a[4:0] van tárolva a címe, • dpo[15:0] pedig az az érték, aminek a címe a dpra[4:0] van. Multiplexer • wr_addr és az rd_addr: vagy az egyik vagy a másik tárolja a write címét. Ez függ: • Ha push=1  wr_addr • Ha push = 1 és pop = 1rd_addr

  11. A dpram32x16 modulebeállítása

  12. A dpram32x16 module beállítása

  13. A dpram32x16 module beállítása

  14. A push és pop műveletek

More Related