第三章ADSP的指令系統(tǒng)_第1頁
第三章ADSP的指令系統(tǒng)_第2頁
第三章ADSP的指令系統(tǒng)_第3頁
第三章ADSP的指令系統(tǒng)_第4頁
第三章ADSP的指令系統(tǒng)_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ADSP技術(shù)與應(yīng)用

——浮點(diǎn)SHARC系列

第3章SHARC系列的指令系統(tǒng)

3.1尋址方式3.2SHARC系列的指令系統(tǒng)3.3計(jì)算類操作3.4SHARC系列匯編語言編程舉例3.1尋址方式

SHARC系列指令的特點(diǎn)和尋址方式

指令特點(diǎn)SHARC系列具有完備的、高效的、靈活的、高效的指令系統(tǒng),它采用48位超長指令字(VLIW),所有的指令都是單周期的,并且可以在一條指令里并行完成多種操作。尋址方式立即尋址直接尋址間接尋址方式循環(huán)尋址位反轉(zhuǎn)尋址立即尋址方式

立即尋址方式的操作數(shù)源操作數(shù)為立即數(shù)目的操作數(shù)只能是寄存器R0~R15(F0~F15)。立即數(shù)可以是2、10進(jìn)制或者16進(jìn)制數(shù)例如:R0=123;//將10進(jìn)制整數(shù)123賦給R0R1=0X2FF;//將16進(jìn)制整數(shù)2FF賦給R1F2=125.8;//將10進(jìn)制數(shù)125.8賦給R0R2=B#0100;//將二進(jìn)制數(shù)0100賦給R2直接尋址方式

使用絕對地址:R0=DM(0X30000);//DM區(qū)地址0X30000的數(shù)據(jù)賦給R0R1=DM(varname);//將DM區(qū)的變量值Ifnejumplabel1;//跳轉(zhuǎn)到地址標(biāo)號label1?采用PC相對地址:DO(PC,length)UNTILLCE;//其中l(wèi)ength是個(gè)變量,循環(huán)執(zhí)行PC+length程序段間接尋址方式-預(yù)調(diào)整方式

指令形式:DM(Mx,Ix)PM(Mx,Ix)方式1:使用M寄存器存儲單元地址=I+M,不更新I寄存器例:R1=PM(m10,i15);R8=DM(m13,i11);方式2:使用立即數(shù)存儲單元地址=I+立即數(shù),不更新I寄存器例:R1=PM(0x11,i15);R8=DM(127,i11);

存儲單元的地址等于M寄存器與I寄存器內(nèi)容之和,但是指令執(zhí)行后I寄存器內(nèi)容保持不變。間接尋址方式-后修改方式

指令形式:DM(Ix,Mx)PM(Ix,Mx)方式1:使用M寄存器存儲單元地址=I,用I+M更新I寄存器例:F5=PM(i9,m12);DM(i0,m3)=R3;方式2:使用立即數(shù)存儲單元地址=I用I+立即數(shù)更新I寄存器例:F15=DM(i0,6);R1=PM(i15,0x11);

存儲單元的地址等于I寄存器的當(dāng)前值,指令執(zhí)行后I寄存器被更新為M寄存器與I寄存器內(nèi)容之和。間接尋址方式-修改地址

指令形式:MODIFY(Ix,Mx)方式1:使用M寄存器僅用I+M更新I寄存器例:MODIFY(i15,m10);MODIFY(i5,m6);方式2:使用立即數(shù)僅用I+立即數(shù)更新I寄存器例:MODIFY(i4,304);MODIFY(i15,0x56);僅更新Ix間接尋址方式說明

Mx寄存器和Ix寄存器分成兩組DAG1和DAG2DAG1使用M0~M7和I0~I7,尋址空間在DM區(qū)DAG2使用M8~M15和I8~I15,尋址空間在PM區(qū)兩組Mx和Ix寄存器不能交叉使用DM區(qū)使用DAG1組的M0~M7和I0~I7寄存器PM區(qū)使用DAG2組的M8~M15和I8~I15寄存器否則認(rèn)為非法指令。間接尋址方式中可以是一個(gè)立即數(shù)如DM(I0,4)=R1是合法指令。循環(huán)尋址方式

