第2章 CPU結(jié)構(gòu)與指令集_第1頁(yè)
第2章 CPU結(jié)構(gòu)與指令集_第2頁(yè)
第2章 CPU結(jié)構(gòu)與指令集_第3頁(yè)
第2章 CPU結(jié)構(gòu)與指令集_第4頁(yè)
第2章 CPU結(jié)構(gòu)與指令集_第5頁(yè)
已閱讀5頁(yè),還剩178頁(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)介

第二章CPU結(jié)構(gòu)與指令集第二章CPU結(jié)構(gòu)與指令集2.1CPU結(jié)構(gòu)2.2存儲(chǔ)器映射2.3匯編指令集

2.4流水線

2.5中斷

2.1.1中央處理單元(CPU)結(jié)構(gòu)程序取指單元指令分配單元指令譯碼單元程序執(zhí)行機(jī)構(gòu)程序總線讀取與存儲(chǔ)數(shù)據(jù)總線CPU包括哈佛結(jié)構(gòu),程序總線與數(shù)據(jù)總線分開(kāi)程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器分開(kāi)

取指包的寬度?定長(zhǎng)指令集,指令的寬度是固定的除讀取、存儲(chǔ)、跳轉(zhuǎn)指令外,其他指令均以通用寄存器為源操作數(shù)和目的操作數(shù),使程序能夠高速運(yùn)行?2.1.2CPU數(shù)據(jù)通道與控制2個(gè)通用寄存器組(A和B),每組包括32個(gè)寄存器8個(gè)功能單元(.L1、.L2、.S1、.S2、.M1、.M2、.D1、.D2)

2個(gè)數(shù)據(jù)讀取通路(LD1和LD2),每側(cè)有2個(gè)32位讀取總線2個(gè)數(shù)據(jù)存儲(chǔ)通路(ST1和ST2),每側(cè)有1個(gè)32位存儲(chǔ)總線2個(gè)寄存器組交叉通路(1x和2x)2個(gè)數(shù)據(jù)尋址通路(DA1和DA2)1.通用寄存器組功能

存放數(shù)據(jù),作為指令的源操作數(shù)和目的操作數(shù)。注意傳送方向和數(shù)據(jù)字長(zhǎng)作為間接尋址的地址指針,寄存器A4~A7和B4~B7還能夠以循環(huán)尋址方式工作

A1、A2、B0、B1和B2可用做條件寄存器A1:A0A3:A2…A29:A28A31:A30oddeven:32840-bitRegB1:B0B3:B2…B29:B28B31:B30oddeven:32840-bitReg寄存器對(duì)配對(duì)規(guī)則Theregistersmustbefromthesameside.Thefirstregistermustbeevenandthesecondodd.Theregistersmustbeconsecutive.40位數(shù)據(jù)在寄存器對(duì)中的存儲(chǔ)方式2.功能單元功能單元定點(diǎn)操作浮點(diǎn)操作.L單元32/40位算術(shù)和比較操作32-位最左邊1或0的位數(shù)計(jì)數(shù)32位和40位歸一化操作32位邏輯操作算術(shù)操作數(shù)據(jù)類型轉(zhuǎn)換操作DP→SPINT→DP,INT→SP.S單元32位算術(shù)操作32/40位移位和32位位域操作32位邏輯操作轉(zhuǎn)移常數(shù)產(chǎn)生寄存器與控制器數(shù)據(jù)傳遞(僅.S2)比較倒數(shù)和倒數(shù)平方根操作絕對(duì)值操作SP→DP數(shù)據(jù)類型轉(zhuǎn)換.M單元16×16位乘法操作32×32乘法操作浮點(diǎn)乘法操作.D單元32-位加、減、線性及循環(huán)尋址計(jì)算帶5位常數(shù)偏移量的字讀取與存儲(chǔ)帶15位常數(shù)偏移量的字讀取與存儲(chǔ)(僅.D2)帶5位常數(shù)偏移量的雙字讀取3.寄存器組交叉通路.L1、.S1、.D1和.M1可以直接讀寫(xiě)寄存器組A

.L2、.S2、.D2和.M2可以直接讀寫(xiě)寄存器組B

1x交叉通路允許數(shù)據(jù)通道A的功能單元從寄存器組B讀它的源操作數(shù)

2x交叉通路允許數(shù)據(jù)通道B的功能單元從寄存器組A讀它的源操作數(shù)4.數(shù)據(jù)存儲(chǔ)器及讀取存儲(chǔ)通路(Load指令)寄存器組A的讀入通路為L(zhǎng)D1(2個(gè)32位)

寄存器組B的讀入通路為L(zhǎng)D2(2個(gè)32位)

LDDW指令一次可讀取64位數(shù)據(jù)到A或B寄存器

(Store指令)寄存器組A的寫(xiě)數(shù)據(jù)通路為ST1寄存器組B的寫(xiě)數(shù)據(jù)通路為ST25.數(shù)據(jù)地址通路數(shù)據(jù)地址通路DA1和DA2來(lái)自.D功能單元

數(shù)據(jù)通道以T1、T2表示

