《DSP技術(shù)及應(yīng)用》課件第4章_第1頁(yè)
《DSP技術(shù)及應(yīng)用》課件第4章_第2頁(yè)
《DSP技術(shù)及應(yīng)用》課件第4章_第3頁(yè)
《DSP技術(shù)及應(yīng)用》課件第4章_第4頁(yè)
《DSP技術(shù)及應(yīng)用》課件第4章_第5頁(yè)
已閱讀5頁(yè),還剩95頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章尋址方式與流水線4.1數(shù)據(jù)尋址方式4.2程序?qū)ぶ贩绞?.3指令流水線4.4匯編程序流程控制

4.1數(shù)據(jù)尋址方式

C54x提供了7種基本數(shù)據(jù)尋址方式。

(1)立即數(shù)尋址:指令中包含了一個(gè)固定的數(shù),主要用于初始化。

(2)絕對(duì)尋址:利用固定的16位地址尋址存儲(chǔ)單元。

(3)累加器尋址:把累加器的內(nèi)容作為地址去訪問(wèn)程序存儲(chǔ)器單元。

(4)直接尋址:利用數(shù)據(jù)頁(yè)指針(DP)或堆棧指針(SP)尋址,數(shù)據(jù)存儲(chǔ)器地址由基地址和指令中的7位偏移地址決定。(5)間接尋址:將輔助寄存器的內(nèi)容作為地址訪問(wèn)數(shù)據(jù)存儲(chǔ)器。

(6)存儲(chǔ)器映射寄存器尋址:用于快速尋址映射寄存器。(7)堆棧尋址:將數(shù)據(jù)壓入或彈出系統(tǒng)堆棧。4.1.1立即數(shù)尋址

立即數(shù)有兩種類型:短立即數(shù)(k)和長(zhǎng)立即數(shù)(lk)。短立即數(shù)長(zhǎng)度為3、5、8或9位,可以放在一個(gè)字長(zhǎng)的指令中;而長(zhǎng)立即數(shù)為16位,放在兩個(gè)字長(zhǎng)的指令中。下面以RPT指令來(lái)說(shuō)明一個(gè)立即數(shù)是如何放置在指令代碼中的。若立即數(shù)為8位,則RPT為單字長(zhǎng)指令,此時(shí)編譯后的機(jī)器操作碼放在指令的高8位(15~8位),立即數(shù)放在指令的低8位(7~0位),如圖4.1(a)所示。若立即數(shù)為16位,則RPT為雙字長(zhǎng)指令,此時(shí)操作碼放在低位字中,立即數(shù)放在高位字中,如圖4.1(b)所示。圖4.1帶立即數(shù)的RPT指令機(jī)器執(zhí)行碼注意:立即數(shù)需在數(shù)值或符號(hào)前面加一個(gè)“#”號(hào),否則會(huì)認(rèn)為是一個(gè)地址。例如要將數(shù)值80H裝入累加器A中,指令應(yīng)該表示為

LD#80HA

但若表示為

LD80H,A

則指令變成了將數(shù)據(jù)存儲(chǔ)器偏移地址為80H單元的數(shù)據(jù)裝入累加器A中,具體訪問(wèn)哪個(gè)單元需要根據(jù)ST1的編譯模式位CPL而定。4.1.2絕對(duì)尋址

C54x絕對(duì)地址尋址有以下4種類型。

(1)數(shù)據(jù)存儲(chǔ)器地址(dmad)尋址,主要指令有:

MVDKSmem,dmad;(Smem)→dmad

MVKDdmad,Smem;(dmad)→Smem

MVDMdmad,MMR;(dmad)→MMR

MVMDMMR,dmad;(MMR)→dmad

dmad尋址的共同特點(diǎn)是指令中的dmad是用常數(shù)或符號(hào)表示的數(shù)據(jù)空間絕對(duì)地址。例如,要將AR3指向的數(shù)據(jù)存儲(chǔ)器單元的內(nèi)容復(fù)制到數(shù)據(jù)空間地址為SAMPLE的單元中去,可以使用下面的語(yǔ)句:

MVDK*AR3,SAMPLE

其中,SAMPLE是數(shù)據(jù)存儲(chǔ)器的絕對(duì)地址。若SAMPLE表示的數(shù)據(jù)地址為1000H,則上面的語(yǔ)句還可以表示為

