Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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 (Last In First Out) szervezésűnek is hívjuk.
3
A system stack(SS) és stack pointer(SP)fogalma
Minden mikrokontrollernek van egy rendszer verme (system stack) 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 01) Ha a pop=push=1, ekkor a d[15:0] értéket úgy tárolom el a verem tetején (01), 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 (Core Generator) 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
dpram32x16 d[15:0] clk we clk we stack_ctrl32 clr asmel open spo[15:0] wr_addr push 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 Desing Siute 14.3 New project… IP(Core Generator &Architecture Wizard) View by Name fül Distributed Memory generator
10
A stack32x16 module bemutatása
Ha a we=1, akkor az órajel(clk) 01, 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 = 1rd_addr
11
A dpram32x16 module beá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 Operation push pop asmel we No operation
pop value from stack 1 push value on stack Write to top of stack
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.