LDW.D1T2*A0[3],B1D1產(chǎn)生地址,用LD2數(shù)據(jù)通道讀入數(shù)據(jù)到B1寄存器6.控制寄存器組縮寫(xiě)寄存器名描述AMR尋址模式寄存器指定是否使用線性或循環(huán)尋址。如果是循環(huán)尋址,還包括循環(huán)尋址的尺寸CSR控制狀態(tài)寄存器包括全局中斷使能位,高速緩沖存儲(chǔ)器控制位和其他各種控制和狀態(tài)位FADCR浮點(diǎn)加法配置寄存器指定.L單元的溢出方式,舍入方式,記錄NaN及其他異常FAUCR浮點(diǎn)輔助配置寄存器記錄.S單元NaN及其他異常FMCR浮點(diǎn)乘法配置寄存器指定.M單元的溢出方式,舍入方式,記錄NaN及其他異常ICR中斷清除寄存器允許軟件清除掛起的中斷IER中斷使能寄存器允許使能/禁止個(gè)別中斷IFR中斷標(biāo)志寄存器顯示中斷狀態(tài)IRP中斷返回指針保存從可屏蔽中斷返回時(shí)的地址ISR中斷設(shè)置寄存器允許軟件控制設(shè)置中斷ISTP中斷服務(wù)表指針指向中斷服務(wù)表的起始地址NRP不可能屏蔽中斷返回指針保存從不可屏蔽中斷返回時(shí)的地址PCE1程序計(jì)數(shù)器保存處于流水線E1節(jié)拍的取指包地址尋址模式寄存器(AMR)模式描述00線性尋址(復(fù)位后默認(rèn)值)01循環(huán)尋址使用BK0字段10循環(huán)尋址使用BK1字段11保留位字段名功能15?10PWRD控制低功耗模式,該值讀時(shí)總為零9SAT飽和位。任一功能單元執(zhí)行一個(gè)飽和操作時(shí)被置1,飽和位只能用MVC指令清零,被功能單元飽和操作置位。當(dāng)清除和置位在同一周期內(nèi)發(fā)生時(shí),功能單元對(duì)它的置位優(yōu)先。飽和位在飽和發(fā)生后一個(gè)周期被置位8EN端結(jié)方式:1=小端終結(jié),0=大端終結(jié)7?5PCCPCC程序高速緩沖存儲(chǔ)器控制模式4?2DCC數(shù)據(jù)高速緩沖存儲(chǔ)器控制模式1PGIE當(dāng)一個(gè)中斷發(fā)生時(shí),保存以前的全局中斷使能位GIE0GIE全局中斷使能位,它控制除復(fù)位和不可屏蔽中斷之外的所有可屏蔽中斷使能:GIE=1時(shí),可屏蔽中斷使能:GIE=0時(shí),可屏蔽中斷禁止控制狀態(tài)寄存器(CSR)2.2存儲(chǔ)器映射(統(tǒng)一編址)描述區(qū)域大小(字節(jié))起始地址終止地址內(nèi)部RAM(L2)192K0x000000000x0002FFFF內(nèi)部RAM/Cache64K0x000300000x0003FFFFEMIF寄存器256K0x018000000x0183FFFFL2寄存器128K0x018400000x0185FFFFHPI寄存器256K0x018800000x018BFFFFMcBSP0寄存器256K0x018C00000x018FFFFFMcBSP1寄存器256K0x019000000x0193FFFFTimer0寄存器256K0x019400000x0197FFFFTimer1寄存器256K0x019800000x019BFFFF中斷選擇寄存器5120x019C00000x019C01FF設(shè)備配置寄存器40x019C02000x019C0203EDMARAMandEDMA寄存器256K0x01A000000x01A3FFFFGPIO寄存器16K0x01B000000x01B03FFFI2C0寄存器16K0x01B400000x01B43FFFI2C1寄存器16K0x01B440000x01B47FFFMcASP0寄存器16K0x01B4C0000x01B4FFFFPLL寄存器8K0x01B7C0000x01B7DFFFQDMA寄存器520x020000000x02000033McBSP0數(shù)據(jù)端口64M0x300000000x33FFFFFFEMIFCE0(SDRAM空間)256M0x800000000x8FFFFFFFEMIFCE1(Flash空間)256M0x900000000x9FFFFFFFEMIFCE2256M0xA00000000xAFFFFFFFEMIFCE3256M0xB00000000xBFFFFFFF0000000000000004000000080000000C00000010AddressFFFFFFFFData32-bits029009413210019011A0001467A1038C6F5832-bits存儲(chǔ)器結(jié)構(gòu)2.3匯編指令集2.2.1指令集概述

1.指令和功能單元之間的映射

指令功能單元

乘法相關(guān)的指令都是在.M單元執(zhí)行

產(chǎn)生數(shù)據(jù)存儲(chǔ)器地址的指令在.D功能單元

算術(shù)邏輯運(yùn)算大多在.L與.S單元執(zhí)行2.延遲間隙指令的執(zhí)行速度可以用延遲間隙來(lái)說(shuō)明,延遲間隙在數(shù)量上等于從指令的源操作數(shù)被讀取直到執(zhí)行的結(jié)果可以被訪問(wèn)所需要的指令周期數(shù)。指令類型延遲間隙功能單元等待時(shí)間讀周期寫(xiě)周期單周期01ii2周期DP11ii,i+1DP比較12i,i+11+14周期31ii+3INT到DP轉(zhuǎn)換41ii+3,i+4讀取Load41ii,i+4MPYSP2DP42ii+3,i+4ADDDP/SUBDP62i,i+1i+5,i+6MPYSPDP63i,i+1i+5,i+6MPYI84i,i+1,1+2,i+3i+8MPYID94i,i+1,1+2,i+3i+8,i+9MPYDP94i,i+1,1+2,i+3i+8,i+93.指令操作碼映射圖代碼段說(shuō)明creg指定條件寄存器的代碼z指定條件src,dst分別指定源及目的操作數(shù)代碼x指定源操作數(shù)2是否使用交叉通道op指令操作代碼s選擇寄存器組A或B作為目的操作數(shù)p指定是否并行執(zhí)行CPU運(yùn)行時(shí),總是一次取8條指令,組成一個(gè)取指包(256位邊界定位),所有并行執(zhí)行的指令組成一個(gè)執(zhí)行包

周期/執(zhí)行包指令1A2B3CDE4FGH4.并行操作跳轉(zhuǎn)指令EP可能的3種形式:完全串行、完全并行、部分串行4.并行操作

3位操作碼字段creg指定條件寄存器

1位字段z指定是零測(cè)試還是非零測(cè)試

z=1,進(jìn)行零測(cè)試,即條件寄存器的內(nèi)容為0是真

z=0,進(jìn)行非零測(cè)試,即條件寄存器的內(nèi)容非0是真

creg=0,z=0,則指令將無(wú)條件地執(zhí)行

條件寄存器:A1、A2、B0、B1和B2[B0]ADD.L1A1,A2,A3||[!B0]ADD.L2B1,B2,B3以上2條指令相互排斥,只有一條指令被執(zhí)行

5.條件操作6.地址邊界調(diào)整(alignment)及終結(jié)方式(Endian)半字邊界:16位數(shù)的存放地址必須從偶數(shù)開(kāi)始,地址最低位為0字邊界:32位數(shù)的存放地址必須從偶數(shù)開(kāi)始,地址最低位為00C6000以半字或字的最低位地址代表存儲(chǔ)單元地址在開(kāi)辟數(shù)據(jù)或變量存儲(chǔ)區(qū)時(shí),需根據(jù)數(shù)據(jù)類型調(diào)整地址起始點(diǎn),稱為地址邊界調(diào)整Endian是指多字節(jié)數(shù)據(jù)內(nèi)部高低有效位的存放次序,分為:Little-Endian,Big-EndianLittle-Endian:數(shù)據(jù)的高字節(jié)存放在高地址數(shù)存 數(shù)據(jù)的低字節(jié)存放在低地址數(shù)存Big-Endian:數(shù)據(jù)的低字節(jié)存放在高地址數(shù)存 數(shù)據(jù)的高字節(jié)存放在低地址數(shù)存大小端位由DSP的LENDIAN管腳設(shè)置BAh98h76h54h54h76h98hBAh 地址 1000h 1001h 1002h 1003hBigLittle指令地址最低位D1D0Big時(shí)寄存器結(jié)果Little時(shí)寄存器結(jié)果LDW00BA987654hBA987654hLDH00FFFFBA98h00007654hLDHU000000BA98h00007654hLDH1000007654hFFFFBA98hEndian對(duì)數(shù)據(jù)讀取、存放的影響設(shè):(DM1000h)=BA987654h不同Endiand下的數(shù)據(jù)存放如右圖不同Endiand下執(zhí)行Load指令后寄存器的內(nèi)容如下圖Endian對(duì)數(shù)據(jù)讀取、存放的影響設(shè):(DM1000h)=01121970h (GR)=BA987654h不同Endian下的DM數(shù)據(jù)存放如右圖不同Endian下執(zhí)行Store指令后數(shù)據(jù)存儲(chǔ)器的內(nèi)容如下圖