MVDK*AR3,1000H

(2)程序存儲(chǔ)器地址(pmad)尋址,主要指令有:

pmad,Smem;Smem=pmad

MVDPSmem,pmad;pmad=Smem

MACPSmem,pmad,src;src=src+Smem*pmad,T=Smem

MACD[DW]Smem,pmad,src;src=src+Smem*pmad,T=Smem,(Smem+1)=Smem

FIRSXmem,Ymem,pmad;B=B+A*pmad,A=(Xmem+Ymem)<<16

pmad尋址的共同特點(diǎn)是指令中的pmad是用常數(shù)或符號(hào)表示的程序空間絕對(duì)地址。例如,要將AR7指向的數(shù)據(jù)存儲(chǔ)器單元的內(nèi)容復(fù)制到程序空間地址為TABLE的單元中去,可以使用下面的語(yǔ)句:

MVDP*AR7,TABLE

其中,TABLE表示程序存儲(chǔ)器地址。

(3)端口地址(PA)尋址,主要指令有:

PORTRPA,Smem;Smem=PA

PORTWSmem,PA;PA=Smem

PA尋址時(shí),指令中的PA是用常數(shù)或符號(hào)來(lái)表示的端口地址。例如,要將數(shù)據(jù)存儲(chǔ)器200H單元的內(nèi)容復(fù)制到端口地址為FIFO的I/O口,可以表示為

PORTW200H,FIFO

其中,FIFO表示端口地址,同樣FIFO也可以用常數(shù)表示的端口地址替代。

(4)*(lk)絕對(duì)尋址。

它是用常數(shù)或符號(hào)lk來(lái)表示的數(shù)據(jù)空間地址。例如,要將累加器A的低16位放入數(shù)據(jù)存儲(chǔ)器地址為BUFFER的單元中,可以表示為

STLA,*(BUFFER)*(lk)尋址無(wú)須改變DP或初始化ARx就能夠訪問(wèn)數(shù)據(jù)空間的任何單元,但這種尋址方式會(huì)使指令的長(zhǎng)度增加1個(gè)字,使一個(gè)原來(lái)單字長(zhǎng)指令擴(kuò)展為雙字長(zhǎng)指令或使一個(gè)雙字長(zhǎng)指令擴(kuò)展成三字長(zhǎng)指令。注意:*(lk)絕對(duì)尋址的指令不能與單重復(fù)指令RPT和RPTZ一起使用。4.1.3累加器尋址

累加器尋址是將累加器的內(nèi)容作為一個(gè)程序存儲(chǔ)器地址來(lái)訪問(wèn)的。有兩條指令采用的是累加器尋址方式,它們分

別是:

READA

Smem

WRITA

Smem

READA是將累加器A所指定的程序存儲(chǔ)器單元的內(nèi)容傳送到Smem指向的數(shù)據(jù)存儲(chǔ)器單元中。

WRITA是將Smem指向的數(shù)據(jù)存儲(chǔ)器單元的內(nèi)容傳送到累加器A所指定的程序存儲(chǔ)器單元中。

需要注意的是,大多數(shù)C54x芯片的程序存儲(chǔ)器單元地址由累加器的低16位確定,但是某些DSP芯片(如C548、C549、C5410和VC5416有23根地址線)的累加器在尋址時(shí),程序存儲(chǔ)

器單元地址由累加器的低23位確定。4.1.4直接尋址