寄存器Lx:緩沖區(qū)長度;寄存器Bx和Ix:緩沖區(qū)起始地址;緩沖區(qū)的邊界判斷和地址的計(jì)算方法如下:如果Mx>0時(shí),且Ix+Mx<Bx+Lx,則Ix=Ix+Mx;如果Mx>0時(shí),且Ix+Mx≥Bx+Lx,則Ix=Ix+Mx–Lx;如果Mx<0時(shí),且Ix+Mx≥Bx,則Ix=Ix+Mx;如果Mx<0時(shí),且Ix+Mx<Bx,則Ix=Ix+Mx-Lx。循環(huán)尋址方式說明

循環(huán)尋址方式注意事項(xiàng)

預(yù)調(diào)整地址方式不支持循環(huán)尋址方式。在向Bx寄存器寫入起始地址的同時(shí),對應(yīng)的Ix寄存器 也會(huì)自動(dòng)賦予相同的值。Bx、Lx、Ix三個(gè)寄存器的序號必須一致,而Mx寄存器 可以在同一個(gè)DAG組中任意選取。兩個(gè)DAG中都可以設(shè)置循環(huán)緩存區(qū)Mx寄存器可以正也可以負(fù)對Lx和Bx寄存器清零,對應(yīng)的Ix寄存器自動(dòng)恢復(fù)線性 尋址方式。位反轉(zhuǎn)尋址

SHARC系列的位反轉(zhuǎn)尋址方式,通過兩種方法實(shí)現(xiàn):位反轉(zhuǎn)模式?DAG1的I0提供的32位地址經(jīng)過位反轉(zhuǎn)送到DM總線?I0的值不變?使MODE1寄存器的位BR0=1?DAG2的I8提供的24位地址經(jīng)過位反轉(zhuǎn)送到PM總線?MODE1寄存器的位BR8=1位反轉(zhuǎn)指令BITREVBITREV得到I0~I(xiàn)15的位反轉(zhuǎn)地址,但不送到總線位反轉(zhuǎn)的來歷-FFT

FFT計(jì)算過程:輸入-蝶形運(yùn)算-整序(位反轉(zhuǎn))-輸出位反轉(zhuǎn)尋址的概念

位反轉(zhuǎn)尋址主要針對FFT算法設(shè)計(jì),F(xiàn)FT計(jì)算過程中輸入數(shù)據(jù)的排列次序被按照一定規(guī)律打亂,稱為逆序排列。用m=log2N位二進(jìn)制數(shù)可以表示N個(gè)輸入數(shù)據(jù)的下標(biāo),將二進(jìn)制下標(biāo)的高低位交換,就得到逆序序列。如N=8時(shí),A3的下標(biāo)是011,逆序后變成110,即A6,數(shù)組A0,A1,A2,A3,A4,A5,A6,A7逆序后變成A0,A4,A2,A6,A1,A5,A3,A7。位反轉(zhuǎn)尋址可以自動(dòng)的按照逆序的規(guī)律計(jì)算地址,節(jié)省了逆序操作的軟件開銷。SHARC系列提供了位反轉(zhuǎn)尋址方式,單MODE1寄存器的BR0位置為1時(shí),I0寄存器就按照位反轉(zhuǎn)方式尋址。在位反轉(zhuǎn)方式,I0的32位地址經(jīng)過位反轉(zhuǎn)處理后才送到DM地址總線上??梢岳梦环崔D(zhuǎn)指令BITREV計(jì)算I0的起始地址和步長。從BUF1位反轉(zhuǎn)傳送到BUF2的例子

BITSETMODE1BR0;//設(shè)置位反轉(zhuǎn)模式I1=BUF2;//I1指向目的緩沖區(qū)首址I0=BUF1;//I0指向源緩沖區(qū)首址BITREV(I0,0);//利用位反轉(zhuǎn)指令得到I0的初值I2=LENGTH/2;BITREV(I2,0);M0=I2;//利用位反轉(zhuǎn)指令設(shè)置步長LCNTR=LENGTH,DOLABLEUNTILLCER0=DM(I0,M0);//從BUF1中逆序取數(shù)LABLE:DM(I1,1)=R0;//順序放到BUF2中3.2SHARC系列的指令系統(tǒng)

SHARC系列指令的概述