01h12h19h70h70h19h12h01h 地址 1000h 1001h 1002h 1003hBigLittle指令地址最低位D1D0Big時(shí)寄存器結(jié)果Little時(shí)寄存器結(jié)果STW00BA987654hBA987654hSTH0076541970h01127654hSTH1001127654h76541970h2.2.2尋址方式尋址方式指CPU如何訪問(wèn)數(shù)存空間C6000全部采用間接尋址,分為: 線性尋址linearaddressing

循環(huán)尋址circularaddressingAllregisterscanperformlinearaddressingOnlyeightregisterscanperformcircularaddressing:A4–A7areusedbythe.D1unitandB4–B7areusedbythe.D2unit.由尋址模式寄存器AMR控制地址修改方式2.2.2尋址方式

所有寄存器都可以做線性尋址的地址指針

循環(huán)尋址的地址指針:A4-A7,B4-B7

由AMR控制地址修改方式:線性方式或循環(huán)方式

BK0、BK1各5-bit用于計(jì)算循環(huán)尋址時(shí)循環(huán)塊的尺寸.循環(huán)塊尺寸(inbytes)=2N+1N是BK0或BK1內(nèi)的5-bit值例如:N的二進(jìn)制數(shù)為10000,等于十進(jìn)制16,則塊尺寸=2(16+1)=131072字節(jié)C6000DSP匯編指令分類讀取/存儲(chǔ)類指令 算術(shù)運(yùn)算類指令邏輯與位操作類指令搬移類指令程序轉(zhuǎn)移類指令

空操作類指令浮點(diǎn)操作類指令2.2.3讀取/存儲(chǔ)類指令讀取指令:LDB/LDBU/LDH/LDHU/LDW/LDDW

(DM)→通用寄存器

存儲(chǔ)指令:STB/STH/STW通用寄存器→(DM)

兩種尋址方式:線性或循環(huán)僅通過(guò).D進(jìn)行

有符號(hào)/無(wú)符號(hào)(U),符號(hào)位的擴(kuò)展不同

地址偏移修正因子:LDB(U)/LDH(U)/LDW指令分別讀入字節(jié)/半字/字,要乘以相應(yīng)的比例因子1、2、4

2.2.3讀取/存儲(chǔ)類指令例2-1線性尋址下的變址計(jì)算

LDW.D1*++A4[1],A6

此例為先修改地址,地址偏移量按1×4計(jì)算,計(jì)算結(jié)果如下圖所示:示例02012.2.3讀取/存儲(chǔ)類指令例2-2循環(huán)尋址方式下的地址計(jì)算

LDW.D1*++A4[9],A1

此處假設(shè)尋址模式寄存器AMR=0x00030001,A4已被設(shè)定為循環(huán)尋址方式,塊字節(jié)尺寸為24=16=10h(N=3)。因?yàn)槭且宰譃閱挝蛔x取,變址偏移量為9×4=36=24h。線件尋址時(shí)地址應(yīng)為00000124h;循外尋址時(shí),24h對(duì)低4位(第0-3位)地址10h取模,余數(shù)為4,故實(shí)際尋址地址為00000104h。

示例02022.2.4算術(shù)運(yùn)算類指令加/減運(yùn)算指令

ADD/SUB:不帶飽和的有符號(hào)的整型(32位)或長(zhǎng)整形(40位)加法/減法

ADDU/SUBU:不帶飽和的無(wú)符號(hào)的整型加法/減法

SADD/SSUB:帶飽和的有符號(hào)的整型加法/減法

ADDK:與16位常數(shù)相加

ADD2/SUB2:同時(shí)進(jìn)行2個(gè)16位補(bǔ)碼數(shù)加/減

ADDAB/ADDAH/ADDAW/SUBAB/SUBAH/SUBAW:使用尋址方式的整型加/減溢出問(wèn)題如果運(yùn)算結(jié)果超出目的操作數(shù)字長(zhǎng)所能表示的范圍,造成運(yùn)算結(jié)果的高位丟失,使保存的運(yùn)算結(jié)果不正確,稱為溢出。通常有3種辦法解決溢出問(wèn)題(1)用較長(zhǎng)的字長(zhǎng)來(lái)存放運(yùn)算結(jié)果:1632可行,3240耗時(shí)(2)用帶飽和的加減運(yùn)算指令做補(bǔ)碼數(shù)加減運(yùn)算:保證符號(hào)不變,并且給出提示位(3)對(duì)整個(gè)系統(tǒng)乘一個(gè)小于1的比例因子:實(shí)際中最常用2.2.4算術(shù)運(yùn)算類指令2.2.4算術(shù)運(yùn)算類指令例2-3減法運(yùn)算舉例SSUB.L2B1,B2,B3

SUB.L2B1,B2,B3SUB.L2B1,B2,B5:B4示例0203溢出了!符號(hào)位在這里無(wú)溢出!0x5A2E51A3-0x802A3FA2=0xDA0412012.2.4算術(shù)運(yùn)算類指令例2-4計(jì)算累加和的程序,用40位長(zhǎng)型數(shù)存放求和結(jié)果,有8位保護(hù)位,示例0204Loop:LDW.D1*A4++,A0NOP4ADD.L1A3:A2,A0,A3:A2SUB.L2B1,1,B1[B1]B.S1LoopNOP5

2.2.4算術(shù)運(yùn)算類指令例2-5按尋址方式的加法運(yùn)算指令

ADDAH.D1A4,A2,A4B×2=16h對(duì)8取余得6示例02052.2.4算術(shù)運(yùn)算類指令例2-6按尋址方式的減法運(yùn)算指令

SUBAB.D1A5,A0,A5-4×1=-4h對(duì)10h取余得C示例02052.2.4算術(shù)運(yùn)算類指令乘法類:全部在.M中完成MPY 有符號(hào)16×有符號(hào)16=32位有符號(hào)MPYU 無(wú)符號(hào)16×無(wú)符號(hào)16=32位無(wú)符號(hào)MPYUS 無(wú)符號(hào)16×有符號(hào)16=32位有符號(hào)MPYSU 有符號(hào)16×無(wú)符號(hào)16=32位有符號(hào)MPYHL 有符號(hào)高16×有符號(hào)低16=32位有符號(hào)MPYHLU 無(wú)符號(hào)高16×無(wú)符號(hào)低16=32位無(wú)符號(hào)MPYHULS 無(wú)符號(hào)高16×有符號(hào)低16=32位有符號(hào)MPYHSLU 有符號(hào)高16×無(wú)符號(hào)低16=32位有符號(hào)MPYLH 有符號(hào)低16×有符號(hào)高16=32位有符號(hào)MPYLHU 無(wú)符號(hào)低16×無(wú)符號(hào)高16=32位無(wú)符號(hào)MPYLUHS 無(wú)符號(hào)低16×有符號(hào)高16=32位有符號(hào)MPYLSHU 有符號(hào)低16×無(wú)符號(hào)高16=32位有符號(hào)SMPY SMPYHL 帶飽和乘積處理的乘法SMPYLHSMPYH以16×16位的硬件乘法器為基礎(chǔ),整數(shù)乘法的2個(gè)源操作數(shù)都是16位字長(zhǎng),目的操作數(shù)為32的寄存器,不存在溢出問(wèn)題。以MPY為首字母的22條指令適宜于整數(shù)乘法