在直接尋址中,有一個(gè)指示數(shù)據(jù)存儲(chǔ)器的低7位偏移地址的操作數(shù),它與基地址結(jié)合,形成16位的數(shù)據(jù)存儲(chǔ)器地址?;刂反娣旁跀?shù)據(jù)頁(yè)指針寄存器(DP)或者堆棧指針寄存器(SP)中。采用直接尋址無(wú)須改變DP或SP的值就可以任意訪問(wèn)當(dāng)前基地址中連續(xù)的128個(gè)單元,這種方式的顯著特點(diǎn)是指令代碼只有一個(gè)字,訪問(wèn)速度塊。圖4.2給出了使用直接尋址指令的機(jī)器執(zhí)行碼格式,其中15~8位為指令操作碼,第7位I為尋址方式,若I=0,表示指令使用直接尋址方式,6~0位包含了指令的數(shù)據(jù)存儲(chǔ)器的偏移地址。圖4.2直接尋址指令的機(jī)器執(zhí)行碼格式根據(jù)ST1中的編譯模式位CPL可確定基地址。當(dāng)CPL=0時(shí),基地址為DP,實(shí)際訪問(wèn)的地址如圖4.3所示,高9位為DP的值(稱為數(shù)據(jù)頁(yè)),低7位為指令中的偏移地址。圖4.3以DP為基地址的直接地址形成過(guò)程由于DP的范圍為0~511(29-1),因此以DP為基地址的直接尋址將存儲(chǔ)器分為512頁(yè)。偏移地址的范圍為0~127(27-1),因此每頁(yè)有128個(gè)可以訪問(wèn)的單元。也就是說(shuō),DP指向了512頁(yè)中的某一頁(yè),而偏移地址則指向該頁(yè)的某一個(gè)單元。在以DP為基地址的直接尋址中,必須注意先初始化DP,否則程序運(yùn)行結(jié)果將不正常。當(dāng)CPL=1時(shí),基地址為SP,實(shí)際訪問(wèn)的地址如圖4.4所示,等于SP+指令中的7位偏移地址。這種尋址方式可以訪問(wèn)以SP為基地址的連續(xù)的128個(gè)單元。由于SP為16位的地址,因此不像DP那樣有頁(yè)面邊界限制。圖4.4以SP為基地址的直接地址形成過(guò)程4.1.5間接尋址

在間接尋址中,數(shù)據(jù)空間的任意單元都可以通過(guò)一個(gè)輔助寄存器中的內(nèi)容所代表的16位地址進(jìn)行訪問(wèn)。C54x有8個(gè)16位的輔助寄存器AR0~AR7。借助兩個(gè)輔助寄存器算術(shù)單元ARAU0和ARAU1的運(yùn)算,輔助寄存器的地址還可以有選擇地進(jìn)行增量、減量、偏移或變址的修改,其中AR0除了可以像其他輔助寄存器一樣使用外,還能夠用于循環(huán)尋址和位反轉(zhuǎn)尋址中。間接尋址方式相當(dāng)靈活,不但可以用一條指令從數(shù)據(jù)存儲(chǔ)器讀或?qū)懸粋€(gè)16位的數(shù)據(jù)操作數(shù)(單操作數(shù)間接尋址),還能在一條指令中訪問(wèn)兩個(gè)數(shù)據(jù)存儲(chǔ)器單元(雙操作數(shù)間接尋址),包括從兩個(gè)不同的數(shù)據(jù)存儲(chǔ)器單元讀數(shù)據(jù)和寫兩個(gè)連續(xù)的存儲(chǔ)器單元,或者讀一個(gè)存儲(chǔ)器單元同時(shí)寫另一個(gè)存儲(chǔ)器單元。

1.單操作數(shù)間接尋址

這種方式可以通過(guò)修改輔助寄存器的值來(lái)自動(dòng)改變尋址單元,具體修改方式有:地址加1或減1、加16位偏移量或用AR0值作為偏移量等。這些地址修改可以在地址訪問(wèn)之前或者之后進(jìn)行,共形成16種具體的尋址方式。表4.1列出了單操作數(shù)間接尋址的語(yǔ)法以及每一種語(yǔ)法的功能。表4.1中涉及到循環(huán)尋址和位反轉(zhuǎn)尋址兩種特殊的尋址過(guò)程,下面作詳細(xì)介紹。

(1)循環(huán)尋址。在卷積、相關(guān)和FIR濾波等許多算法中,都需要在存儲(chǔ)器中設(shè)置循環(huán)緩沖區(qū)。循環(huán)緩沖區(qū)是一個(gè)滑動(dòng)窗口(如圖4.5所示),它包含了最近的數(shù)據(jù)。如果有新的數(shù)據(jù)到來(lái),它將覆蓋最早的不再使用的數(shù)據(jù)。實(shí)現(xiàn)循環(huán)緩沖區(qū)的關(guān)鍵是循環(huán)尋址,循環(huán)尋址用%表示。圖4.5循環(huán)緩沖區(qū)及循環(huán)尋址若BK定義的循環(huán)緩沖區(qū)的大小為R,則要求緩沖區(qū)的首地址始于最低N位為0的地址,且N是滿足2N>R的最小整數(shù)。例如,R=31寫成二進(jìn)制為011111B,即N=5。一個(gè)長(zhǎng)度為