SHARC系列提供了完備的指令集,包括4類指令:計(jì)算指令類指令流程控制類指令數(shù)據(jù)傳送類指令其它指令類指令大部分指令都是并行指令,一條指令中同時(shí)可以完成多種操作:條件判斷數(shù)學(xué)計(jì)算數(shù)據(jù)傳送地址修改(1)計(jì)算和數(shù)據(jù)傳送

指令形式如指令:IFEQR0=R1+R2,DM(I1,M0)=R1;

完成相等判斷,根據(jù)判斷結(jié)果決定是否執(zhí)行后面的相加和數(shù)據(jù)傳送操作,并且按規(guī)定修改I1寄存器。(2)程序流控制

指令形式如指令:IFNEJUMPLABEL(DB),R0=R1+R5;

完成相等判斷,根據(jù)判斷結(jié)果決定是否執(zhí)行后面的跳轉(zhuǎn)和數(shù)據(jù)傳送操作。指令中的偽指令后綴,表示為延遲跳轉(zhuǎn)方式。(3)數(shù)據(jù)傳送

數(shù)據(jù)在寄存器和存儲器間傳傳送,或直接對寄存器、存儲器置常數(shù)(稱為立即數(shù))。指令形式:如指令DM(0X12345)=R0;完成將寄存器內(nèi)容傳送到指定存儲單元。(4)其它類

位修改/位測試/地址修改堆棧操作/等待中斷等。指令形式:如指令:BITSETMODE1BR0;//設(shè)置位反轉(zhuǎn)尋址模式MODIFY(I0,0X1234);//修改I0寄存器NOP;//空操作SHARC指令集簡介

下面將每組各類指令列在表3-1中,條件(condition)列在表3-2中,計(jì)算(compute)作為一大類操作,將在后文介紹。表3-1中豎線中給出了指令的可選項(xiàng)列表,實(shí)際指令是從每對豎線中的多個(gè)參數(shù)選一個(gè),指令中大寫符號表示了實(shí)際指令的助記符,而小寫標(biāo)識符代表一類對象,其意義見表3-2。表中的斜體字表示指令中的可選操作項(xiàng)。表3-1指令集——計(jì)算和數(shù)據(jù)傳送(1)

表3-1指令集——計(jì)算和數(shù)據(jù)傳送(2)

表3-1指令集——程序流控制(1)

表3-1指令集——程序流控制(2)

表3-1指令集——數(shù)據(jù)傳送

表3-1指令集——其它指令

指令中的循環(huán)終止碼

指令中的條件和循環(huán)終止碼列于表3-3中,它們來自于:

狀態(tài)寄存器ASTAT以及MODE1、Flag輸入、循環(huán)計(jì)數(shù)器的標(biāo)志位。表3-3指令中的條件和循環(huán)終止碼3.3計(jì)算類操作

計(jì)算類操作概述

計(jì)算類操作大致分為ALU的加/減運(yùn)算移位器操作乘法器運(yùn)算多運(yùn)算操作,即雙加/減并行ALU/乘法器運(yùn)算等計(jì)算類運(yùn)算的操作數(shù)SHARC系列的所有運(yùn)算都必須在寄存器R0~R15及MR中進(jìn)行操作數(shù)只能是R0~R15寄存器或立即數(shù),而不能是存儲器中的數(shù)值浮點(diǎn)運(yùn)算和定點(diǎn)運(yùn)算都用同樣的寄存器R0~R15,但在浮點(diǎn)表達(dá)式中寫為F0~F15。計(jì)算類操作和數(shù)據(jù)傳送操作的表達(dá)式都采用代數(shù)符號

表示形式,直觀易記,簡潔緊湊。3.3.1ALU的運(yùn)算指令

SHARC系列DSP的運(yùn)算控制單元包括:?ALU?寄存器堆:

R0~R15(定點(diǎn))或F0~F15(浮點(diǎn))?移位器?乘法器?乘積寄存器:

MR=MR2:MR1:MR0ALU—算術(shù)邏輯單元

ALU的所有運(yùn)算都必須在寄存器堆中進(jìn)行定點(diǎn)運(yùn)算時(shí)R0~R15為32位,浮點(diǎn)運(yùn)算時(shí)為40位ALU的運(yùn)算指令包括:32/40位浮點(diǎn)數(shù)加、減、加/減、平均;32位定點(diǎn)數(shù)加、減、加/減、平均;定點(diǎn)帶進(jìn)位加法、帶借位減法;浮點(diǎn)和定點(diǎn)數(shù)轉(zhuǎn)換;邏輯操作:AND、OR、XOR、NOT;倒數(shù)和平方根倒數(shù);絕對值、最大值、最小值、比較;位段截取和放置。3.3.2移位器運(yùn)算