適宜于Q格式數(shù)相乘2.2.4算術(shù)運(yùn)算類指令例2-7整數(shù)乘法運(yùn)算

(1)MPYH.M1A1,A2,A3

(2)MPYHU.M1A1,A2,A3

示例0207符號(hào)位擴(kuò)展無(wú)符號(hào)數(shù)定點(diǎn)數(shù)及定標(biāo)計(jì)算機(jī)有兩種主要的數(shù)據(jù)表示方法:

定點(diǎn)數(shù)表示法浮點(diǎn)數(shù)表示法定點(diǎn)數(shù)就是小數(shù)點(diǎn)位置固定的數(shù)。數(shù)據(jù)的表示形式是:

符號(hào)位整數(shù)部分.小數(shù)部分浮點(diǎn)數(shù)就是用科學(xué)計(jì)數(shù)法表示一個(gè)數(shù)據(jù),是小數(shù)點(diǎn)的位置可按數(shù)值大小自動(dòng)變化的數(shù)據(jù)。定標(biāo)CPU在執(zhí)行指令時(shí),并不知道處理的數(shù)據(jù)是整數(shù)還是小數(shù),也不能指出小數(shù)點(diǎn)的位置。在編程時(shí)必須由程序員指出一個(gè)數(shù)的小數(shù)點(diǎn)處于哪一位,這就是定標(biāo)的概念。

常用的定標(biāo)方法是Q表示法,Q表示法用Q0、Q1、…Qi、…、Q15分別表示小數(shù)點(diǎn)在D0位之后、D1位之后、…Di位之后、…D15位之后。

如何定標(biāo)對(duì)于16位DSP來(lái)說(shuō),可以把小數(shù)點(diǎn)固定在D0~D15的任一位之后:若固定在最高位D15之后,則該數(shù)值是有符號(hào)小數(shù);若小數(shù)點(diǎn)固定在最低位D0后,則該數(shù)值是有符號(hào)整數(shù);若小數(shù)點(diǎn)放在位D1~D14的任意一位之后,則該數(shù)值就是有符號(hào)混合小數(shù),它可含有i個(gè)整數(shù)位和15–i個(gè)小數(shù)位。若對(duì)于32位DSP來(lái)說(shuō),可以把小數(shù)點(diǎn)固定在D0~D31中的任一位之后,這就是數(shù)的定標(biāo)。定標(biāo)格式定標(biāo)分為Q表示法和S表示法兩種,形式不同,實(shí)質(zhì)相同。QX的x值表示小數(shù)點(diǎn)在位Dx之后,即16位中有x個(gè)小數(shù)位和(15-x)個(gè)整數(shù)位,x值還決定了所表示數(shù)的精度為2-x。同樣一個(gè)16位數(shù),因?yàn)樾?shù)點(diǎn)的設(shè)定位置不同,它所表示的數(shù)就不同。例如:在Q15中:1080H=0.001000010000000=2-3+2-8=0.12890625(10)在Q0中:1080H=0001000010000000.=212+27=4224(10)

在Q7中:1080H=000100001.0000000=25+20=33(10)x值不同,則16位數(shù)的表示范圍和精度也就不同。x值越大,數(shù)值范圍越小,但精度越高;相反,x值越小,則數(shù)值范圍越大,但精度越低。數(shù)值范圍與精度是一對(duì)矛盾,一個(gè)變量要想能表示較大的數(shù)值范圍,必須以犧牲精度為代價(jià);而想提高精度,則數(shù)的表示范圍就相應(yīng)地減小。為了防止異常或溢出,應(yīng)該將Q值取低,即將數(shù)據(jù)格式放大。Q定標(biāo)QX值的確定例如:已知變量絕對(duì)值的最大值=129.65,∵27<129.65<28,n=8∴x=15-8=7,取QX=Q7變量絕對(duì)值的最大值|max|的確定為了確定一個(gè)合適的QX值,必須確定變量的最大值。通常,確定的方法有兩個(gè):理論分析法和條件分析法。所謂理論分析法是指有些變量的動(dòng)態(tài)范圍可以通過(guò)理論分析來(lái)確定,如三角函數(shù)Y=sinX和Y=cosX的函數(shù)值≤1;8位A/D轉(zhuǎn)換的結(jié)果總是≤FFH。對(duì)于理論上無(wú)法確定范圍的變量,應(yīng)采用統(tǒng)計(jì)分析法來(lái)確定其動(dòng)態(tài)范圍,即用足夠多的輸入信號(hào)樣值來(lái)確定程序中變量的動(dòng)態(tài)范圍,盡可能的包含各種情況和狀態(tài)。統(tǒng)計(jì)分析法也不可能涉及所有可能發(fā)生的情況,因此,在定點(diǎn)運(yùn)算的過(guò)程中必須采取一些判斷和保護(hù)措施。浮點(diǎn)數(shù)與定點(diǎn)數(shù)的轉(zhuǎn)換關(guān)系DSP定點(diǎn)算術(shù)運(yùn)算一般情況下,應(yīng)盡量采用純整數(shù)運(yùn)算或純小數(shù)運(yùn)算,即全部變量都用Q0格式表示,或全部變量都用Q15格式表示

DSP定點(diǎn)加法: Q0+Q0=Q0, Q15+Q15=Q15

Qm+Qn=Qm,必須m=nDSP定點(diǎn)乘法: Q0×Q0=Q0 Q15×Q15=Q30

Qm×Qn=Qm+n基本算術(shù)運(yùn)算的定點(diǎn)實(shí)現(xiàn)—C語(yǔ)言(1)加法/減法運(yùn)算的C語(yǔ)言定點(diǎn)實(shí)現(xiàn)(Qm=Qm

±Qm)浮點(diǎn)數(shù)的加法和減法運(yùn)算的C語(yǔ)言實(shí)現(xiàn)為:voidfloat_add(floatx,floaty)

{

floatz;

z=x+y;

}voidfloat_sub(floatx,floaty)

{

floatz;

z=x-y;

}將浮點(diǎn)加法/減法轉(zhuǎn)化為定點(diǎn)加法/減法時(shí)最重要的一點(diǎn)就是必須保證兩個(gè)操作數(shù)的定標(biāo)值一樣。若兩者不一樣,則在做加法/減法運(yùn)算前先進(jìn)行小數(shù)點(diǎn)的調(diào)整。為保證運(yùn)算精度,需使Q值小的數(shù)調(diào)整為與另一個(gè)數(shù)的Q值一樣大。在做加法/減法運(yùn)算時(shí),必須注意結(jié)果可能會(huì)超過(guò)16位表示,即發(fā)生溢出。如果加法/減法的結(jié)果超出16位的表示范圍,則必須保留32位結(jié)果,以保證運(yùn)算的精度。當(dāng)結(jié)果不超過(guò)16位表示范圍時(shí):設(shè)x的Q值為Qx,y的Q值為Qy,且Qx>Qy,加法/減法結(jié)果z的定標(biāo)值為Qz,則z=x+y