31個(gè)字的循環(huán)緩沖區(qū)必須開(kāi)始于最低5位為0的地址(即xxxxxxxxxxx00000B),且賦值BK=31。又如,一個(gè)長(zhǎng)度為32個(gè)字的循環(huán)緩沖區(qū)必須開(kāi)始于最低6位為0的地址(即xxxxxxxx

xx000000B),且賦值BK=32。設(shè)循環(huán)緩沖區(qū)的索引index是當(dāng)前ARx的低N位值,步長(zhǎng)step是一次加到ARx中或從ARx中減去的值。循環(huán)尋址的算法(index+step)%BK的具體代碼如下:

if0≤index+step<BK:

index=index+step.

elseifindex+step≥BK:

index=index+step-BK.

elseifindex+step<0:

index=index+step+BK.例如,下面一段代碼可實(shí)現(xiàn)a到b的抽取(8抽1)運(yùn)算。

STM#a,AR1

STM#b,AR2

STM#8,AR0

STM#10H,BRC

RPTB#EXT_END-1

LD*AR1+0%,A

STLA,*AR2+%設(shè)AR1=1000H,BK=20H,則N=6。根據(jù)指令A(yù)R0=8,可得step=8,則“LD*AR1+0%,A”循環(huán)尋址的單元分別是0x1000,0x1008,0x1010,0x1018,0x1000,0x1008,…。

使用循環(huán)尋址時(shí),必須遵循以下三個(gè)原則:

①循環(huán)緩沖區(qū)的長(zhǎng)度R小于2N,且地址從一個(gè)低N位為0的地址開(kāi)始;

②步長(zhǎng)小于或等于循環(huán)緩沖區(qū)的長(zhǎng)度R;

③所使用的輔助寄存器必須指向緩沖區(qū)單元。

(2)位反轉(zhuǎn)尋址。位反轉(zhuǎn)尋址主要用于FFT算法中,這種尋址方式可以大大提高程序的執(zhí)行速度和存儲(chǔ)器的利用效率。使用時(shí),AR0存放的整數(shù)值為FFT點(diǎn)數(shù)的一半,另一個(gè)輔助寄存器ARx指向存放數(shù)據(jù)的單元。位反轉(zhuǎn)尋址將AR0加到輔

助寄存器中,地址以位反轉(zhuǎn)方式產(chǎn)生。也就是說(shuō),兩者相

加時(shí),進(jìn)位是從左向右反向傳播的,而不是通常加法中的

從右向左傳播。例如,1010B與1100B的位反轉(zhuǎn)相加結(jié)果為0001B,如圖4.6所示。圖4.6位反轉(zhuǎn)進(jìn)位示意圖設(shè)輔助寄存器為8位,AR2的值為01100000B,AR0的值為00001000B,則位反轉(zhuǎn)尋址中AR2中的值修改的順序和修改后AR2的值如下:*AR2+0B,AR2=01100000B(第0值)

*AR2+0B,AR2=01101000B(第1值)

*AR2+0B,AR2=01100100B(第2值)

*AR2+0B,AR2=01101100B(第3值)

*AR2+0B,AR2=01100010B(第4值)

*AR2+0B,AR2=01101010B(第5值)

*AR2+0B,AR2=01100110B(第6值)

*AR2+0B,AR2=01101110B(第7值)表4.2給出了AR0為00001000B時(shí),位模式和位反轉(zhuǎn)模式與AR2低4位的關(guān)系。

2.雙操作數(shù)間接尋址

雙操作數(shù)間接尋址用于完成2個(gè)讀操作數(shù)或者1個(gè)讀和1個(gè)存儲(chǔ)(寫)并行的操作。采用這種方式的指令代碼都為一個(gè)字長(zhǎng)且只能以間接尋址方式工作。由于指令代碼中只有兩位用來(lái)表示輔助寄存器,因此只有4個(gè)輔助寄存器AR2~AR5可以使用,與2個(gè)ARAU一起,在一個(gè)周期內(nèi)訪問(wèn)2個(gè)操作數(shù)。表4.3列出了雙操作數(shù)間接尋址的類型。4.1.6存儲(chǔ)器映射寄存器尋址