移位器的操作數(shù)必須是定點(diǎn)數(shù),對32位定點(diǎn)數(shù)可以進(jìn)行以下操作:算術(shù)和邏輯移位循環(huán)移位位操作(置位、清位、位反轉(zhuǎn)、位測試)字段操作,如位段提取和分解等移位操作會(huì)影響寄存器ASTAT中的3個(gè)狀態(tài)標(biāo)志位SV、SZ、SS。用戶可以讀取這幾個(gè)標(biāo)志位得到它們的狀態(tài)。位操作與邏輯或組合

表3-6說明 在表3-6中,Rn、Rx、Ry可以是R0~15寄存器中的任何一個(gè),F(xiàn)n、Fx、Fy可以是F0~15寄存器中的任何一個(gè)。在FDEP、FEXT指令中的Ry的低12位(不算40位寄存器的最低8位)被當(dāng)作<bit6>:<len6>。 定點(diǎn)寄存器始終被當(dāng)成僅高32位存在,低8位既不參與也不考慮到FDEP、FEXT指令的位標(biāo)記中,40位寄存器的位8被當(dāng)成位0。 邏輯移位(LShift),Rn的低8bit不參與,右移時(shí)高位填0,低位送進(jìn)位位,左移時(shí),高位送進(jìn)位位,低位寫0; 算術(shù)移位(AShift),Rn的低8bit不參與,右移時(shí)高位符號擴(kuò)展,低位送進(jìn)位位,左移時(shí),高位送進(jìn)位位,低位寫0; 移位量為正代表左移,為負(fù)代表右移;shf8指寄存器的bit15~8位段3.3.3乘法器操作

乘法器可以完成定點(diǎn)、浮點(diǎn)乘法,定點(diǎn)乘/累加等操作,它的操作與乘法器和乘積寄存器有關(guān)。乘積寄存器 乘積寄存器MR用來存放定點(diǎn)數(shù)的積,其長度是80位。80位的定點(diǎn)乘積寄存器從高到低分成3個(gè)寄存器:MR2(高16bit)MR1(中32bit)MR0(低32bit)乘法器特征

32或者40-bit浮點(diǎn)乘法器40-bit結(jié)果,可以截?cái)酁?2bit乘法器與ALU聯(lián)合實(shí)現(xiàn)單周期指令MAC32-bit定點(diǎn)乘法器 輸入數(shù)據(jù)可以為整數(shù)或者小數(shù)64-bit乘積80-bit累加支持單指周期令MAC定點(diǎn)數(shù)乘積的存放(1)

定點(diǎn)數(shù)乘積的存放(2)

整數(shù):如果乘法器輸入為整型定點(diǎn)數(shù),結(jié)果放在MR0(MR寄存器的低32bit)中。小數(shù):兩個(gè)輸入操作數(shù)都是小數(shù)型定點(diǎn)有符號數(shù),乘法器自動(dòng)將結(jié)果左移1位以去掉多余的符號位,相乘結(jié)果放在MR1(MR寄存器的中間32位)中。傳送到寄存器:當(dāng)從MR2讀取32bit數(shù)據(jù)時(shí),高16bit符號擴(kuò)展。當(dāng)從MR2、MR1、MR0向40bit寄存器送數(shù)時(shí),低8bit填0。傳送到MR:40bit寄存器的高32bit被寫入。如果是寫入到MR1,MR2作符號擴(kuò)展,但寫入到MR0時(shí),不進(jìn)行符號擴(kuò)展。定點(diǎn)數(shù)乘積的取舍處理

定點(diǎn)數(shù)取舍是針對小數(shù)類型;取舍方法有兩種:加指令后綴SSF或者SSFR使用取舍指令RND可以按照最接近方式取舍;可以按照接近0方式取舍;定點(diǎn)數(shù)乘積的飽和處理

設(shè)置飽和指令(SAT)后,當(dāng)溢出(MV=1)時(shí),乘積MR取最大值;定點(diǎn)數(shù)的飽和值可以返回到MR或者Rx寄存器;取舍和飽和處理指令

浮點(diǎn)數(shù)的乘、乘累加