用定點(diǎn)數(shù)實(shí)現(xiàn)浮點(diǎn)數(shù)加法的C語(yǔ)言實(shí)現(xiàn)為:voidfixed_add(intx,inty)

{

longtemp;//臨時(shí)變量

intz;//intz=x+y

temp=y<<(Qx-Qy);

temp+=x;

if(Qx>=Qz)//若Qx≥Qz{

z=temp>>(Qx-Qz);

}

else//若Qx≤Qz

{

z=temp<<(Qz-Qx);

}}用定點(diǎn)數(shù)實(shí)現(xiàn)浮點(diǎn)數(shù)減法的C語(yǔ)言實(shí)現(xiàn)為:voidfixed_sub(intx,inty)

{

longtemp;//臨時(shí)變量

intz;//intz=x-y

temp=y<<(Qx-Qy);

temp=x-temp;//注意,此處與定點(diǎn)加法不同

if(Qx>=Qz)//若Qx≥Qz

{

z=temp>>(Qx-Qz);

}

else//若Qx≤Qz

{

z=temp<<(Qz-Qx);

}}例:定點(diǎn)加法設(shè)x=1.25,y=8.13,則浮點(diǎn)運(yùn)算結(jié)果為z=x+y=1.25+8.13=9.38;Qx=14,Qy=11,Qz=11,則定點(diǎn)加法為:x=20480;y=16650;temp=16650<<3=133201;temp=x+temp=20480+133201=153681;z=(int)(153681L>>3)=19210;因?yàn)閦的Q值為11,所以定點(diǎn)值z(mì)=19210即為浮點(diǎn)值z(mì)=19210/2048=9.38。例:定點(diǎn)減法設(shè)x=0.85,y=3.1,則浮點(diǎn)運(yùn)算結(jié)果為z=x-y=0.85-3.1=-2.25;Qx=15,Qy=13,Qz=13,則定點(diǎn)減法為:x=27852;y=25395;temp=25395<<2=101580;temp=x-temp=27852-101580=-73728;因?yàn)镼x>Qz,故z=(int)(-73728>>2)=-18432。由于z的Q值為13,所以定點(diǎn)值z(mì)=-18432即為浮點(diǎn)值z(mì)=-18432/8192-2.25。當(dāng)結(jié)果超過(guò)16位表示范圍時(shí)設(shè)x的Q值為Qx,y的Q值為Qy,且Qx>Qy,加法結(jié)果z的定標(biāo)值為Qz,則定點(diǎn)加法為:voidfixed_add(intx,inty)

{

longtemp;//臨時(shí)變量

longz;//因?yàn)閆的值要超過(guò)16位數(shù)表示范圍,因此使用long型

temp=y<<(Qx-Qy);

temp+=x;

if(Qx>=Qz)//若Qx≥Qz{

z=temp>>(Qx-Qz);

}

else//若Qx≤Qz

{

z=temp<<(Qz-Qx);

}}結(jié)果超過(guò)16位的定點(diǎn)加法:設(shè)x=15000,y=20000,則浮點(diǎn)運(yùn)算值為z=x+y=35000,顯然z>32767,Qx=1,Qy=0,Qz=0,則定點(diǎn)加法為:x=30000;y=20000;(分別進(jìn)行Q1、Q0定標(biāo)之后的值)temp=20000<<1=40000;temp=temp+x=40000+30000=70000;z=70000L>>1=35000;因?yàn)閦的Q值為0,所以定點(diǎn)值z(mì)=35000就是浮點(diǎn)值,這里z是一個(gè)長(zhǎng)整型數(shù)。當(dāng)加法或加法的結(jié)果超過(guò)16位表示范圍時(shí),并且需要保證運(yùn)算精度時(shí),則必須保持32位結(jié)果。如果程序中是按照16位數(shù)進(jìn)行運(yùn)算的,則超過(guò)16位實(shí)際上就是出現(xiàn)了溢出。如果不采取適當(dāng)?shù)拇胧瑒t數(shù)據(jù)溢出會(huì)導(dǎo)致運(yùn)算精度的嚴(yán)重惡化。一般的定點(diǎn)DSP芯片都設(shè)有溢出保護(hù)功能。

(2)乘法運(yùn)算的C語(yǔ)言定點(diǎn)實(shí)現(xiàn)(Qm+n=QmQn)浮點(diǎn)數(shù)完成的乘法運(yùn)算為:voidfloat_mul(floatx,floaty)

{

floatz;

z=x*y;

}假設(shè)經(jīng)過(guò)統(tǒng)計(jì)后x的定標(biāo)值為Qx,y的定標(biāo)值為Qy,乘積z的定標(biāo)值為Qz,則z=xy

用定點(diǎn)數(shù)實(shí)現(xiàn)浮點(diǎn)數(shù)乘法的C語(yǔ)言實(shí)現(xiàn)為::voidfixed_mul(intx,inty)

{

longtemp;

intz;

temp=(long)x;

z=(temp*y)>>(Qx+Qy-Qz);}例定點(diǎn)乘法設(shè)x=21.6,y=6.8,則浮點(diǎn)運(yùn)算值為z=21.6×6.8=146.88;根據(jù)Q定標(biāo)的原則,Qx=10,Qy=12,Qz=7,所以x=22118;y=27852;temp=22118L;z=(22118L*27852)>>(10+12-7)=616030536L>>15=18800;因?yàn)閦的定標(biāo)值為7,故定點(diǎn)z=18800即為浮點(diǎn)的z=18800/27=146.88。(3)除法運(yùn)算的C語(yǔ)言定點(diǎn)實(shí)現(xiàn)(Qm-n=Qm/Qn)浮點(diǎn)完成的除法運(yùn)算為:voidfloat_div(floatx,floaty)

{

floatz;

z=x/y;

}假設(shè)經(jīng)過(guò)統(tǒng)計(jì)后被除數(shù)x的定標(biāo)值為Qx,除數(shù)y的定標(biāo)值為Qy,商z的定標(biāo)值為Qz,則z=x/y用定點(diǎn)數(shù)實(shí)現(xiàn)浮點(diǎn)數(shù)除法的C語(yǔ)言實(shí)現(xiàn)為::voidfixed_div(intx,inty){longtemp;intz;temp=(long)x;z=(temp<<(Qz-Qx+Qy))/y;}例:定點(diǎn)除法設(shè)x=2.41,y=7.23,浮點(diǎn)運(yùn)算值為z=x/y=2.41/7.23=0.33;根據(jù)上節(jié),得Qx=13,Qy=12,Qz=15;所以有x=19742,y=29614;temp=(long)19742;z=(19742L<<(15-13+12))/29614=323452928L/29614=10922;因?yàn)樯蘻的定標(biāo)值為15,所以定點(diǎn)z=10922即為浮點(diǎn)z=10922/215=0.33。IEEE標(biāo)準(zhǔn)的浮點(diǎn)數(shù)表示法s代表數(shù)的符號(hào),0為正,1為負(fù)