這種尋址方式用來(lái)修改存儲(chǔ)器映射寄存器的內(nèi)容,但不會(huì)影響當(dāng)前的DP或SP值。由于不需要對(duì)DP或SP進(jìn)行操作,因此這種尋址方式的開(kāi)銷是最小的。存儲(chǔ)器映射寄存器尋址既可以在直接尋址中使用,又可以在間接尋址中使用,具體的地址產(chǎn)生方法如下所述。

(1)直接尋址方式中,數(shù)據(jù)存儲(chǔ)器低7位的地址來(lái)自指令字,高9位都被強(qiáng)制清0,而不管當(dāng)前DP值或SP值為多少。

(2)在間接尋址方式中,數(shù)據(jù)存儲(chǔ)器低7位的地址來(lái)自當(dāng)前輔助寄存器的低7位,高9位都被強(qiáng)制清0。當(dāng)操作完成后,輔助寄存器的高9位被強(qiáng)制清0。存儲(chǔ)器映射寄存器的尋址范圍為0x00~0x7F,包括數(shù)據(jù)第0頁(yè)中的便箋式RAM(地址在0x0060~0x007F內(nèi)的RAM)的任意單元。在匯編指令中,只有以下8條指令能使用存儲(chǔ)器映射寄存器的尋址方式。

LDMMMR,dst

STM#lk,MMR

STLMsrc,MMR

MVDMdmad,MMR

MVMDMMR,dmad

MVMMMMRx,MMRy

POPMMMR

PSHMMMR

需要注意的是,在存儲(chǔ)器映射寄存器尋址方式下,不能采用下列間接尋址的句法:

*ARx(lk),*+ARx(lk),*+ARx(lk)%和*+(lk)4.1.7堆棧尋址

系統(tǒng)堆棧是用戶定義的一段數(shù)據(jù)存儲(chǔ)單元,用于中斷或子程序調(diào)用時(shí)自動(dòng)保存程序計(jì)數(shù)器PC中的值,當(dāng)前程序的運(yùn)行環(huán)境以及函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞等。堆棧存放數(shù)據(jù)是從高端地址向低端地址進(jìn)行的,其最高地址單元稱為棧底。DSP用一個(gè)16位的堆棧指針SP來(lái)實(shí)現(xiàn)棧尋址,SP總是指向堆棧中最后存入的數(shù)據(jù)單元。

PSHD;將數(shù)據(jù)存儲(chǔ)器中的一個(gè)數(shù)壓入堆棧

PSHM;將一個(gè)MMR中的值壓入堆棧

POPD;從堆棧中彈出一個(gè)數(shù)據(jù)到數(shù)據(jù)存儲(chǔ)單元

POPM;從堆棧中彈出一個(gè)數(shù)據(jù)到一個(gè)MMR圖4.7給出了將一個(gè)數(shù)據(jù)X2壓入堆棧(PSHDX2)的操作過(guò)程,從圖4.7中可以清楚地看出堆棧和指針SP在操作前后的變化情況。對(duì)于TMS320C5000DSP來(lái)說(shuō),數(shù)據(jù)壓入堆棧前要對(duì)SP進(jìn)行減量運(yùn)算,而在數(shù)據(jù)彈出堆棧操作之后,要對(duì)指針進(jìn)行增量運(yùn)算。圖4.7數(shù)據(jù)壓入堆棧操作過(guò)程示意圖注意:堆棧沒(méi)有超出容量的自動(dòng)保護(hù)功能。如果壓入堆棧的數(shù)據(jù)個(gè)數(shù)超出堆棧的容量,則存儲(chǔ)在比堆棧最低地址更低的地址單元上的數(shù)據(jù)有可能覆蓋其他的數(shù)據(jù),因此在考慮堆棧容量時(shí),一定要有余地。一種簡(jiǎn)單測(cè)試堆棧是否超出范圍的方法是,在初始化主程序時(shí),將堆棧全部初始化為一個(gè)不用的常數(shù),如0xFFFF等,然后當(dāng)程序執(zhí)行到一定階段的時(shí)候觀察堆棧里是否至少還有一個(gè)這樣的常數(shù),若沒(méi)有,則程序使用堆棧超出了堆棧的容量。在中斷和調(diào)用子程序過(guò)程中,堆棧用來(lái)存放和恢復(fù)PC的值。當(dāng)一個(gè)中斷產(chǎn)生或者調(diào)用一個(gè)子程序時(shí),返回地址會(huì)自動(dòng)壓入堆棧頂部。返回地址從堆棧中彈出,存放到PC中。此外,F(xiàn)RAME指令也能影響堆棧,它將一個(gè)短立即數(shù)偏移量與SP指針相加,從而修改SP的值。在直接尋址中,也可以用堆棧指針SP作為基地址來(lái)尋址。