浮點(diǎn)乘的乘數(shù)、被乘數(shù)、積是32位或者40位,在MODE1寄存器的RND32位指定;浮點(diǎn)數(shù)的積可以按照以下方式處理:最接近的值(IEEE)接近0或者截?cái)啵∕ODE1/TRUNC)浮點(diǎn)乘的結(jié)果總是在Fx寄存器中,如:

F12=F3*F7;浮點(diǎn)MAC采用算術(shù)流水方式實(shí)現(xiàn),如:F12=F3*F7;F12=F3*F7,F8=F8+F12;(先讀后寫)

F8=F8+F12;3.3.4并行和多運(yùn)算指令

SHARC系列的指令具有同時(shí)進(jìn)行乘法、加法、減法等多個(gè)運(yùn)算的功能,其中乘/加/減三運(yùn)算并行使ADSP2106X完成FFT運(yùn)算的速度大大提高。

多運(yùn)算操作的基礎(chǔ):乘法器和ALU單元并行工作,其中ALU單元可以同時(shí)求出兩個(gè)數(shù)的和、差。定點(diǎn)乘法器也具有乘法、累加并行工作的能力。并行指令的基本形式

條件判斷和數(shù)據(jù)傳送Ifcondition數(shù)據(jù)傳送如:Ifeqdm(i0,m1)=astat,r7=pm(i8,m8);條件判斷和計(jì)算加數(shù)據(jù)傳送IfconditionCOMPUTER,數(shù)據(jù)傳送如:Ifeqr6=r3-r11,dm(i0,m1)=astat;條件判斷和分支Ifcondition分支如:Ifeqjumpaddr1;雙加減(同時(shí)計(jì)算和、差)?Ra=Rx+Ry,Rs=Rx-Ry?Fa=Fx+Fy,F(xiàn)s=Fx-Fy定點(diǎn)乘/累加及加/減/求平均MRF=MRF+R3~0*R7~4(SSF),Ra=R11~8+R15~12Rm=MRF+R3~0*R7~4(SSFR),Ra=R11~8-R15~12MRF=MRF-R3~0*R7~4(SSF),Ra=(R11~8+R15~12)/2Rm=MRF-R3~0*R7~4(SSF)浮點(diǎn)乘和ALU運(yùn)算Fm=F3~0*F7~4,F(xiàn)a=F11~8+F15~12Fm=F3~0*F7~4,F(xiàn)a=F11~8-F15~12Fm=F3~0*F7~4,F(xiàn)a=FLOATR11~8byR15~12Fm=F3~0*F7~4,Ra=FIXF11~8byR15~12Fm=F3~0*F7~4,F(xiàn)a=(F11~8+F15~12)/2Fm=F3~0*F7~4,F(xiàn)a=ABSF11~8Fm=F3~0*F7~4,F(xiàn)a=MAX(F11~8,F(xiàn)15~12)Fm=F3~0*F7~4,Ra=MIN(F11~8,F(xiàn)15~12)乘和雙加減Rm=R3~0*R7~4(SSFR),Ra=R11~8+R15~12,Rs=R11~8-R15~12Fm=F3~0*R7~4,F(xiàn)a=F11~8+F15~12,F(xiàn)s=F11~8-F15~12多運(yùn)算指令的輸入寄存器

指令的并行操作準(zhǔn)則

大量的DSP指令是并行形式,指令的并行操作 遵循先讀后寫準(zhǔn)則:如果并行指令中某個(gè)寄存器既是源操作數(shù),又是目的操作數(shù),DSP執(zhí)行時(shí)總是將寄存器的舊值作源操作數(shù)。在指令執(zhí)行后,寄存器才作為目的操作數(shù),其內(nèi)容才更新。當(dāng)滿足并行條件時(shí),這種指令仍可以在單周期內(nèi)完成。如果某個(gè)存儲器單元既是源操作數(shù),又是目的操作數(shù),此指令不能在單周期內(nèi)完成。DSP執(zhí)行時(shí)總是先將存儲器的舊值讀人寄存器,然后才將新值寫入此存儲器。在一條并行指令內(nèi)的幾個(gè)操作的書寫順序是DSP的匯編語法規(guī)定的,并不是這幾個(gè)操作的執(zhí)行順序。3.3.5其它類指令