e是指數(shù)階碼,視做無(wú)符號(hào)數(shù)(0<e<255)

f是尾數(shù)的分?jǐn)?shù)部分floatdouble32位單精度浮點(diǎn)數(shù)格式數(shù)的格式符號(hào)位(s)指數(shù)階碼(e)尾數(shù)的分?jǐn)?shù)(f)代表的數(shù)值規(guī)格化數(shù)x0<e<255x(-1)s×2(e-127)×1.f非規(guī)格化數(shù)x0非零(-1)s×2(-126)×0.f無(wú)窮大數(shù)02550+無(wú)窮大12550?無(wú)窮大無(wú)效數(shù)x255非零NaN(Not-a-Number)x2551xx..xQnaN(QuietNaN)x2550xx..x和非零SnaN(SignalNaN)符號(hào)十六進(jìn)制值十進(jìn)制值備注NaN_out0x7FFFFFFFQnaN(QuietNaN)00x000000000.0-00x80000000-0.010x3F8000001.020x400000002.0LFPN0x7F7FFFFF3.40282347e+38單精度規(guī)格化浮點(diǎn)數(shù)最大值SFPN0x008000001.17549435e-38單精度規(guī)格化浮點(diǎn)數(shù)正最小值LDFPN0x0007FFFF1.17549421e-38單精度非規(guī)格化浮點(diǎn)數(shù)最大值SDFPN0x000000011.40129846e-45單精度非規(guī)格化浮點(diǎn)數(shù)正最小值一些特殊數(shù)的單精度浮點(diǎn)數(shù)的符號(hào)1+2-1+2-2+…+2-23=1+=1+1-2-23=1.99999988079071044921875×2127=3.40282346638528860e+3864位雙精度浮點(diǎn)數(shù)格式數(shù)的格式符號(hào)位(s)指數(shù)階碼(e)尾數(shù)的分?jǐn)?shù)(f)代表的數(shù)值規(guī)格化數(shù)x0<e<2047x(-1)s×2(e-1023)×1.f非規(guī)格化數(shù)x0非零(-1)s×2(-1022)×0.f無(wú)窮大數(shù)020470+無(wú)窮大120470?無(wú)窮大無(wú)效數(shù)x2047非零NaN(Not-a-Number)x20471xx..xQnaN(QuietNaN)x20470xx..x和非零SnaN(SignalNaN)一些特殊數(shù)的單精度浮點(diǎn)數(shù)的符號(hào)符號(hào)十六進(jìn)制值十進(jìn)制值備注NaN_out0x7FFFFFFFFFFFFFFFQnaN(QuietNaN)00x00000000000000000.0-00x8000000000000000-0.010x3F800000000000001.020x40000000000000002.0LFPN0x7F7FFFFFFFFFFFFF1.7976931348623157e+308單精度規(guī)格化浮點(diǎn)數(shù)最大值SFPN0x00800000000000002.2250738585072014e?308單精度規(guī)格化浮點(diǎn)數(shù)正最小值LDFPN0x0007FFFFFFFFFFFF2.2250738585072009e?308單精度非規(guī)格化浮點(diǎn)數(shù)最大值SDFPN0x00000000000000014.9406564584124654e?324單精度非規(guī)格化浮點(diǎn)數(shù)正最小值2.2.5邏輯及位域操作指令3.邏輯操作類:在.L中完成 AND與 OR或 XOR異或 NOT取反 NEG求補(bǔ)碼4.移位:在.S中完成 SHL算術(shù)左移 SHR算術(shù)右移 SHRU邏輯右移 SSHL帶飽和的算術(shù)左移5.比較類:在.L中完成 CMPEQ,CMPGT,CMPGTU,CMPLT,CMPLTU 比較兩有符號(hào)/無(wú)符號(hào)數(shù)的大小2.2.5邏輯及位域操作指令7.位操作 位清0/置1CLR/SET 帶符號(hào)擴(kuò)展與無(wú)符號(hào)擴(kuò)展的位域提取EXT/EXTU 檢測(cè)冗余符號(hào)位 NORMMV:

通用寄存器之間傳送數(shù)據(jù)MVC:

用于在通用寄存器與控制寄存器之間傳送數(shù)據(jù),使用.S2功能單元。MVK:

用于把16位常數(shù)送入通用寄存器MVKH/MVKLH

完成32位常量的賦值2.2.6搬移類指令MVKL 0x1234FABC,A5A5=0xFFFFFABC;WrongExample1A5=0x87654321MVKL 0x1234FABC,A5A5=0xFFFFFABC(signextension)MVKH 0x1234FABC,A5A5=0x1234FABC;OKExample2

MVKH 0x1234FABC,A5A5=0x12344321AlwaysuseMVKLthenMVKH,lookatthefollowingexamples:

2.2.6搬移類指令用標(biāo)號(hào)label表示目標(biāo)地址的轉(zhuǎn)移指令B(.unit)label;.unit=.S1or.S2用寄存器表示目標(biāo)地址的轉(zhuǎn)移指令B(.unit)src2;.unit=.S2從可屏蔽中斷寄存器取目標(biāo)地址的轉(zhuǎn)移指令B(.unit)IRP;.unit=.S2從不可屏蔽中斷寄存器取目標(biāo)地址的轉(zhuǎn)移指令B(.unit)NRP;.unit=.S2轉(zhuǎn)移指令有5個(gè)指令周期的延遲間隙。轉(zhuǎn)移指令后的5個(gè)指令執(zhí)行包全部進(jìn)入CPU流水線,并相繼執(zhí)行。

2.2.7

程序轉(zhuǎn)移類指令2.2.8浮點(diǎn)運(yùn)算指令(1)浮點(diǎn)加減法指令

ADDSP/ADDDP/SUBSP/SUBDP

(2)數(shù)據(jù)類型轉(zhuǎn)換指令10條

INTSP(U)/INTDP(U)/SPINT/DPINT/SPDP/SPTRUNC/DPSP/DPTRUNC

(3)浮點(diǎn)乘法及32位整數(shù)乘法指令6條

MPYSP/MPYSPDP/MPYSP2DP/MPYDP/MPYI/MPYID

(4)特殊的浮點(diǎn)運(yùn)算指令6條

ABSSP/ABSDP/RCPSP/RCPDP(倒數(shù))/RSQRSP/RSQRDP(平方根倒數(shù))

(5)單/雙精度浮點(diǎn)數(shù)的比較判決指令6條

CMPLTSP/CMPLTDP/CMPGTSP/CMPGTDP/CMPEQSP/CMPEQDP

(6)雙精度數(shù)據(jù)的讀?。鎯?chǔ)指令

LDDW/STDW

