信息工程學通信工程系_第1頁
信息工程學通信工程系_第2頁
信息工程學通信工程系_第3頁
信息工程學通信工程系_第4頁
信息工程學通信工程系_第5頁
已閱讀5頁,還剩65頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1信息工程學通信工程系信息工程學通信工程系DSPDSP技術技術及應用及應用igital ignal rocessor數字信號處理器數字信號處理器陳金鷹陳金鷹 教授教授2第三章第三章 DSP指令系統與特點指令系統與特點 3SmemSmem:1616位單尋址操作數。位單尋址操作數。XmemXmem:1616位雙尋址操作數,從位雙尋址操作數,從DBDB數據總線上讀出。數據總線上讀出。YmemYmem:1616位雙尋址操作數,從位雙尋址操作數,從CBCB數據總線上讀出。數據總線上讀出。dmaddmad:1616位立即數,數據存儲器地址。位立即數,數據存儲器地址。pmadpmad:1616位立即數,程序

2、存儲器地址。位立即數,程序存儲器地址。PAPA: 1616位立即數,位立即數,I/OI/O口地址。口地址。srcsrc: 源累加器(源累加器(A A或或B B)。)。dstdst: 目的累加器(目的累加器(A A或或B B)。)。lklk: 1616位長立即數。位長立即數。第一節第一節 TMS320C54xTMS320C54x的尋址方式的尋址方式 縮縮寫寫41 1立即數尋址立即數尋址2絕對地址尋址絕對地址尋址3累加器尋址累加器尋址4直接尋址直接尋址5間接尋址間接尋址6存儲器映象寄存器尋址存儲器映象寄存器尋址7堆棧尋址堆棧尋址尋址尋址分類分類5 1 1立即數尋址立即數尋址 在操作數前面需要加字號

3、來說明該操作數在操作數前面需要加字號來說明該操作數為立即數。否則會把該操作數誤認為是一個地為立即數。否則會把該操作數誤認為是一個地址,從而把立即數尋址變成絕對地址尋址。址,從而把立即數尋址變成絕對地址尋址。 特特點點指令中包含有執行指令所需要的操作數。指令中包含有執行指令所需要的操作數。立即數分為立即數分為3 3、5 5、8 8或或9 9位的短立即數和位的短立即數和1616位位的長立即數兩種。的長立即數兩種。短立即數可包含在單字或雙字指令中,長立短立即數可包含在單字或雙字指令中,長立即數在雙字指令中。即數在雙字指令中。 注注意意LD #93hLD #93h,A A LD 93hLD 93h,A

4、 A 舉例舉例6 2絕對地址尋址絕對地址尋址特特點點在指令中包含有所要尋址的存儲單元的在指令中包含有所要尋址的存儲單元的1616位位地址。這個地址。這個1616位的地址可以用其所在單元的地位的地址可以用其所在單元的地址標號或者址標號或者1616位符號常數來表示。位符號常數來表示。 (1 1)數據存儲器地址()數據存儲器地址(damddamd)尋)尋址址 用一個符號或一個用一個符號或一個數來確定數據空間數來確定數據空間的一個地址。的一個地址。 方法方法MVKD SAMPLEMVKD SAMPLE,* *AR3AR3LD 93hLD 93h,A A 舉例舉例7用一個符號或一用一個符號或一個具體的數

5、來確個具體的數來確定程序存儲器中定程序存儲器中的一個地址的一個地址 (2 2)程序存儲器地址()程序存儲器地址(pmadpmad)尋)尋址址 方法方法MVPD TABLEMVPD TABLE,* *AR4AR4MVPD MVPD 90h90h,* *AR4AR4 舉例舉例8用一個符用一個符號或一個號或一個常數來確常數來確定外部定外部I/OI/O口地口地址址 (3 3)PAPA尋址尋址 端口(端口(PAPA) 方法方法PORTR FIFOPORTR FIFO,* *AR5AR5PORTR PORTR 90h90h,* *AR5AR5 舉例舉例9用一個符號用一個符號或一個常數或一個常數來確定數據來

6、確定數據存儲器中的存儲器中的一個地址一個地址 (4 4)* *(lklk)尋址)尋址 方法方法LD LD * *(BUFFERBUFFER),),A A 舉例舉例特點特點允許所有使允許所有使用用SmemSmem尋址尋址的指令去訪的指令去訪問數據空間問數據空間的任意單元的任意單元而不改變數而不改變數據頁指針據頁指針(DPDP)的值,)的值,也不用對也不用對ARxARx進行初始化進行初始化 10用累加器用累加器中的數值中的數值作為地址作為地址來讀寫程來讀寫程序存儲器。序存儲器。 方法方法READA SmemREADA Smem WRITA SmemWRITA Smem 舉例舉例特點特點可用來可用來

7、完成完成程序存儲器程序存儲器單元的數據單元的數據與與數據存儲數據存儲器單元的數器單元的數據據進行交換進行交換 3累加器尋址累加器尋址11可以在不改可以在不改變變DPDP或或SPSP的的情況下,隨情況下,隨機地尋址機地尋址128128個存儲單元個存儲單元中的任何一中的任何一個單元。個單元。用一個符號或用一個符號或一個常數來確一個常數來確定定7 7位偏移值位偏移值,與與DPDP或或SPSP共同共同形成形成1616位的數位的數據存儲器實際據存儲器實際地址。地址。4直接尋址直接尋址 方法方法LD #xLD #x,DPDPLD uLD u,A A ADD vADD v,A A =SSBX CPLSSBX