這類指令不像前3組指令那樣規(guī)則,包括:位操作指令修改DAG寄存器堆棧操作其它操作?空操作?待機(jī)?其它位操作指令

指令形式:BITSETsreg<data32>對系統(tǒng)寄存器sreg置位BITCLRsreg<data32>對系統(tǒng)寄存器sreg清0BITTGLsreg<data32>對系統(tǒng)寄存器sreg取反BITTSTsreg<data32>對系統(tǒng)寄存器sreg測試BITXORsreg<data32>對系統(tǒng)寄存器sreg異或按照<data32>中置位的位(非0位)對系統(tǒng)寄存器sreg進(jìn)行相應(yīng)位的置位、清0、取反、測試、異或。同時(shí)還有如下效果:當(dāng)<data32>中非0位所對應(yīng)的sreg中各位均置為1時(shí),寄存器ASTAT中的BTF=l;當(dāng)<data32>中非0位與sreg對應(yīng)位置的各個(gè)位相同時(shí),寄存器ASTAT中的BTF=1.修改DAG寄存器

指令形式:MODIFY(la,<data32>)修改DAG1的I0~I(xiàn)7寄存器MODIFY(Ic,<data24>)修改DAG2的I8~I(xiàn)15寄存器BITREV(I0,<data32>)完成位反序方式的地址寄存器修改BITREV(I8,<data24>)完成位反序方式的地址寄存器修改堆棧操作

指令形式:PUSHLOOP,PUSHSTS,PUSHPCSTK,F(xiàn)LUSHCACHE;POPLOOP,POPSTS,POPPCSTK,F(xiàn)LUSHCACHE;對下述對象作壓?;虺鰲2僮鳎貉h(huán)地址和循環(huán)計(jì)數(shù)器(LOOP);狀態(tài)寄存器(STS);PC堆棧(PCSTK);以及刷新(清除)指令Cache這4個(gè)操作可以在一個(gè)周期完成其它指令

NOP

空操作,僅程序地址增1。IDLE DSP進(jìn)入低功耗等候狀態(tài),程序地址不變,直到某個(gè)中斷出現(xiàn)才執(zhí)行中斷服務(wù)程序和后續(xù)指令。IDLE16

僅適用于ADSP21061,類似IDLE指令,但DSP的時(shí)鐘頻率等于輸入時(shí)鐘的1/16,其功耗更低。CJUMP函數(shù)名(DB)CJUMP(PC,<reladdr24>)(DB) 僅由C編譯器產(chǎn)生,相當(dāng)于跳轉(zhuǎn)指令操作和幀指針I(yè)6、堆棧指針I(yè)7的保存操作。RFRAME

僅由C編譯器產(chǎn)生,相當(dāng)于I6、I7的恢復(fù)操作。3.4SHARC系列匯編語言編程舉例

SHARC系列DSP匯編程序的基本特點(diǎn)

DSP指令編程與C語言類似;它不區(qū)分指令的大小寫,例如寄存器R0,也可寫成r0,條件GT也可寫成gt;R0~R15與F0~F15實(shí)際上是一種寄存器當(dāng)寄存器寫成R0~R15時(shí),DSP將其當(dāng)成32位定點(diǎn)寄存器, 執(zhí)行定點(diǎn)數(shù)據(jù)格式的運(yùn)算、位操作、移位操作。當(dāng)寄存器寫成F0~F15時(shí),DSP將其當(dāng)成40位浮點(diǎn)寄存器,執(zhí)行浮點(diǎn)格式的運(yùn)算;包括在/**/或{}中的內(nèi)容是注釋;3.4.1并行指令舉例

例1.f0=dm(i0,m0),pm(i8,m8)=f0;如果i0指向DM,i8指向PM,則這條指令可以在一個(gè)周期內(nèi)完成。f0的值先寫入i8指向的PM存儲器單元,然后才將i0所指的DM存儲器單元值讀入f0。匯編語法規(guī)定對DM的操作必須寫在對PM的操作之前。例2.f0=f0+f2,f2=f0-f2,f4=dm(i1,m0),f5=pm(i9,m8);如果i1指向DM,i9指向PM,則這條指令可以在一個(gè)周期內(nèi)完成。f0、f2的值先作為源操作數(shù),求出其和、差,再將其和、差放到f0、f2中。并行指令舉例(續(xù))