2.C672x的浮點(diǎn)運(yùn)算控制寄存器作用:

(1)為.L、.S和.M單元的運(yùn)算設(shè)置浮點(diǎn)舍入方式;

(2)包括一些字段用來(lái)記錄指令執(zhí)行中遇到的問(wèn)題,以便檢查,包括:

源操作數(shù)src1和src2是否是無(wú)效數(shù)NaN或非規(guī)格化數(shù);

結(jié)果是否上溢、下溢、不準(zhǔn)確、無(wú)窮大或者無(wú)效;

是否執(zhí)行了除以零的操作;

是否用了NaN源操作數(shù)作比較等。FADCR2.C672x的浮點(diǎn)運(yùn)算控制寄存器NOP指令

NOP空操作,不使用功能單元,單周期

NOPn,空跳n次,n周期

NOP與其它指令并行使用,將給其它指令增加額外的延遲間隙跳轉(zhuǎn)指令可影響多周期NOP的執(zhí)行EP1中含單NOP指令,各指令的結(jié)果在適當(dāng)周期可用,NOP對(duì)EP無(wú)影響EP2中含5周期NOP指令,在NOP5完成之前,任何其它指令不能使用執(zhí)行結(jié)果

EP1EP2NOP指令當(dāng)一個(gè)跳轉(zhuǎn)指令的5個(gè)延遲間隙結(jié)束時(shí),不管NOPn結(jié)束否,這時(shí)跳轉(zhuǎn)目標(biāo)都進(jìn)入執(zhí)行操作,廢棄多周期NOP跳轉(zhuǎn)指令影響多周期NOP的執(zhí)行資源限制在同一EP中,任兩條指令不能使用相同的功能單元例1:

ADD.S1A0,A1,A2||SHR.S1A3,A5,A4;S1被兩條指令同時(shí)使用可改為:

ADD.L1A0,A1,A2||SHR.S1A3,A5,A4;使用兩個(gè)不同的功能單元資源限制使用同一條交叉通路的兩條指令不能安排在同一EP中(只有1條交叉通路)

例2

ADD.L1XA0,B1,A1||MPY.M1XA4,B4,A5;1X被兩條指令同時(shí)使用可改為:

ADD.L1XA0,B1,A1||MPY.M2XA4,B4,A5;使用了不同路徑數(shù)據(jù)讀/寫(xiě)的限制(1)使用相同寄存器組作為目的地址/源地址的兩條讀/寫(xiě)指令不能安排在同一EP中。數(shù)據(jù)讀寫(xiě)所用的地址寄存器必須與所用的功能單元處于同一數(shù)據(jù)通道例3

LDW.D1*A0,A1||LDW

.D2*A1,B2

;.D2必須使用B組寄存器改為:

LDW.D1*A0,A1||LDW

.D2*B0,B2

;

寄存器所在組正確數(shù)據(jù)讀/寫(xiě)的限制(2)將數(shù)據(jù)讀入到(或儲(chǔ)存自)相同寄存器組的兩條讀(或?qū)懀┲噶畈荒馨才旁谕籈P中;將數(shù)據(jù)讀入到和儲(chǔ)存自相同寄存器組的兩條指令不能安排在同一EP中例4 LDW.D1*A4,A5||STW.D2

A6,*B4

;讀入到、儲(chǔ)存自同組寄存器改為:

LDW.D1

*A4,B5||STW.D2

A6,*B4

;

寄存器所在組正確使用長(zhǎng)定點(diǎn)類型(40位)數(shù)據(jù)的限制(1)因?yàn)?S和.L單元共用一套為長(zhǎng)定點(diǎn)型的源操作數(shù)準(zhǔn)備的讀寄存器通路和為長(zhǎng)定點(diǎn)型的結(jié)果準(zhǔn)備的寫(xiě)寄存器通路,所以每一個(gè)執(zhí)行包只容許每一寄存器組處理一個(gè)長(zhǎng)定點(diǎn)類型數(shù)據(jù)例5

ADD.L1A5:A4,A1,A3:A2||SHL.S1A8,A9,A7:A6 ;兩個(gè)長(zhǎng)數(shù)據(jù)寫(xiě)入同一組 改為:

ADD.L1A5:A4,A1,A3:A2||SHL.S2B8,B9,B7:B6 ;每組一個(gè)長(zhǎng)數(shù)據(jù)使用長(zhǎng)定點(diǎn)類型(40位)數(shù)據(jù)的限制(2)因?yàn)?S和.L單元的一個(gè)長(zhǎng)數(shù)據(jù)讀通路和寫(xiě)通路共用,所以同一S單元或L單元的長(zhǎng)數(shù)據(jù)讀操作和存儲(chǔ)操作不能安排在同一執(zhí)行包中例6

ADD.L1A5:A4,A1,A3:A2||STW.D1A8,*A9 ;長(zhǎng)數(shù)據(jù)讀操作與存儲(chǔ)操作沖突 改為:

ADD.L1A4,A1,A3:A2||STW.D1A8,*A9 ;去掉長(zhǎng)數(shù)據(jù)讀操作存儲(chǔ)器讀取的限制對(duì)同一寄存器在一個(gè)指令周期讀取多于4次是不允許的,條件寄存器不在此限制之列例7

MPY.M1A1,A1,A4||ADD.L1A1,A1,A5||SUB.D1A1,A2,A3;對(duì)A1進(jìn)行5次讀寫(xiě)

MPY.M1A1,A1,A4||ADD.L1A0,A1,A5||SUB.D1A1,A2,A3;只對(duì)A1進(jìn)行4次讀寫(xiě)存儲(chǔ)器存儲(chǔ)的限制在同一指令周期內(nèi)不能同時(shí)存在兩條指令寫(xiě)入同一寄存器。具有同一目的地址的兩條指令可以安排并行,只要向該目的寄存器的寫(xiě)操作不在同一指令周期發(fā)生例8

MPY.M1A0,A1,A2 ADD.L1A4,A5,A2;寫(xiě)A2在同一周期發(fā)生!

ADD.L1A4,A5,A2|| MPY.M1A0,A1,A2;不存在問(wèn)題!例程:0201-0207CCS軟件演示ImplementationofSumofProducts(SOP)匯編程序綜合示例ImplementationofSumofProducts(SOP)SOPisthekeyelementformostDSPalgorithms.Solet’swritethecodeforthisalgorithmandatthesametimelearntheC6000architecture.Twobasicoperationsarerequiredforthisalgorithm.(1)Multiplication(2)AdditionThereforetwobasicinstructionsarerequiredY=N

an

xnn=1*=a1

*x1+a2*x2

+...+aN*

xNMultiply(MPY)Themultiplicationofa1byx1isdoneinassemblybythefollowinginstruction:MPY a1,x1,YThisinstructionisperformedbyamultiplierunitthatiscalled“.M”Y=N

an

xnn=1*=a1

*x1+a2*x2

+...+aN*

xNTheimplementationinthismodulewillbedoneinassembly.Multiply(.Munit).MY=40

an

