7.2.2. A TMS320C50 és TMS320C24x assembly programozására példák A TMS320C50 processzor Ez a DSP processzor az 1.3. fejezetben lett bemutatva. A TMS320C50 ##LINK: http://www.ti.com/product/tms320c50## egy 16 bites fix-pontos, módosított Harvard architektúrájú, digitális jelfeldolgozó processzor, amelyet a Texas Instruments ##LINK:www.ti.com## cég az 1990-es évek elején fejlesztett ki. A felépítése és szolgáltatásai a maga idejében és nemében ipari szabvánnyá emelték. A hardverben megvalósított újításai a mai modern DSP proceszorokban is használatosak. A processzor két évtizedes kora ellenére, ezen forradalmi újítások lényegét és assemblyben való használatát, az oktatásban kivállóan lehet demonstrálni az ezzel a processzorral szerelt DSK platformon és fejlesztőkörnyezetben (lásd 2.2 fejezet). Az utasításkészlet és a DSK részletes leírása segítséget nyújt a kódrészletek megértéséhez: (1) A teljes assembly utasításkészlet részletes leírása a TMS320C5x Users Guide.pdf található meg, ##LINK: www.ti.com/lit/ug/spru056d/spru056d.pdf## (2) A DSK fejlesztőlap leírása: TMS320C5x DSK Users Guide.pdf ##LINK: http://www.ti.com/lit/ug/spru101a/spru101a.pdf ## Az `5x és a CALU Az elődök felépítéséhez képest a TMS320C50 legjelentősebb hardveres újítása a központi aritmetikai logikai egység CALU ##Central Arithmetical Logical Unit központi aritmetikai logikai egység## (1. ábra), amely a következő elemeket tartalmazza: 16 bit x 16 bites, hardveres, párhuzamos szorzó (Multiplier), 32 bites, kettes komplemensű aritmetikai logikai egység (ALU), 32 bites akumulátor (ACC), 32 bites puffer akumulátor (ACCB), szorzat skálázó: 0, 1 vagy 4 bitet balra avagy 6 bitet képes egy órajel alatt jobbra léptetni (P-SCALER), adat előskálázó: 0-tól.. 16 bitet képes balra mozgatni (PRESCALER SFL), visszacsatolt eredmény előskálázó: 0-tól.. 16 bitet tud jobbra mozgatni (PRESCALER SFR), eredmény utóskálázó: 0-tól.. 7 bitet tud balra léptetni (POSTSCALER) Megjegyzés: az 1. ábrán a jelölés nélküli sínek és regiszterek mind 16 bitesek!
1. ábra az `5x DSP, központi aritmetikai egységének felépítése A CALU tulajdonságai: a szorzó egység 1 órajel alatt állítja elő a 32 bites szorzatot, a szorzóegység előjeles és kettes komplemensben ábrázolt számokat kezel, az ALU 1 órajel alatt állítja elő a 32 bites eredményt, minden skálázó 1 órajel alatt végzi el a teljes bitmozgatást (barrel shift),
A CALU és a MAC A valósidejű jelfeldolgozó algoritmusok szempontjából a legfontosabb mérőszám a feldolgozó egység (DSP) által egységnyi idő alatt elvégezhető műveletek száma. A jelfeldolgozó algoritmusok zömében nagyszámú szorzási és összeadási műveletből áll. Ezek a műveletek gyakran felírhatóak a következő alakban: A = B * C + D (1) Az összeadás egyszerű feladat és egy órajel alatt el tudja végezni szinte minden processzor. A kivonás visszavezethető az aritmetikai negálás és összeadás kombinációjára, ez szintén egyszerű feladatnak számít a processzorok számára. A szorzás sokkal összetettebb feladat, az általános célú processzoroknak amelyek összeadás sorozatával valósítják meg a szorzást erre több száz órajelet kell elhasználniuk. Az `5x DSP volt egyike az első proceszoroknak amely a 16x16 bites, előjeles szorzás elvégzésére hardveres szorzóegységet alkalmazott. Ez a szorzóegység a 32 bites előjeles eredményt egyetlen órajel alatt állítja elő. A hardveres szorzó és ALU egység összekapcsolásával lehetővé vált az (1) képlet által előírt műveletsor egyetlen órajel alatt való elvégzésére. Ez az utasítás a MAC (Multiply and Accumulate) mnemonikus nevet kapta az `5x asszemblyben. A CALU és a skálázók Az 1. ábrán megfigyelhető, hogy az CALU-ba (##Central Arithmetical Logical Unit központi aritmetikai logikai egység##) tartó, abban mozgó és onnan távozó adatoknak, változatos léptetésekre képes skálázókon kell áthaladniuk. Ilyen elemeket az általános célú processzorok ALU-jában (##Arithmetical Logical Unit aritmetikai logikai egység##) nem lelünk. A bitek balra léptetése esetén a bitek az eggyel nagyobb helyiértékű helyre íródnak be. A bitek jobbra léptetése esetén a bitek az eggyel kisebb helyiértékű helyre íródnak be. Általános esetben, egy adat 1 bittel való balra léptetése kettővel való szorzást, míg 1 bittel való jobbra léptetése kettővel való osztást jelent. A léptetések során kitüntetett figyelmet kap a legmagasabb helyiértékű bit MSB (##Most Significant Bit##) és a legkisebb helyiértékű bit LSB (##Least Significant Bit##). Ez alapján két féle léptetés létezik: logikai ebben az esetben (a léptetés irányától függően) az LSB vagy MSB oldalon 0 érték lép be, míg a másik oldalon levő bit elveszik, úgymond kiesik a regiszterből, aritmetikai ilyenkor az előjel megőrzése céljából, az MSB értéke visszamásolódik az MSB-be; az LSB pedig elveszik (jobbra léptetés) vagy 0-val töltődik fel (balra léptetés). Az `5x DSP skálázó egységei, az előrelátott szerepüktől függően, programozhatóan képesek logikai és aritmetikai léptetésre is. Ezek a különleges skálázó egységek az `5x DSP számára, hozzáadott processzoridő felhasználása nélkül teszik lehetővé a(z): aritmetikai skálázást ez fix pontos aritmetikai műveleteknél és előjeles számoknál jelent előnyt,
bit kiemelést előjeles szorzásnál megduplázódik az előjelbit, ezt szükséges lehet eltávolítani, megnövelt pontosságú aritmetikát szoftveres eljárások hozhatók létre a 32, 64 vagy akár több bites összeadás, kivonás és szorzás megvalósítására, túlcsordulás megelőzést jelfeldolgozás esetében ez a telítés, levágás és torzítás megakadályozását jelenti.
Példák az `5x CALU használatára Megoldások a ##7.2.2 filehez tartozo programreszek## nevű alkönyvtárban találhatók meg. 1. példa aritmetikai logikai egység## végezhető alapműveleteket 16bites előjeles egészek esetében. A bemutatásra kerülő műveletek: összeadás, kivonás, maradékos osztás valamint hardveres és léptetős szorzás. 2. példa aritmetikai logikai egység## elvégezhető, bővített aritmetikát. Ebben az esetben két 64bites szám összeadását. (forrás: (3)). W = X + Y, ahol mindhárom szám négy 16 bites adatként van tárolva a memóriában. 3. példa aritmetikai logikai egység## elvégezhető, bővített aritmetikát. Ebben az esetben két 64bites szám kivonását. (forrás: (3)). W = X - Y, ahol mindhárom szám négy 16 bites adatként van tárolva a memóriában. 4. példa aritmetikai logikai egység## elvégezhető, bővített aritmetikát. Ebben az esetben két 32bites előjeles szám szorzását. (forrás: (3)). W = X + Y, ahol a szorzandók 32 bitesek, így két 16 bites adatként vannak tárolva, míg a szorzat 64 bites, így négy 16 bites adatként van tárolva a memóriában. Az eredményt több művelet egymásutáni elvégzése (2. ábra) útján kapjuk. Ez a szorzási algoritmus egy előjeltelen 16x16 bites szorzást, három előjeles 16x16 bites szorzást és öt 32+ bites összeadást foglal magában. Az összeadások zöme a szorzással egyidőben történnek a CALU-ban, ami az APAC és MPYA assembly mnemonikus utasítások használatával válik lehetségessé.
5. példa 2. ábra két előjeles 32 bites szám szorzásának menete A 16 bites számok osztásának menete megtekinthető a (3) irodalom 2.8.4. fejezetében. 6. példa Összeadás, kivonás és szorzás műveletek q15 alakú előjeles valós számokkal. Az `5x DSP processzor egész számokkal való műveletekre van előrelátva, de a gyakorlatban szükség van a valós számokkal való munkára. Ennek elősegítésére, a processzorhoz kapott fordító- és fejlesztő programok támogatják a fixpontos valós számokkal való munkát. Az adatmemóriában deklarálva lett három-három pozitív és negatív valós szám. Az olvashatóság kedvéért váltakozva színezett programrészletek a következőket mutatják be: A1 egy nagy pozitív és egy kis negatív valós szám összeadása, A2 egy kis pozitív és egy nagy negatív valós szám összeadása, S1 egy negatív és egy pozitív valós szám különbsége, S2 két negatív valós szám különbsége, M1 két pozitív valós szám szorzása, M2 egy pozitív és egy negatív valós szám szorzása.
Amint látható a qxx alakban ábrázolt előjeles valós számokkal való összeadás és kivonás esetén nincs szükség semmilyen külön előkészületre vagy utólagos munkálatokra. A CALU ##Central Arithmetical Logical Unit központi aritmetikai logikai egység## azonosan kezeli ezeket és az előjeles számokat. A szorzás esetében (M1 és M2 kódrészlet) viszont látható, hogy a fixpontos számok szorzására jellemző előjelbit kétszereződés lép fel, úgy pozitív mint negatív szorzat esetében is. Az előjel kétszereződést egy aritmetikai balra léptetéssel lehet elhárítani, amit az utóskálázó végez el. Erre a két kódrészletnél a mnemonikus kód után írt,1 operandus ad utasítást a skálázónak.