例3.f13=f1*f4,f12=f8+f12,f14=f8-f12,f4=dm(i2,m0),f1=pm(i15,m9);如果i2指向DM,i15指向PM,則這條指令可以在一個(gè)周期內(nèi)完成。f1、f4的值先作為源操作數(shù),求出其乘積,放到f13中,然后f1、f4的值被相應(yīng)存儲器單元的值更新,同時(shí)f12的舊值先作為源操作數(shù),求出f8、fl2的和、差,再分別放到f12、f14中。這是DSP并行度最高的指令,在FFT變換中頻繁使用,因此FFT變換也是DSP功耗最大的運(yùn)算。實(shí)際上,在FFT變換的同時(shí),DSP內(nèi)部的多個(gè)DMA還可以用最高達(dá)40MHz的速度工作,這時(shí)候,DSP的功耗更大3.4.2條件執(zhí)行指令

SHARC系列在進(jìn)行條件判斷的同時(shí),還可以完成其它操作,下面是兩個(gè)典型的例子。例1.ifFLAG0_INfl3=f1*f4,fl2=f8+fl2,f14=f8-fl2,f4=dm(i2,m0);當(dāng)FLAG0管腳的輸入信號為高電平時(shí),執(zhí)行這些運(yùn)算和數(shù)據(jù)存取。當(dāng)FLAG0管腳的輸入信號為低電平時(shí),不執(zhí)行這些運(yùn)算和數(shù)據(jù)存取。條件執(zhí)行指令(續(xù))

例2.ifLTf12=f8+fl2,f14=f8-f12,f4=dm(i2,m0);當(dāng)ALU<0時(shí),執(zhí)行這些運(yùn)算和數(shù)據(jù)存取。當(dāng)ALU>=0時(shí),不執(zhí)行這些運(yùn)算和數(shù)據(jù)存取。

ADSP2106X的這種條件執(zhí)行指令省去了其它種類DSP進(jìn)行相應(yīng)條件判斷時(shí)的跳轉(zhuǎn)操作,指令效率高,簡明易讀,且無論條件是否滿足,上述程序的執(zhí)行時(shí)間不變。條件執(zhí)行指令(續(xù))

ADSP2106X不支持組合條件,當(dāng)需要多種條件都滿足時(shí),就得用跳轉(zhuǎn)指令。此外還有條件調(diào)用、條件跳轉(zhuǎn)等指令,條件是否滿足,含有條件調(diào)用、條件跳轉(zhuǎn)的程序執(zhí)行時(shí)間不同。例3.ifGTcallsubl(DB);…….;

當(dāng)條件滿足時(shí),才調(diào)用子程序,由于使用了遲延調(diào)用,在調(diào)用前,先執(zhí)行后續(xù)兩條指令。3.4.3循環(huán)指令

SHARC系列提供了功能靈活方便的循環(huán)指令,下面是單重循環(huán)的例程段。lcntr=16,doloop1untillce;指令1;指令2;.....指令K-3;指令K-2;指令K-l;loop1:指令K;將K條指令構(gòu)成的循環(huán)體執(zhí)行16次,注意在循環(huán)體的最后三條指令不能是調(diào)用、跳轉(zhuǎn)指令。循環(huán)指令(續(xù))

SHARC支持最多6層循環(huán),循環(huán)的次數(shù)可以是常數(shù)表達(dá)式、寄存器。下面是一個(gè)三重循環(huán),其中最內(nèi)層循環(huán)用PC相對地址作為循環(huán)體最后一條指令的地址,省去了注明循環(huán)體結(jié)束標(biāo)號,它將后續(xù)三條指令執(zhí)行

65535次:lcntr=16-4,doloop1untillce;r6=rl-r2;

lcntr=r6,doloop2untillce;

……;

lCntr=65535,do(PC,3)untillce;

……;

loop2:……;……;loop1:……;3.4.4條件循環(huán)指令

用條件來執(zhí)行循環(huán)體,循環(huán)體內(nèi)的指令應(yīng)有可能使指定條件不成立,否則,此循環(huán)一旦執(zhí)行,就成為死循環(huán)。下面是一個(gè)例子,如果SZ這個(gè)條件不滿足,就一直執(zhí)行反復(fù)后續(xù)4條指令:

do(PC,4),untilSZ; ......;3.4.5循環(huán)尋址

通過定義L寄存器和b寄存器,DSP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論