xnn=1*The.MunitperformsmultiplicationsinhardwareMPY .M a1,x1,Y

Note:16-bitby16-bitmultiplierprovidesa32-bitresult. 32-bitby32-bitmultiplierprovidesa64-bitresult.Addition(.?).M.?Y=40

an

xnn=1*

MPY .M a1,x1,prod

ADD .? Y,prod,Y

Add(.Lunit).M.LY=40

an

xnn=1*

MPY .M a1,x1,prod

ADD .L Y,prod,Y

RISCprocessorssuchastheC6000useregisterstoholdtheoperands,soletschangethiscode.RegisterFile-AY=40

an

xnn=1*

MPY .M a1,x1,prod ADD .L Y,prod,Y

.M.LA0A1A2A3A4A15RegisterFileA.

.

.a1x1prod32-bitsYLetuscorrectthisbyreplacinga,x,prodandYbytheregistersasshownabove.SpecifyingRegisterNamesY=40

an

xnn=1*

MPY .M A0,A1,A3 ADD .L A4,A3,A4

TheregistersA0,A1,A3andA4containthevaluestobeusedbytheinstructions..M.LA0A1A2A3A4A15RegisterFileA.

.

.a1x1prod32-bitsYY=40

an

xnn=1*

MPY .M A0,A1,A3 ADD .L A4,A3,A4

RegisterFileAcontains16registers(A0-A15)whichare32-bitswide..M.LA0A1A2A3A4A15RegisterFileA.

.

.a1x1prod32-bitsYSpecifyingRegisterNamesA:Theoperandsareloadedintotheregistersbyloadingthemfromthememoryusingthe.Dunit..M.LA0A1A2A3A15RegisterFileA.

.

.a1x1prod32-bitsY.DDataMemoryQ:Howdoweloadtheoperandsintotheregisters?DataloadingA:Theloadinstructions..M.LA0A1A2A3A15RegisterFileA.

.

.a1x1prod32-bitsY.DDataMemoryQ:Whichinstruction(s)canbeusedforloadingoperandsfromthememorytotheregisters?LoadInstructions(LDB,LDH,LDW,LDDW)0000000000000004000000080000000C00000010Data32-bitsBeforeusingtheloadunityouhavetobeawarethatthisprocessorisbyteaddressable,whichmeansthateachbyteisrepresentedbyauniqueaddress.Alsotheaddressesare32-bitwide.addressFFFFFFFFLoadInstructions(LDB,LDH,LDW,LDDW)Thesyntaxfortheloadinstructionis:Where:Rnisaregisterthatcontainstheaddressoftheoperandtobeloadedand

Rmisthedestinationregister.0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFLDx*Rn,RmLoadInstructions(LDB,LDH,LDW,LDDW)Thesyntaxfortheloadinstructionis:Thequestionnowishowmanybytesaregoingtobeloadedintothedestinationregister?0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFLoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,RmThesyntaxfortheloadinstructionis:0000000000000004000000080000000C00000010Dataa1x1prod32-bitsYaddressFFFFFFFFTheanswer,isthatitdependsontheinstructionyouchoose: LDB:loadsonebyte(8-bit) LDH:loadshalfword(16-bit) LDW:loadsaword(32-bit) LDDW:loadsadoubleword(64-bit)Note:LDonitsowndoesnotexist.LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm0000000000000004000000080000000C00000010Data32-bitsaddressFFFFFFFFDCBAExample:IfweassumethatA5=0x4then:(1) LDB*A5,A7;givesA7=0x00000001(2) LDH*A5,A7;givesA7=0x00000201(3) LDW*A5,A7;givesA7=0x04030201(4) LDDW*A5,A7:A6;

givesA7:A6=0x0807060504030201Thesyntaxfortheloadinstructionis:01LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm43218765FE90Question:Ifdatacanonlybeaccessedbytheloadinstructionandthe.Dunit,howcanweloadtheregisterpointerRninthefirstplace?Thesyntaxfortheloadinstructionis:LoadInstructions(LDB,LDH,LDW,LDDW)LDx*Rn,Rm0000000000000004000000080000000C00000010Data32-bitsaddressFFFFFFFFDCBA0143218765FE90TheinstructionMVKLwillallowamoveofa16-bitconstantintoaregisterasshownbelow: MVKL.?a,A5 (‘a(chǎn)’isaconstantorlabel)Howmanybitsrepresentafulladdress?32bitsSowhydoestheinstructionnotallowa32-bitmove? Allinstructionsare32-bitwide(seeinstructionopcode).LoadingthePointerRnTosolvethisproblemanotherinstructionisavailable:

MVKH.?a,A5Finally,tomovethe32-bitaddresstoaregisterwecanuse:MVKL a,A5MVKH a,A5LoadingthePointerRnMVKL 0x1234FABC,A5A5=0xFFFFFABC;WrongExample1A5=0x87654321MVKL 0x1234FABC,A5A5=0xFFFFFABC(signextension)MVKH 0x1234FABC,A5A5=0x1234FABC;OKExample2

MVKH 0x1234FABC,A5A5=0x12344321AlwaysuseMVKLthenMVKH,lookatthefollowingexamples:

LoadingthePointerRnLDH,MVKLandMVKH.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.DDataMemory

MVKL pt1,A5MVKH pt1,A5MVKL pt2,A6MVKH pt2,A6LDH .D *A5,A0LDH .D *A6,A1

MPY .M A0,A1,A3ADD .L A4,A3,A4

CreatingaloopWiththeC6000processorstherearenodedicatedinstructionssuchasblockrepeat.TheloopiscreatedusingtheBinstruction.

SofarwehaveonlyimplementedtheSOPforonetaponly,i.e.Y=a1

*x1Solet’screatealoopsothatwecanimplementtheSOPforNTaps.Whatarethestepsforcreatingaloop1. Createalabeltobranchto.2. Addabranchinstruction,B.3. Createaloopcounter.4. Addaninstructiontodecrementtheloopcounter.5. Makethebranchconditionalbasedonthevalueintheloopcounter.1.Createalabeltobranchto

MVKL pt1,A5 MVKH pt1,A5 MVKL pt2,A6 MVKH pt2,A6loop LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4

MVKL pt1,A5 MVKH pt1,A5 MVKL pt2,A6 MVKH pt2,A6loop LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 B .? loop

2.Addabranchinstruction,B.DataMemoryWhichunitisusedbytheBinstruction?.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.D.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.D.S

MVKL .S pt1,A5 MVKH .S pt1,A5 MVKL .S pt2,A6 MVKH .S pt2,A6loop

LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 B .S loop

DataMemory3.Createaloopcounter..M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.D.M.LA0A1A2A3A15RegisterFileA.

.

.axprod32-bitsY.D.S

MVKL .S pt1,A5 MVKH .S pt1,A5 MVKL .S pt2,A6 MVKH .S pt2,A6 MVKL .S count,B0loop

LDH .D *A5,A0 LDH .D *A6,A1

MPY .M A0,A1,A3 ADD .L A4,A3,A4 B .S loop

溫馨提示

  • 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)論