8、 CPL LD X1 LD X1,A A ADD Y2 ADD Y2,A A 舉例舉例特點特點12CPL=0 7CPL=0 7位位dmadma域與域與9bit9bit的的DPDP相結合相結合形成形成1616位的數據存儲器地址。位的數據存儲器地址。CPL=1 7CPL=1 7位位dmadma域加上(正偏移)域加上(正偏移)SPSP的值形成的值形成1616位的數據存儲器地址。位的數據存儲器地址。 DPDP值是從值是從0511(2 29 9-1-1),以),以DPDP為基準的直接尋址把存儲器分成為基準的直接尋址把存儲器分成512512頁,頁,7 7位的位的dmadma范圍從范圍從0127,每頁有,每

9、頁有128128個可訪問的單元。個可訪問的單元。 135間接尋址間接尋址 方法方法特點特點(AR0AR0AR7AR7)ARAU0/ARAU1 ARAU0/ARAU1 1616位無符號算術運位無符號算術運算算尋址范圍為尋址范圍為64K 64K 能在一個指令中訪問能在一個指令中訪問兩個數據存儲器單元兩個數據存儲器單元兩個獨立的存儲器單元讀數據兩個獨立的存儲器單元讀數據讀一個讀一個、寫另一個存儲器單元寫另一個存儲器單元讀寫兩個連續的存儲器單元讀寫兩個連續的存儲器單元 14(1 1)單操作數尋址)單操作數尋址 定義間接尋定義間接尋址的類型址的類型定義尋址所使用定義尋址所使用的輔助寄存器的輔助寄存器 C

10、MPT=0 CMPT=0 標準方式標準方式 ARFARF確定輔助寄存器確定輔助寄存器,ST0ST0中中ARPARP000000 CMPT=1 CMPT=1 兼容方式兼容方式如如ARF=000ARF=000,用,用ARP(ST0)ARP(ST0)選擇輔助寄選擇輔助寄存器,否則,用存器,否則,用ARFARF來確定輔助寄存器。來確定輔助寄存器。ARFARF的值裝入的值裝入ARPARP。LD LD * *AR1,BAR1,B15單操作數間接尋址的硬件框圖16MOD域域操作碼語法操作碼語法功功 能能說說 明明0000*ARxaddr=ARxARx包含了數據存儲器地址包含了數據存儲器地址0001*ARx-

11、addr=ARxARx=ARx-1訪問后,訪問后,ARx中的地址減中的地址減10010*ARx+addr=ARxARx=ARx+1訪問后,訪問后,ARx中的地址加中的地址加10011*+ARxaddr=ARx+1ARx=ARx+1在尋址前,在尋址前,ARx中的地址加中的地址加1,然后再尋址,然后再尋址0100*ARx-0Baddr=ARxARx=B(ARx-AR0)訪問后,從訪問后,從ARx中以位倒序進位的方式減去中以位倒序進位的方式減去AR00101*ARx-0addr=ARxARx=ARx-AR0訪問后,從訪問后,從ARx中減去中減去AR00110*ARx+0addr=ARxARx=ARx

12、+AR0訪問后,把訪問后,把AR0加到加到ARx中去中去0111*ARx+0Baddr=ARxARx=B(ARx+AR0)訪問后,把訪問后,把AR0以位倒序進位的方式加到以位倒序進位的方式加到ARx中中1000*ARx-%addr=ARxARx=circ(ARx-1)訪問后,訪問后,ARx中的地址以循環尋址的方式減中的地址以循環尋址的方式減11001*ARx-0%addr=ARxARx=circ(ARx-AR0)訪問后,從訪問后,從ARx中以循環尋址的方式減去中以循環尋址的方式減去AR01010*ARx+%addr=ARxARx=circ(ARx+1)訪問后,訪問后,ARx中的地址以循環尋址的

13、方式加中的地址以循環尋址的方式加11011*ARx+0%addr=ARxARx=circ(ARx+AR0)訪問后,把訪問后,把AR0以循環尋址的方式加到以循環尋址的方式加到ARx中中1100*ARx(lk)addr=ARx+lkARx=ARxARx和和16位的長偏移(位的長偏移(lk)的和用來作為數據存儲器地)的和用來作為數據存儲器地址。址。ARx本身不被修改本身不被修改1101*+ARx(lk)addr=ARx+lkARx=ARx+lk在尋址前,把一個帶符號的在尋址前,把一個帶符號的16位的長偏移(位的長偏移(lk)加到)加到ARx中,然后用新的中,然后用新的ARx的值作為數據存儲器的地址的

14、值作為數據存儲器的地址1110*+ARx(lk)%addr=circ(ARx+lk)ARx=circ(ARx+lk)在尋址前,把一個帶符號的在尋址前,把一個帶符號的16位的長偏移以循環尋址位的長偏移以循環尋址的方式加到的方式加到ARx中,然后再用新的中,然后再用新的ARx的值作為數據的值作為數據存儲器的地址存儲器的地址1111*(lk)addr=lk一個無符號的一個無符號的16位的長偏移(位的長偏移(lk)用來作為數據存儲)用來作為數據存儲器的絕對地址。(也屬絕對尋址)器的絕對地址。(也屬絕對尋址)單數據存儲器操作數間接尋址類型單數據存儲器操作數間接尋址類型 171) 1) 循環尋址循環尋址

15、循環緩沖區的長度值存放在循環緩沖循環緩沖區的長度值存放在循環緩沖區長度寄存器區長度寄存器BKBK中,中,BKBK中的數值由指令設定。長度為中的數值由指令設定。長度為R R的循環緩沖器必須從一個的循環緩沖器必須從一個N N位地址的邊界開始,即循環位地址的邊界開始,即循環緩沖器基地址的最低緩沖器基地址的最低N N位必須為位必須為0 0。N N是滿足是滿足2 2N NR R的最的最小整數。小整數。R R的值必須裝入的值必須裝入BKBK。例如,含有例如,含有3131個字的循環緩沖器必須從最低個字的循環緩沖器必須從最低5 5位為位為0 0的的地址開始,即地址開始,即xxxx xxxxxxxx xxxx

