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

14
A VEREM MŰKÖDÉSE FPGA-N Készítette: Labancz Anita

Upload: hashim

Post on 21-Mar-2016

52 views

Category:

Documents


2 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

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

A VEREM MŰKÖDÉSE FPGA-N

Készítette: Labancz Anita

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

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.

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

A system stack(SS) és stack pointer(SP)fogalma

SYSTEM STACK• 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.

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

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.

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

A stack32x16 module bemutatása

stack32x16

d[15:0]

clr

push

pop

clk

q[15:0]

full

empty

• 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

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

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

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

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

11111

wr_addr

rd_addr

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

A stack32x16 module bemutatása

stack32x16

dpram32x16

stack_ctrl32

d[15:0] d[15:0]

clrclk

push

pop

clkwe we

0

1

wr_addr

rd_addr

wr2_addra[4:0]

asmel

dpra[4:0]fullempty

dpo[15:0] q[15:0]

spo[15:0] open

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

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

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

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

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

A dpram32x16 module beállítása

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

A dpram32x16 module beállítása

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

A dpram32x16 module beállítása

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

A push és pop műveletekOperation push pop asmel we

No operation 0 0 0 0

pop value from stack 0 1 0 0

push value on stack 1 0 0 1

Write to top of stack 1 1 1 1