4.2程序?qū)ぶ贩绞?/p>

4.2.1程序存儲(chǔ)器地址生成器

程序存儲(chǔ)器有指令代碼、參數(shù)表和立即數(shù)。C54x程序地址總線(PAB)為16位總線,可尋址空間為64K字。5416等還有額外的7根地址總線可尋址外部128個(gè)64K字的頁(yè)。

5416共有5個(gè)寄存器單元組成程序地址產(chǎn)生邏輯(PAGEN),為指令代碼、參數(shù)表、長(zhǎng)立即數(shù)或其他存入程序存儲(chǔ)器的信息產(chǎn)生地址,并把該地址放在PAB上。這5個(gè)寄存器分別是PC(程序計(jì)數(shù)器)、RC(重復(fù)計(jì)數(shù)器)、BRC(塊重復(fù)計(jì)數(shù)器)、RSA(塊重復(fù)起始地址寄存器)和REA(塊重復(fù)結(jié)束地址寄存器),如圖4.8所示。圖4.8程序地址生成器(PAGEN)組成示意圖當(dāng)順序執(zhí)行時(shí),PC的值(程序地址)放在PAB總線上,進(jìn)而在程序存儲(chǔ)器相應(yīng)的地址取指。然后PC值自動(dòng)加1,指向下一個(gè)指令地址。如果程序地址不是連續(xù)的,如跳轉(zhuǎn)、返回、中斷或循環(huán),則需要根據(jù)具體指令給PC加載合適的地址。重復(fù)執(zhí)行類似于執(zhí)行C語(yǔ)言的for循環(huán)語(yǔ)句,DSP的重復(fù)執(zhí)行是為了提高執(zhí)行效率而作的特殊改進(jìn),它不需要CPU計(jì)算重復(fù)執(zhí)行的次數(shù)。如果重復(fù)執(zhí)行某行代碼(單重復(fù)執(zhí)行),程序先將重復(fù)次數(shù)減1的值載入到RC,然后重復(fù)執(zhí)行;如果重復(fù)執(zhí)行某一段代碼(塊重復(fù)執(zhí)行),程序先將重復(fù)次數(shù)減1的值載入到BRC,同時(shí)初始化BSA和BEA,然后重復(fù)執(zhí)行。兩者都是每重復(fù)執(zhí)行一次,RC或BRC的值就自動(dòng)減1,當(dāng)減到0后,再執(zhí)行一次,然后就停止執(zhí)行。4.2.2程序計(jì)數(shù)器(PC)和擴(kuò)展程序計(jì)數(shù)器(XPC)

程序計(jì)數(shù)器(PC)是一個(gè)16位寄存器,控制著程序的運(yùn)行過(guò)程。在通常情況下,程序指令按前后順序逐條執(zhí)行時(shí),PC值依次遞增。但是,當(dāng)程序指令出現(xiàn)轉(zhuǎn)移、子程序調(diào)用、子程序返回、條件操作、單指令重復(fù)、指令塊重復(fù)、硬件復(fù)位或者中斷操作時(shí),PC值會(huì)出現(xiàn)不連續(xù)的情況,此時(shí)PC值的變化情況見(jiàn)表4.4。擴(kuò)展程序計(jì)數(shù)器(XPC)是一個(gè)7位寄存器。在C548、C549、C5410、C5416和C5420等DSP芯片中,使用XPC可以對(duì)程序存儲(chǔ)器擴(kuò)展空間進(jìn)行尋址。在程序計(jì)數(shù)器PC被載入時(shí),XPC的值也隨情況不同發(fā)生變化。表4.5給出了各種情況下XPC值的變化。4.2.3延時(shí)轉(zhuǎn)移下的PC操作