16、xxx0 0000 xxx0 00002 2,N=5N=5,2 2N N=2=25 5R=31R=31,且,且3131必須裝入必須裝入BKBK。如:。如:STM #31STM #31,BKBK如果如果R=32R=32,則最小的,則最小的N N值為值為6 6,循環緩沖區的起始地址,循環緩沖區的起始地址必須有必須有6 6個最低有效位為個最低有效位為0 0,即,即 00 000000 00002 2。182) 2) 位倒序尋址位倒序尋址 在這種尋址方式中,用在這種尋址方式中,用AR0AR0存放存放FFTFFT點數的一半整數點數的一半整數N N,用另一輔助寄存器指向一數據,用另一輔助寄存器指向一數據存

17、放的物理單元。當使用位倒序尋址把存放的物理單元。當使用位倒序尋址把AR0AR0加到輔助寄加到輔助寄存器中時,地址以位倒序的方式產生,即進位是從左存器中時,地址以位倒序的方式產生,即進位是從左向右,而不是從右向左進位。向右,而不是從右向左進位。 例如:例如: 0110 10000110 1000 + 0000 1000 + 0000 1000 0110 01000110 0100以以8 8位輔助寄存器為例,位輔助寄存器為例,AR1AR1表示了在存儲器中數表示了在存儲器中數據的基地址(據的基地址(0110 00000110 0000)2 2,AR0AR0的值為(的值為(0000 10000000

18、1000)2 2。利用以下兩條語句可以向外設口(口地址為。利用以下兩條語句可以向外設口(口地址為PAPA)輸出整序后的輸出整序后的FFTFFT變換結果:變換結果:RPT #15 ;RPT #15 ;重復執行下條指令重復執行下條指令15+115+1次次PORTW PORTW * *AR1+0BAR1+0B,PA;PA;向外設口向外設口PAPA輸出結果輸出結果19序號序號存儲單存儲單元地址元地址整序前整序前FFT 變換結果變換結果位倒序位倒序AR1更新的地址值更新的地址值AR0=0000 10002整序后整序后PA輸出的輸出的FFT變換結果變換結果00000X(0)00000110 0000X(0

19、)10001X(8)10000110 1000X(1)20010X(4)01000110 0100X(2)30011X(12)11000110 1100X(3)40100X(2)00100110 0010X(4)50101X(10)10100110 1010X(5)60110X(6)01100110 0110X(6)70111X(14)11100110 1110X(7)81000X(1)00010110 0001X(8)91001X(9)10010110 1001X(9)101010X(5)01010110 0101X(10)111011X(13)11010110 1101X(11)12110

20、0X(3)00110110 0011X(12)131101X(11)10110110 1011X(13)141110X(7)01110110 0111X(14)151111X(15)11110110 1111X(15)位倒序對位倒序對FFTFFT變換結果的序號調整變換結果的序號調整 20(2 2)雙操作數尋址方式)雙操作數尋址方式 確定確定包含包含XmemXmem地址地址的輔的輔助寄助寄存器存器 確定確定包含包含YmemYmem地址地址的輔的輔助寄助寄存存器器定義用于定義用于訪問訪問YmemYmem操作數的操作數的間接尋址間接尋址方式的類方式的類型型 定義用于定義用于訪問訪問XmemXmem操

21、操作數的間作數的間接尋址方接尋址方式的類型式的類型 MPY MPY * *AR2,AR2,* *AR3,AAR3,A21Xar或或Yar 輔助寄存器輔助寄存器00 AR201 AR310 AR411 AR5輔助輔助寄存器寄存器選擇選擇Xmod或或Ymod操作碼語操作碼語法法功功 能能說說 明明00*ARxaddr=ARxARx是數據存儲器地址是數據存儲器地址01*ARx-addr=ARxARx=ARx-1訪問后,訪問后,ARx中的地址減中的地址減110*ARx+addr=ARxARx=ARx+1訪問后,訪問后,ARx中的地址加中的地址加111*ARx+0%addr=ARxARx=circ(AR

22、x+AR0)訪問后,訪問后,AR0以循環尋址的以循環尋址的方式加到方式加到ARx中中220 0頁尋址。頁尋址。不影響當前不影響當前DPDP或或SPSP值值 。用于直接尋用于直接尋址和間接尋址和間接尋址址用來修用來修改存儲改存儲器映象器映象寄存器寄存器 6存儲器映象寄存器尋址存儲器映象寄存器尋址功能功能LDM PRD,ALDM PRD,A舉例舉例特點特點方法方法高高9 9位數據位數據存儲器地址存儲器地址被置被置0 0,利,利用指令中的用指令中的低位地址低位地址訪問訪問MMRMMR。237堆棧尋址堆棧尋址 從高地址向低地址方向生長,從高地址向低地址方向生長,SPSP用來管理堆棧,用來管理堆棧,SP

23、SP始終指向始終指向堆棧中所存放的最后一個數據,堆棧中所存放的最后一個數據,即即SPSP指針始終指向棧頂。在壓指針始終指向棧頂。在壓入操作時,先減小入操作時,先減小SPSP的值,再的值,再將數據壓入堆棧;在彈出操作將數據壓入堆棧;在彈出操作時,先從堆棧彈出數據,再增時,先從堆棧彈出數據,再增加加SPSP的值。的值。用來在中斷用來在中斷和子程序調和子程序調用時自動保用時自動保存程序計數存程序計數器(器(PCPC)中)中的數值的數值,也也能用來保護能用來保護現場或傳送現場或傳送參數參數 功能功能特點特點PSHD PSHD * *AR2AR2 POPD POPD * *AR3AR324第二節第二節

24、程序地址的生成程序地址的生成程序地址程序地址生成器生成器(PAGENPAGEN)構成構成程序計數器(程序計數器(PCPC)重復計數器(重復計數器(RCRC)塊重復計數器(塊重復計數器(BRCBRC)塊重復起始地址寄存器(塊重復起始地址寄存器(RSARSA)塊重復結束地址寄存器(塊重復結束地址寄存器(REAREA)核心核心1616位程序計數器(位程序計數器(PCPC)內中保存某個內部或外內中保存某個內部或外部程序存儲器的地址部程序存儲器的地址。地址地址內容為:內容為:即將取指的某條指令即將取指的某條指令;某個某個1616位立即操作數位立即操作數;系數表系數表。在程序存儲器中的地址在程序存儲器中的

25、地址25操作操作加載到加載到PC的地址的地址復位復位PC=FF80h。順序執行指令順序執行指令PC=PC+1。分支轉移分支轉移用緊跟在分支轉移指令后面的用緊跟在分支轉移指令后面的16位立即數加載位立即數加載PC。由累加器分支轉移由累加器分支轉移用累加器用累加器A或或B的低的低16位立即數加載位立即數加載PC。塊重復循環塊重復循環假如假如ST1中的塊重復有效位中的塊重復有效位BRAF=1,當,當PC+1等于塊重復等于塊重復結束地址(結束地址(REA)+1,將塊重復起始地址(,將塊重復起始地址(RSA)加載)加載PC。子程序調用子程序調用將將PC+2壓入堆棧,并用緊跟在調用指令后面的壓入堆棧,并用

26、緊跟在調用指令后面的16位立即數位立即數加載加載PC。返回指令將棧頂彈出至。返回指令將棧頂彈出至PC,回到原先的程序處,回到原先的程序處繼續執行。繼續執行。從累加器調用子程從累加器調用子程序序將將PC+1壓入壓入堆堆棧,用累加器棧,用累加器A或或B的低的低16位加載位加載PC。返回。返回指令將棧頂彈出至指令將棧頂彈出至PC,回到原先的程序處繼續執行。,回到原先的程序處繼續執行。硬件中斷或軟件中硬件中斷或軟件中斷斷將將PC壓入堆棧,用適當的中斷向量地址加載壓入堆棧,用適當的中斷向量地址加載PC。中斷返。中斷返回時,將棧頂彈出至回時,將棧頂彈出至PC,繼續執行被中斷了的子程序。,繼續執行被中斷了的

27、子程序。將程序存儲器地址加載到程序計數器的途徑將程序存儲器地址加載到程序計數器的途徑26PC程序存儲器程序存儲器地址地址IPTR(PMST)中斷向量號中斷向量號+PC+1分支轉移指令分支轉移指令低字低字塊重復起始地址塊重復起始地址RSA壓入堆棧壓入堆棧+1=塊重復結束地址塊重復結束地址REA+1塊重復循環塊重復循環子程序調用子程序調用調用調用返回返回PC+1PC硬件中斷或軟件中斷硬件中斷或軟件中斷順序執行順序執行復位復位分支轉移分支轉移271分支轉移操作分支轉移操作 通過分支轉移指令改寫通過分支轉移指令改寫PCPC,可,可以改變程序的流向。而子程序以改變程序的流向。而子程序調用指令則通過將一個

28、返回地調用指令則通過將一個返回地址壓入堆棧,執行返回時恢復址壓入堆棧,執行返回時恢復原地址。原地址??蓤绦锌蓤绦? :分支轉移分支轉移循環控制循環控制子程序操子程序操作作 功能功能方法方法28條件條件分支轉移分支轉移無條件分支轉移無條件分支轉移 BDBD用指令用指令中所給出的中所給出的地址加載地址加載PCPCBACCDBACCD用用所指定的累所指定的累加器的低加器的低1616位作為地址位作為地址加載加載PCPC。 帶延遲帶延遲不帶延遲不帶延遲操作操作轉移種類轉移種類BCDBCD如果指令如果指令中所規定的條中所規定的條件得到滿足,件得到滿足,就用指令中所就用指令中所給出的地址加給出的地址加載載P

29、CPC;BANZDBANZD如果當如果當前輔助寄存器前輔助寄存器不等于不等于0 0,就用,就用指令中所規定指令中所規定的地址加載的地址加載PCPC。 BC newBC new,AOVAOV BANZ loop,BANZ loop,* *AR2-AR2-B nextB nextBACC ABACC A292調用和返回調用和返回 轉移前,原程序的轉移前,原程序的下條指令的地址被下條指令的地址被壓入堆棧,而在返壓入堆棧,而在返回時則將這個地址回時則將這個地址彈出至彈出至PCPC,使被中,使被中斷了的原程序能繼斷了的原程序能繼續執行。續執行。 當采用調用指令進當采用調用指令進行子程序或函數調行子程序或

30、函數調用時,用時,DSPDSP中斷當中斷當前運行的程序,轉前運行的程序,轉移到程序存儲器的移到程序存儲器的其它地其它地址址繼續運行。繼續運行。功能功能方法方法無條件調用與返回無條件調用與返回有條件調用與返回有條件調用與返回帶延遲帶延遲不帶延遲不帶延遲CALLd CALLd loplopRET mainRET main303條件指令中的條件判斷條件指令中的條件判斷ST0ST031多重條件判斷多重條件判斷 BC pmadBC pmad,condcond,condcond,condcond相與關系相與關系相或關系相或關系BC pmadBC pmad,condcondBC pmadBC pmad,co

31、ndcond第第1組組第第2組組A 類類B 類類A 類類B 類類C 類類EQOVTCCBIONEQNOVNTCNCNBIOLT LEQ GT GEQ 32第第1 1組組 例如例如 可以從可以從A A類中選一個條件,同類中選一個條件,同時可以從時可以從B B類中選擇一個條件。類中選擇一個條件。但是不能從同一類中選擇兩但是不能從同一類中選擇兩個條件。個條件。另外,兩種條件測試的累加另外,兩種條件測試的累加器必須是同一個。器必須是同一個??梢酝瑫r測試可以同時測試AGTAGT和和AOVAOV,但,但不能同時測試不能同時測試AGTAGT和和BGTBGT。 BC pmadBC pmad,AGTAGT,AO

32、VAOVBC pmadBC pmad,AGTAGT,BOVBOV33第第2 2組組 例如例如 可以在可以在A A、B B、C C三類中各三類中各選擇一個條件,但不能從選擇一個條件,但不能從同一類中選擇兩個條件同一類中選擇兩個條件 可以在可以在A A、B B、C C三類中各選三類中各選擇一個條件,但不能從同擇一個條件,但不能從同一類中選擇兩個條件一類中選擇兩個條件 BC pmadBC pmad,TCTC,C C,BIOBIOBC pmadBC pmad,NTCNTC,TCTC,NBIONBIO34特特例例如果條件分支轉移出去的地方只有如果條件分支轉移出去的地方只有1 12 2字的字的程序段,則可

33、以用一條單周期條件執行指令程序段,則可以用一條單周期條件執行指令(XCXC)來代替分支轉移指令:)來代替分支轉移指令:XC nXC n,condcond,condcond,condcond當當n=1n=1,且條件得到滿足,就執行緊隨此,且條件得到滿足,就執行緊隨此條件指令后的個字指令。條件指令后的個字指令。當當n=2n=2,且條件得到滿足,就執行緊隨此,且條件得到滿足,就執行緊隨此指 令 后 的指 令 后 的 1 1 個 雙 字 指 令 或 者個 雙 字 指 令 或 者 2 2 條 單條 單字指令。字指令。35例例3-3 編寫計算編寫計算 的主要程序部分。的主要程序部分。 .bss.bss x

34、,4 x,4 ;為;為X X建立建立4 4個單元,個單元, ;放置;放置X1X1、X2X2、X3X3、X4X4 .bss.bss y,1 y,1 ;為;為Y Y建立建立1 1個單元,放置個單元,放置Y Y STM #xSTM #x,AR1 AR1 ;將;將X1X1的地址傳給的地址傳給AR1AR1 STM #3STM #3,AR2 AR2 ;將循環次數;將循環次數3 3傳給傳給AR2AR2 LD #0LD #0,A A ;對;對A A清零清零loop:ADDloop:ADD * *AR1+AR1+,A A ;對;對X1X1、X2X2、X3X3、X4X4循環循環 ;累加,結果放;累加,結果放A A

35、中中 BANZ loop, AR2- BANZ loop, AR2- ;檢查循環是否應結束;檢查循環是否應結束 STL ASTL A,y y ;將累加結果存入;將累加結果存入Y Y中中41iixy36特點特點2 2特點特點1 14單條指令的重復操作單條指令的重復操作 重復執行(重復執行(RCRC)+1+1次。次。RCRC內容不能編程設置,內容不能編程設置,只能由重復指令(只能由重復指令(RPTRPT和和RPTZRPTZ)中的操作數加載。)中的操作數加載。操作數操作數n n的最大值為的最大值為65 65 535535,最大重復執行次數,最大重復執行次數為為65 535+165 535+1。 功能

36、功能重復執行下一條指令重復執行下一條指令 一旦重復指令被取一旦重復指令被取指、譯碼,直到重指、譯碼,直到重復循環完成以前,復循環完成以前,對所有的中斷(包對所有的中斷(包括括NMINMI,但不包括,但不包括RSRS)均不響應。)均不響應。 37重復過程重復過程當當RPTRPT指令執行時指令執行時:首先把循環的次數裝入循環計數器(首先把循環的次數裝入循環計數器(RCRC),),其循環次數其循環次數n n由一個由一個1616位單數據存儲器操作數位單數據存儲器操作數 SmemSmem或一個或一個8 8位或位或1616位常數位常數k k或或lklk給定。這樣,給定。這樣, 緊接著的下一條指令會循環執行

37、緊接著的下一條指令會循環執行n+1n+1次。次。循環,循環,RCRC在執行減在執行減1 1操作時不能被訪問。操作時不能被訪問。注意:注意:該循環內不能套用循環。該循環內不能套用循環。 當當RPTZRPTZ指令執行時指令執行時:對目的累加器對目的累加器dstdst清清0 0, 循環執行下一條指令循環執行下一條指令n+1n+1次。次。 38例例3-5 利用單條指令的重復操作對數組利用單條指令的重復操作對數組x5=0 x5=0,0 0,0 0,0 0,00進行初始化。進行初始化。.bss.bss x,5 x,5 ;為數組;為數組x x分配分配5 5個存儲單元個存儲單元STM #x,AR1 STM #

38、x,AR1 ;將;將x x的首地址賦給的首地址賦給AR1AR1LD #0,A LD #0,A ;對;對A A清零清零RPT #4 RPT #4 ;設置重復執行下條指令;設置重復執行下條指令5 5次次STL A,STL A,* *AR1+AR1+;對;對x5x5各單元清零各單元清零或者或者.bss.bss x,5 x,5STM #x,AR1STM #x,AR1RPTZ A,#4RPTZ A,#4;對;對A A清零并設置重復執行下條指令清零并設置重復執行下條指令5 5次次STL A,STL A,* *AR1+AR1+39特點特點5塊重復操作塊重復操作 利用利用C54xC54x內部的塊重復計數器(內

39、部的塊重復計數器(BRCBRC,加載值,加載值可為可為0 065 53565 535)、塊重復起始地址寄存器)、塊重復起始地址寄存器(RSARSA)、塊重復結束地址寄存器()、塊重復結束地址寄存器(REAREA)與程)與程序塊重復指令序塊重復指令RPTBRPTB,可對緊隨,可對緊隨RPTBRPTB、由若干條、由若干條指令構成的程序塊進行重復操作。指令構成的程序塊進行重復操作。功能功能將重復操作的范圍擴大到將重復操作的范圍擴大到64K64K長度的循環回路長度的循環回路 注意注意1.1.RPTRPT指令一旦執行,不會停止操指令一旦執行,不會停止操作,即使有中斷請求也不響應;作,即使有中斷請求也不響

40、應;2.RPTB2.RPTB指令可以響應中斷;指令可以響應中斷;40例例3-6 對數據組對數據組x5x5中的每個元素加中的每個元素加1 1。.bss.bss x,5 x,5 ;為數組;為數組x x分配分配5 5個存儲單元個存儲單元begin:LD #1,16,B begin:LD #1,16,B ;將;將1 1左移左移1616位放入位放入B B的的 ;高端字的最低位;高端字的最低位STM #4,BRC STM #4,BRC ; 4BRC4BRC,(PCPC)+2 +2 RSARSA STM #x,AR4STM #x,AR4;將;將x x的首地址賦給的首地址賦給AR4 AR4 RPTB next

41、-1RPTB next-1;將將NEXT-1 NEXT-1 REAREA ADD ADD * *AR4,16,B,A AR4,16,B,A ;x x地址的內容左移地址的內容左移1616位加位加 ; B B的高端字,結果放的高端字,結果放A ASTH A,STH A,* *AR4+ AR4+ ;將;將A A的高端字存入的高端字存入x x單元,單元, ;完成加;完成加1 1操作操作next: LD #0,B next: LD #0,B ;對;對B B清零清零 ;必必需需next-1next-1作為結束地址作為結束地址41對寄存器的占用對寄存器的占用6循環的嵌套循環的嵌套 執行執行RPTRPT指令時

42、指令時占用占用RCRC寄存器(重復計數器);寄存器(重復計數器);執行執行RPTBRPTB指令時要用到指令時要用到BRCBRC、RSARSA和和RSERSE寄存器。寄存器。只有只有一套塊重復寄存器,一套塊重復寄存器,故故塊重復操作不能嵌套。塊重復操作不能嵌套。 由于由于RPTRPT與與RPTBRPTB兩者用了不同的寄存器,因此兩者用了不同的寄存器,因此RPTRPT指指令可以嵌套在令可以嵌套在RPTBRPTB指令指令的循環的循環中,實現循環的嵌套。中,實現循環的嵌套。執行執行BANZBANZ指令指令只占用輔助寄存器只占用輔助寄存器ARxARx。不會與不會與RPT RPT RPTBRPTB指令指令

43、相沖突。相沖突。嵌套原則嵌套原則參與嵌套循環的寄存器不能重復使用參與嵌套循環的寄存器不能重復使用 42圖3-3 一個三重循環嵌套結構43第三節第三節 流水線操作技術流水線操作技術 流水線流水線操作操作在執行多條指令時,將每條指令的在執行多條指令時,將每條指令的預取指、取指、譯碼、尋址、讀取預取指、取指、譯碼、尋址、讀取操作數、執行等階段,操作數、執行等階段,相差一個階相差一個階段段地地重疊重疊地執行。地執行。流水流水線操線操作作的的優點優點一條一條k k段流水能在段流水能在k k+ +(n n-1-1)個周期內處理)個周期內處理n n條指令。其前條指令。其前k k個周期用于完成第一條指令個周期

44、用于完成第一條指令,其余,其余n n-1-1條指令的執行需要條指令的執行需要n n-1-1個周期。個周期。而非流水處理器上執行而非流水處理器上執行n n條指令則需要條指令則需要nknk 個周期。當指令條數個周期。當指令條數n n較大時,可認為每個較大時,可認為每個周期內執行的最大指令個數為周期內執行的最大指令個數為k k。 44預取指預取指P取指取指F譯碼譯碼D尋址尋址A讀取操作數讀取操作數R執行執行X流水線操作流水線操作 在第一個機器在第一個機器周期用周期用PCPC中的中的內容加載內容加載PABPAB 在第二個機器周在第二個機器周期用讀取到的指期用讀取到的指令字加載令字加載PBPB。 第三個

45、周期用第三個周期用PBPB的內容加載的內容加載指令寄存器指令寄存器IRIR,對,對IRIR內的指內的指令進行譯碼,產生執行指令令進行譯碼,產生執行指令所需要的一系列控制信號。所需要的一系列控制信號。 45預取指預取指P取指取指F譯碼譯碼D尋址尋址A讀取操作數讀取操作數R執行執行X流水線操作流水線操作 用數據用數據1 1讀地址加載讀地址加載DABDAB,或用數據讀地,或用數據讀地址加載址加載CABCAB,修正輔助,修正輔助寄存器和堆棧指針。寄存器和堆棧指針。讀數據讀數據1 1加載加載DBDB,或讀數,或讀數據據2 2加載加載CBCB;用數據;用數據3 3寫寫地址加載到地址加載到EABEAB,以便

46、在,以便在流水線的最后一級將數流水線的最后一級將數據送到數據存儲空間。據送到數據存儲空間。 執行指令,或用執行指令,或用寫數據加載寫數據加載EBEB。 46空轉浪費周期空轉浪費周期1延遲分支轉移的流水線圖延遲分支轉移的流水線圖 無延遲流水線分支轉移的問題無延遲流水線分支轉移的問題地址地址 指令指令a1a1,a2 a2 B b1 B b1 這是一個四周期、二字分支指令這是一個四周期、二字分支指令a3 a3 i3 i3 這是任意的一周期、一字指令這是任意的一周期、一字指令a4 a4 i4 i4 這是任意的一周期、一字指令這是任意的一周期、一字指令b1 j1b1 j1例例3-73-747分支轉移指令

47、流水線圖分支轉移指令流水線圖用分支轉移用分支轉移指令的地址指令的地址a1a1加載加載PABPAB。 取得雙字分取得雙字分支轉移指令支轉移指令取得雙字分取得雙字分支轉移指令支轉移指令48分支轉移指令流水線圖分支轉移指令流水線圖分支轉移指令分支轉移指令進入譯碼級進入譯碼級用新的值用新的值b1b1加載加載PABPABi3i3和和i4i4指令取指。指令取指。由于這兩條指令由于這兩條指令處在分支轉移指處在分支轉移指令的后面,雖然令的后面,雖然已經取指,但不已經取指,但不能進入譯碼級,能進入譯碼級,且最終被丟棄。且最終被丟棄。 i3i3和和i4i4指令取指。指令取指。由于這兩條指令由于這兩條指令處在分支轉

48、移指處在分支轉移指令的后面,雖然令的后面,雖然已經取指,但不已經取指,但不能進入譯碼級,能進入譯碼級,且最終被丟棄。且最終被丟棄。 49分支轉移指令流水線圖分支轉移指令流水線圖j1j1指令取指指令取指 雙字分支轉移雙字分支轉移指令進入流水指令進入流水線的執行級線的執行級 執行執行j1j1指令指令 雙字分支轉移雙字分支轉移指令進入流水指令進入流水線的執行級線的執行級 由于由于i3i3和和i4i4指令指令是不允許執行的是不允許執行的,所以這兩個周,所以這兩個周期均花在分支轉期均花在分支轉移指令的執行上移指令的執行上。由于由于i3i3和和i4i4指指令是不允許執令是不允許執行的,所以這行的,所以這兩

49、個周期均花兩個周期均花在分支轉移指在分支轉移指令的執行上。令的執行上。50允許跟在延遲分支允許跟在延遲分支轉移指令之后的兩轉移指令之后的兩條單字條單字或一條雙字或一條雙字指令可以被執行指令可以被執行 延遲分支轉移延遲分支轉移注意注意1.1.延遲操作指令后面只有兩個字的空延遲操作指令后面只有兩個字的空 隙,因此不能在此空隙中安排任何隙,因此不能在此空隙中安排任何 一類分支轉移指令或重復指令;一類分支轉移指令或重復指令;2.2.在在CALLDCALLD或或RETDRETD的空隙中還不能安的空隙中還不能安 排排PUSHPUSH和和POPPOP指令。指令。3 3. .延遲操作指令比它們的非延遲型延遲操

50、作指令比它們的非延遲型 指令要快,在調試延遲型指令時,指令要快,在調試延遲型指令時, 直觀性稍差一些,因此希望在大多直觀性稍差一些,因此希望在大多 數情況下還是采用非延遲型指令。數情況下還是采用非延遲型指令。 51例例3-8 在完成在完成R=R=(x+yx+y)* *z z操作后轉至操作后轉至nextnext??梢苑謩e編出如下兩段程序:可以分別編出如下兩段程序:利用普通分支轉移指令利用普通分支轉移指令B B 利用延遲分支轉移指令利用延遲分支轉移指令BDBDLD xLD x,A LD xA LD x,A AADD yADD y,A ADD yA ADD y,A ASTL ASTL A, s ST

51、L As STL A, ssLD sLD s,T LD sT LD s,T TMPY zMPY z,A BD next A BD next STL ASTL A, r MPY zr MPY z,A A B next STL AB next STL A, rr(共(共8 8個字,個字,1010個個T T) (共(共8 8個字,個字,8 8個個T T)在空閑的隨后兩周期在空閑的隨后兩周期中執行下兩條指令中執行下兩條指令52XC nXC n,cndcnd,cndcnd,cndcnd 如果條件滿足,則執如果條件滿足,則執行下面行下面n n(n=1n=1或或2 2)條指令,)條指令,否則下面否則下面n

52、n條指令改為執行條指令改為執行n n條條NOPNOP指令。指令。 2條件執行指令的流水線圖條件執行指令的流水線圖 條件執行指令條件執行指令XC 有下列程序:有下列程序:地址地址 指令指令a1 i1a1 i1a2 i2a2 i2a3 i3a3 i3a4 XC 2a4 XC 2, condconda5 i5a5 i5a6 i6 a6 i6 53條件執行指令流水線圖條件執行指令流水線圖XCXC指令的地址指令的地址a4a4加載到加載到PAB PAB 取取 X CX C 指 令指 令的操作碼的操作碼 求解求解XCXC指令所規定的條件。如果條件滿指令所規定的條件。如果條件滿足,則后面指令足,則后面指令i5

53、i5和和i6i6進入譯碼級并執進入譯碼級并執行;否則不對行;否則不對i5i5和和i6i6指令譯碼。指令譯碼。541. 1. XCXC是一條單字單周期指令,與條件跳是一條單字單周期指令,與條件跳 轉指令相比,具有快速選擇其后轉指令相比,具有快速選擇其后1 1或或2 2 條指令是否執行的優點條指令是否執行的優點 ;2. XC2. XC指令在執行前指令在執行前2 2個周期就已經求出個周期就已經求出 條件,如果在這之后到執行前改變條條件,如果在這之后到執行前改變條 件(如發生中斷),將會造成無期望件(如發生中斷),將會造成無期望 的結果的結果 。3 3. . 要盡力避免在要盡力避免在XCXC指令執行前

54、指令執行前2 2個周期個周期 改變所規定的條件改變所規定的條件 。 注注意意55共用總線、存儲器、共用總線、存儲器、數據未準備好數據未準備好3流水線沖突流水線沖突 流水線沖突原因流水線沖突原因不會產生流水線沖突的情況不會產生流水線沖突的情況(1 1)在單周期內允許同時訪問)在單周期內允許同時訪問DARAMDARAM的不同塊。的不同塊。(2 2)當流水線中的一條指令訪問某一存儲器塊時,)當流水線中的一條指令訪問某一存儲器塊時,允許流水線中處于同一級的另一條指令訪問允許流水線中處于同一級的另一條指令訪問另一個存儲器塊。另一個存儲器塊。56是利用一次訪問中對是利用一次訪問中對前、后半個周期分時前、后

55、半個周期分時進行訪問的緣故。進行訪問的緣故。CPU能夠在單周期能夠在單周期內對內對DARAM進行進行兩次訪問兩次訪問而不沖突而不沖突 對對PAB/PBPAB/PB取指取指 利用前半周期利用前半周期對對DAB/DBDAB/DB讀取第一個數據讀取第一個數據 利用前半周期利用前半周期對對CAB/CBCAB/CB讀取第二個數據讀取第二個數據 利用后半周期利用后半周期對對EAB/EBEAB/EB將數據寫存儲器將數據寫存儲器 利用后半周期利用后半周期57解決解決沖突沖突辦法辦法人為合理安排指令,人為合理安排指令,錯開訪問時序錯開訪問時序 CPUCPU通過寫操作延遲一個周通過寫操作延遲一個周期,或者通過插入

56、一個空周期,或者通過插入一個空周期的辦法,自動地解決期的辦法,自動地解決 CPUCPU同時訪問同時訪問DARAMDARAM的同一存儲器塊就會發生時的同一存儲器塊就會發生時序上的沖突的情況:序上的沖突的情況:同時從同一存儲器塊中取指和取操作數(都在同時從同一存儲器塊中取指和取操作數(都在前半個周期);前半個周期);同時對同一存儲器塊進行寫操作和讀(第二個同時對同一存儲器塊進行寫操作和讀(第二個數)操作(都在后半周期)。數)操作(都在后半周期)。58從從DARAMDARAM塊中同時取指和取操作數塊中同時取指和取操作數沖突沖突延遲一個周期延遲一個周期 594解決流水線沖突的方法解決流水線沖突的方法

57、(1)可能發生流水線沖突的情況)可能發生流水線沖突的情況 1) 1) 輔助寄存器(輔助寄存器(AR0AR0AR7AR7)。)。2) 2) 重復塊長度寄存器(重復塊長度寄存器(BKBK)。)。3) 3) 堆棧指針。堆棧指針。4) 4) 暫存器(暫存器(T T)。)。5) 5) 處理器工作方式狀態寄存器(處理器工作方式狀態寄存器(PMSTPMST)。)。6) 6) 狀態寄存器(狀態寄存器(ST0ST0和和ST1ST1)。)。7 7)塊重復計數器()塊重復計數器(BRCBRC)。)。8 8)存儲器映象累加器()存儲器映象累加器(AGAG、AHAH、ALAL、BGBG、BHBH、BLBL)。)。存存儲

