DSP architektúrák dsPIC30F család memória kezelése
Az adatmemória Az adatmemória 16 bites, két külön memóriazóna van kiépítve, az X és az Y memória, mindkettőnek címgeneráló egysége és adat sínrendszere van. Az adatmemória szerkezete:
Amint az ábrán látható az alsó 1Kszó memória a CPU regiszterek valamint az összes processzorkonfiguráló, perifériakezelő regiszterek(SFR). Az X memóriazóna mindig ítható és olvasható, de az Y csak olvasható, ezért memóriaíráskór mindig egy tömböt látunk, a kettő egyesítését, mint X memória. Az Y zóna csak néhány DSP utasításnál használható, amikor két operandust kell egyidőben betölteni a memóriából. Az alsó 4Kszó memóriazóna az úgynevezett közeli memória(Near), amit direkt használnak azon utasítások, amelyek az opcodba bekodólják a 13bites memóriazónát, ahól az operandus van. A felső 16Kszó nincs fizikailag kiépítve, hanem a programmemória tűkrözhető ide, ezzel direkt hozzáférést biztosíthatunk a programmemóriában tárolt adatokhoz.
Memóriacímzés DSP illetve MCU utasítások esetében:
Tehát az összes MCU művelet és azon DSP műveletek, amelyek nem két operandust olvasnak egy ciklus alatt, egy memóriazónát használnak, a többi DSP művelet indirekt címzést használ az Y olvasására, a W10 és W11-en keresztül, valamint az X olvasására a W8 és W9-en keresztül. A DSP utasítások megkívánnak más, speciális címzési lehetőségeket, a dsPIC család a következőket támogatja: − Moduló címzés, vagyis körlista kezelés − Bit Reverse, ami annyit jelent, hogy egy adott címnek a bitjeinek a tűkörképe lesz az új cím. Moduló címzés – nagyon hasznos, például digitális szűrők programozásánál. A lényege az, hogy hardware uton van figyelve a lista eleje illetve a vége és automatikusan átugrik az elejére vagy a végére a címgeneráló egység. Négy regiszter van a lista kezdetének illetve a végének a megjelölésére: − XMODSRT: X AGU Modulo Start Address Register − XMODEND: X AGU Modulo End Address Register − YMODSRT: Y AGU Modulo Start Address Register − YMODEND: Y AGU Modulo End Address Register A MODCON regiszterben programozzuk a címmutatót, ami bármelyik W regiszter lehet, kivéve a W15-öt.
Példa:
A fenti példán a kezdőcím 0x1100, a lista vége 0x1163 és a W1 regiszter a listamutató. A DO utasítással feltöltjük a listát a W0 tartalmával. Bit Reverse címzés, megfordítja a bitek sorrendjét:
Nagyon hasznos például az FFT algoritmus megírásánál. A címzés egy adott hosszúságú memóriazónát érint, amit az XBREV regiszter ad meg. A címgenerálás egyszerű, mert az XBREV-et összeadja az eredeti címmel, a tulcsordulást pedig jobbra viszi át, nem balra, és ezáltal a fordított címet kapjuk. A használt regiszterek: − MODCON: Modulo Addressing Control Register − XMODSRT: X AGU Modulo Start Address Register − XMODEND: X AGU Modulo End Address Register − YMODSRT: Y AGU Modulo Start Address Register
− YMODEND: Y AGU Modulo End Address Register − XBREV: X AGU Bit-Reverse Addressing Control Register A címgenerálás:
Az adatmemória címe:
A fent bemutatott címzési módok mind aDSP utasítások gyors elvégzését segítik.
A programmemória A programmemória 24 bit száeleségű, 4Mbyte terjedelmű memória. Három hozzáférési lehetőség van: − Direkt, a PC-n keresztül − A TBLRD és TBLWT utasításokon keresztül − Átvetitve az adatmemóriába, 32kbyte terjedelmben
Tehát az első 256 cím a megszakítások, valamint a resetvektor, következik az efektív programrész tárolás valamint 4kByte EEPROM. A felső 1Mbyte konfigurációs regisztereknek van lefoglalva. A direkt memóriacímzés a PC-n keresztül történik, a PC mindig páros, egy cím 4 bytra mutat, de csak 3 byte van kiépítve. Így kapjuk a 4Mbyte programmemóriát, a 16Mbyte címlehetőségből.
A másik hozzáférési lehetőség az adatolvasás a programmemóriából, éspedig a TBLRD, TBLWT utasításokkal. A címgenerálás a TBLPAG regiszter és egy W regiszter tartalmából tevődik össze.
A kiolvasott adat csak 24 bites, ezért mindig olvasunk 8 bit 0-t, ha a felső zónát olvassuk:
Ez az egydüli címzés mód, ahol mind a 24 bit adatot ki tudjuk olvasni, illetve írni a programmemóriából. A harmadik hozzáférési lehetőség a programmemóra átvetítése az adatmemória felső 32kbyte részébe. Ezt a PSV(Program Space Visibility) bit beállításával lehet elérni, a CORCON regiszterben. Ezáltal a program memória alsó 16 bitje lesz látható az adatmemóriában. A címgenerálás a PSVPAG regiszter és bármely W regiszter összevonásával történik.
Programmemória tűkrözés az adatmemóriában.