由于C54xDSP在執(zhí)行指令時(shí)采用了流水線結(jié)構(gòu),執(zhí)行一條指令被分成了預(yù)取指、取指、譯碼、操作數(shù)尋址、讀操作數(shù)和執(zhí)行(回寫)6個(gè)部分。也就是說(shuō),當(dāng)一條指令運(yùn)行到執(zhí)行部分時(shí),后續(xù)的一條雙字長(zhǎng)指令或者兩條單字長(zhǎng)指令也已經(jīng)進(jìn)入流水線。C54xDSP中的匯編指令在執(zhí)行轉(zhuǎn)移操作時(shí)都分為延時(shí)轉(zhuǎn)移和不延時(shí)轉(zhuǎn)移兩種方式,在轉(zhuǎn)移指令上加上后綴D表示延時(shí)轉(zhuǎn)移。延時(shí)轉(zhuǎn)移指令能夠使緊跟轉(zhuǎn)移指令之后的一條雙字長(zhǎng)指令或兩條單字長(zhǎng)指令執(zhí)行完畢后,再跳轉(zhuǎn)到指令指定的地址執(zhí)行;而不延時(shí)轉(zhuǎn)移指令,它直接跳轉(zhuǎn)到指令指定的地址執(zhí)行,此時(shí)緊跟在轉(zhuǎn)移指令之后的一條雙字長(zhǎng)指令或兩條單字長(zhǎng)指令將不被執(zhí)行,直接在流水線上被沖洗掉。由于沖洗流水線需要附加周期,降低了程序運(yùn)行效率,因此正確應(yīng)用延時(shí)轉(zhuǎn)移指令和不延時(shí)轉(zhuǎn)移指令可以提高程序運(yùn)行速度和效率。

4.3指令流水線

DSP的指令流水線為指令的并行執(zhí)行提供了硬件支持,大大提高了DSP的指令執(zhí)行速度。C54x的流水線由6級(jí)深度組成,彼此相互獨(dú)立,并行工作。也就是說(shuō),要完整地執(zhí)行一條指令,需要6個(gè)時(shí)鐘周期,如果后面的指令能建立流水線結(jié)構(gòu),則每條指令只需占用一個(gè)時(shí)鐘周期,大大提高了運(yùn)行速度。這6個(gè)指令階段分別是程序預(yù)取指、程序取指、指令譯碼、尋址操作數(shù)、讀操作數(shù)和執(zhí)行,如圖4.9所示。圖4.9流水線操作示意圖

(1)程序預(yù)取指(Prefetch):將PC的地址放在程序地址總線(PAB)上。

(2)程序取指(Fetch):從程序總線(PB)取指令,載入指令寄存器(IR)。

(3)指令譯碼(Decode):對(duì)指令的內(nèi)容進(jìn)行譯碼,確定所要操作的存儲(chǔ)器類型、數(shù)據(jù)地址單元及相關(guān)控制信號(hào)。

(4)尋址操作數(shù)(Address):又稱“訪問(wèn)”,就是得到“讀”操作數(shù)的地址,它將第一操作數(shù)地址放在DAB上,將第二操作數(shù)地址放在CAB上,并對(duì)輔助寄存器和堆棧指針進(jìn)行修正。(5)讀操作數(shù)(Read):將第一操作數(shù)放在DB上,將第二操作數(shù)放在CB上,如果是并行指令,將第三操作數(shù)的寫地址放在EAB上。

(6)執(zhí)行(Execute):將執(zhí)行后的數(shù)據(jù)(在EB總線上)按EAB地址寫到存儲(chǔ)單元。不同的指令,具體執(zhí)行內(nèi)容有所不同,如有的指令沒(méi)有讀操作數(shù),有的指令沒(méi)有寫操作數(shù),則相應(yīng)的操作數(shù)為空。對(duì)于不能建立流水線的指令,流水線需要作特殊處理,以免出現(xiàn)流水線沖突,這些指令主要是程序控制指令,如分支指令、條件執(zhí)行指令等。避免流水線沖突的主要方法是加NOP空操作指令延時(shí)以及合理設(shè)計(jì)代碼等??赡墚a(chǎn)生流水線沖突的硬件資源有:

(1)輔助寄存器(AR0~AR7);

(2)循環(huán)緩沖區(qū)大小寄存器(BK);

(3)塊重復(fù)計(jì)數(shù)器(BRC);

(4)堆棧指針(SP);