58、儲器器沖沖突突 60流水線沖突情況分析流水線沖突情況分析61發生流水線沖突的發生流水線沖突的例子例子 在流水線的執行在流水線的執行階段進行寫操作階段進行寫操作 在流水線的尋址在流水線的尋址階段生成地址階段生成地址 無等待周期問題無等待周期問題 解決解決沖突沖突數據未準備好數據未準備好數據數據未準未準備好備好沖突沖突 62發生流水線沖突的發生流水線沖突的例子例子 在 流 水 線 的在 流 水 線 的執 行 階 段 進執 行 階 段 進行寫操作行寫操作 讀 數 階 段讀 數 階 段將 常 數將 常 數 1 01 0寫到寫到AR1AR1 沖突沖突同時利用同時利用E E總線總線CPUCPU自動地自動地

59、將將STMSTM的寫的寫操作延遲操作延遲一個周期一個周期 在流水線的尋址在流水線的尋址階段生成地址階段生成地址 新沖突新沖突數據未準備好數據未準備好解決解決總線總線沖突沖突 63發生流水線沖突的發生流水線沖突的例子例子 STLMSTLM指令后指令后面 插 入 一 條面 插 入 一 條NOPNOP指令指令 在流水線的在流水線的執行階段進執行階段進行寫操作行寫操作讀 數 階 段讀 數 階 段將常數將常數1010寫到寫到AR1AR1在流水線的尋址在流水線的尋址階段生成地址階段生成地址 E E總線總線錯開錯開解決解決數據準備好數據準備好解決解決64(2)用等待周期表解決流水線沖突)用等待周期表解決流水

60、線沖突 等待周期表給出了對存儲器映象寄存器以及等待周期表給出了對存儲器映象寄存器以及ST0ST0、ST1ST1、PMSTPMST的的控制字段進行寫操作的各種控制字段進行寫操作的各種指令所需插入的等待周期。指令所需插入的等待周期。對雙字或三字指令,都會提供隱含的保護周對雙字或三字指令,都會提供隱含的保護周期。利用這些指令提供的隱含的保護周期,有時期。利用這些指令提供的隱含的保護周期,有時可以不插可以不插NOPNOP指令。指令。65控制字段控制字段不插入不插入插入插入1 1個個插入插入2 2個個T TSTM #1kSTM #1k, T TMVDK SmemMVDK Smem,T TLD SmemL

溫馨提示

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

評論

0/150

提交評論