(5)暫存器(T);

(6)微處理器方式寄存器(PMST);

(7)狀態(tài)寄存器(ST0和ST1);

(8)存儲(chǔ)器映射寄存器中的累加器(AG、AH、AL、BG、BH、BL)。

它們都是映射寄存器,如果在流水線中同時(shí)對(duì)它們進(jìn)行尋址,則有可能產(chǎn)生不能防范的沖突(一般出現(xiàn)在先寫后讀的情況下),而算術(shù)運(yùn)算不會(huì)出現(xiàn)此類沖突問(wèn)題。

4.4匯編程序流程控制

4.4.1條件操作

C54x的一些指令,只有當(dāng)滿足一個(gè)或多個(gè)條件時(shí)才能執(zhí)行,表4.6列出了一些指令的執(zhí)行條件及其操作符。當(dāng)使用多個(gè)條件時(shí),只有滿足所有條件時(shí),指令才可以執(zhí)行。多個(gè)條件指令的條件組合不能任意選擇,必須滿足表4.7的分類。4.4.2分支轉(zhuǎn)移指令

C54x的分支轉(zhuǎn)移指令分無(wú)條件分支轉(zhuǎn)移指令(相當(dāng)于C語(yǔ)言的goto語(yǔ)句)、條件分支轉(zhuǎn)移指令(相當(dāng)于C語(yǔ)言的if…end語(yǔ)句)和遠(yuǎn)分支轉(zhuǎn)移指令(在擴(kuò)展程序存儲(chǔ)器上的分支轉(zhuǎn)移)三大類。

1.無(wú)條件分支轉(zhuǎn)移指令

無(wú)條件分支轉(zhuǎn)移指令共有2條指令,B[D]和BACC[D]如表4.8所示。由于DSP的指令執(zhí)行采用流水線結(jié)構(gòu),當(dāng)執(zhí)行到將pmad或累加器的低16位的值加載到PC上時(shí),指令后面2個(gè)周期的指令(可以是2個(gè)單字或一個(gè)雙字的指令)已加載到流水線上。指令B表示指令后面的2個(gè)周期的指令不執(zhí)行,直接拋棄。指令BD表示指令后面的2個(gè)周期的指令先繼續(xù)執(zhí)行,然后分支轉(zhuǎn)移,稱為延遲(Delay)操作。指令BACC和BACCD的區(qū)別也同此。例4.1

B指令執(zhí)行示例。

2.條件分支轉(zhuǎn)移指令

條件分支轉(zhuǎn)移指令共有2條指令,BANZ[D]和BC[D],如表4.9所示。例4.2

BANZ指令執(zhí)行示例。例4.3

BC指令執(zhí)行示例單條指令的條件為“與”關(guān)系,需要同時(shí)滿足;若為“或”的關(guān)系,可以分成多行書(shū)寫即可。如:

BCnext,AGT

BCnext,AOV;如果A>0或A溢出,就跳到next處執(zhí)行其他條件執(zhí)行的指令與此相同。

如果要有條件地跳過(guò)1~2字的指令,可用XC條件轉(zhuǎn)移指令快速執(zhí)行,格式為

XCn,cond[,cond[,cond]];n=1~2

如果后面的條件全部滿足,就執(zhí)行后面的n字指令,否則就執(zhí)行n條NOP(空操作)。當(dāng)n=1時(shí)為一個(gè)單字指令,當(dāng)n=2時(shí)為兩個(gè)單字或一個(gè)雙字指令。

3.遠(yuǎn)分支轉(zhuǎn)移指令

遠(yuǎn)分支轉(zhuǎn)移指令共有2條指令,F(xiàn)B[D]和FBACC[D],如表4.10所示。例4.4

FB指令執(zhí)行示例。例4.5

FBACC指令執(zhí)行示例。4.4.3重復(fù)操作指令

1.單指令重復(fù)操作指令

單指令重復(fù)操作指令有兩條指令RPT和RPTZ,可重復(fù)其后的一條指令,如表4.11所示。

重復(fù)次數(shù)由RPT或RPTZ指令放在RC寄存器里,值的范圍為0~65535,實(shí)際執(zhí)行次數(shù)比指令操作數(shù)多1次。RC寄存器不能對(duì)外訪

溫馨提示

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

評(píng)論

0/150

提交評(píng)論