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

下載本文檔

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

文檔簡介

第1章DSP系統(tǒng)設(shè)計(jì)的基礎(chǔ)知識1.1數(shù)制和數(shù)制轉(zhuǎn)換

1.2數(shù)據(jù)位數(shù)和符號

1.3補(bǔ)碼

1.4補(bǔ)碼加減運(yùn)算

1.5符號擴(kuò)展與補(bǔ)碼乘法

1.6整數(shù)除法運(yùn)算

1.7小數(shù)補(bǔ)碼和運(yùn)算

DSP可看做是一款高性能的單片機(jī),數(shù)值運(yùn)算是它的主要任務(wù)。因此,本章介紹二進(jìn)制補(bǔ)碼及其運(yùn)算等基礎(chǔ)知識。

計(jì)算機(jī)(也包括單片機(jī)、DSP)的基本任務(wù)是先從某個(gè)“地方”取數(shù)(讀操作數(shù)),然后按某種規(guī)律進(jìn)行運(yùn)算,再把結(jié)果存放到某個(gè)“地方”(寫操作數(shù))。這里的“地方”是指存儲器、I/O端口等。因此,地址和數(shù)據(jù)是計(jì)算機(jī)中兩個(gè)重要的基本概念。由于計(jì)算機(jī)只能存儲“0”和“1”兩種狀態(tài),因此計(jì)算機(jī)中的地址和數(shù)據(jù)都是用二進(jìn)制數(shù)表示的。同計(jì)算機(jī)原理一樣,DSP的地址和數(shù)據(jù)也用二進(jìn)制數(shù)表示,但二進(jìn)制數(shù)在閱讀和書寫上都很不方便,而十六進(jìn)制數(shù)和二進(jìn)制數(shù)有一個(gè)十分簡單的轉(zhuǎn)換關(guān)系。因此,在書寫時(shí),一般采用十六進(jìn)制數(shù)。如:十進(jìn)制數(shù)66可寫成8位二進(jìn)制數(shù)或2位十六進(jìn)制數(shù):66=01000010B=0x42=42H。其中二進(jìn)制數(shù)用后綴B表示,十六進(jìn)制數(shù)用前綴0x或后綴H(不分大小寫)表示。書寫時(shí)十六進(jìn)制數(shù)只能以符號0~9開始,當(dāng)十六進(jìn)制數(shù)的第一個(gè)符號為A~F時(shí),在其符號前加0,如255用2位十六進(jìn)制數(shù)表示為0x0FF或0FFH。

1.1數(shù)制和數(shù)制轉(zhuǎn)換

在日常生活中經(jīng)常使用的是十進(jìn)制數(shù),由0~9共10個(gè)符號組成,按照“逢十進(jìn)一”的規(guī)則運(yùn)算。計(jì)算機(jī)中使用的數(shù)是二進(jìn)制數(shù),它只有0和1兩個(gè)符號,按照“逢二進(jìn)一”的規(guī)則運(yùn)

算。與二進(jìn)制數(shù)密切相關(guān)的是十六進(jìn)制數(shù),由0~9和A~F共16個(gè)符號組成,按照“逢十六進(jìn)一”的規(guī)則運(yùn)算。二進(jìn)制數(shù)、十六進(jìn)制數(shù)與十進(jìn)制數(shù)的轉(zhuǎn)換關(guān)系如下:由于24=16,因此1位十六進(jìn)制數(shù)可用4位二進(jìn)制數(shù)表示,它們之間的關(guān)系如表1.1所示。

1.2數(shù)據(jù)位數(shù)和符號

計(jì)算機(jī)(包括單片機(jī)、DSP)除了受“0”和“1”兩種狀態(tài)的限制外,還受到數(shù)據(jù)長度的限制。計(jì)算機(jī)的數(shù)據(jù)總線一般為8位、16位、32位或64位,C54xDSP的數(shù)據(jù)總線為16位,可表示的數(shù)有16位二進(jìn)制數(shù)(稱為1個(gè)字)和32位二進(jìn)制數(shù)(稱為2個(gè)字或雙字)。當(dāng)用C語言編寫的程序在DSP系統(tǒng)中運(yùn)行時(shí),在C語言中用1個(gè)字節(jié)(8位二進(jìn)制數(shù))表示的數(shù)在DSP系統(tǒng)中均擴(kuò)展為1個(gè)字。

1.無符號整數(shù)

在C54x中,當(dāng)一個(gè)16位二進(jìn)制數(shù)(1個(gè)字)定義為無符號數(shù)時(shí),它表示的值的范圍為0~65535。類似地,一個(gè)32位二進(jìn)制數(shù)(1個(gè)雙字)可表示0~232-1之間的無符號數(shù),它們的數(shù)據(jù)精度(能表示的最小的數(shù))都是1。一般情況下,用n位二進(jìn)制數(shù)表示無符號數(shù)的范圍是0~2n-1。由于數(shù)據(jù)位數(shù)的限制,在進(jìn)行數(shù)據(jù)運(yùn)算時(shí)要注意數(shù)據(jù)表示的范圍,超出數(shù)據(jù)范圍會發(fā)生數(shù)據(jù)溢出錯(cuò)誤。

2.有符號整數(shù)

除了要注意數(shù)據(jù)表示的范圍外,還要關(guān)注數(shù)據(jù)的符號。數(shù)據(jù)有正、負(fù)兩種,可用“0”和“1”兩種狀態(tài)表示,“0”表示

正數(shù),“1”表示負(fù)數(shù)。一般把符號位放在最高位,其余位表示數(shù)據(jù)的絕對值。在計(jì)算機(jī)中,以這種格式表示的二進(jìn)制

數(shù)稱為原碼。一個(gè)n位原碼表示的有符號整數(shù)的范圍為

-(2n-1-1)~2n-1-1,其中0有“+0”和“-0”兩種表示方式。

1.3補(bǔ)碼

計(jì)算機(jī)的加法器和乘法器一般都是按無符號整數(shù)設(shè)計(jì)的,因此用這種硬件結(jié)構(gòu)實(shí)現(xiàn)有符號整數(shù)運(yùn)算時(shí),轉(zhuǎn)換關(guān)系復(fù)雜,運(yùn)行速度慢,很不方便。為此,計(jì)算機(jī)用“補(bǔ)碼”來表示有符號數(shù)。整數(shù)X用n位二進(jìn)制補(bǔ)碼表示的規(guī)則定義如下:

(1)若X≥0,它的原碼就是它的補(bǔ)碼。

(2)若X<0,它的補(bǔ)碼為:其原碼符號位不變,數(shù)據(jù)位取反加1。

同樣,二進(jìn)制補(bǔ)碼也有數(shù)據(jù)范圍問題,一個(gè)n位二進(jìn)制補(bǔ)碼表示的范圍為-2n-1~2n-1-1,超出數(shù)據(jù)范圍會發(fā)生數(shù)據(jù)溢出錯(cuò)誤,這里0只有“+0”一種表示方式。

無符號整數(shù)、有符號整數(shù)(原碼和補(bǔ)碼)與十六進(jìn)制數(shù)的對應(yīng)關(guān)系如表1.2所示。利用Windows操作系統(tǒng)“附件”中的計(jì)算器也可以求出用補(bǔ)碼表示的數(shù)。當(dāng)補(bǔ)碼表示正數(shù)時(shí),方法與無符號數(shù)的轉(zhuǎn)換方法相同;當(dāng)補(bǔ)碼表示負(fù)數(shù)時(shí),先將其作為無符號數(shù)轉(zhuǎn)換為十

進(jìn)制數(shù),然后減去2n,其中n為數(shù)據(jù)位數(shù)。例如計(jì)算16位二進(jìn)制補(bǔ)碼數(shù)0x0FFFF,先將其作為無符號整數(shù)轉(zhuǎn)換成十進(jìn)制

數(shù)65535,再減去216=65536,得-1,這就是它對應(yīng)的十進(jìn)

制數(shù)的值。

1.4補(bǔ)碼加減運(yùn)算

用補(bǔ)碼表示有符號數(shù)后,就可以用同無符號數(shù)一樣的硬件運(yùn)算結(jié)構(gòu)實(shí)現(xiàn)有符號數(shù)運(yùn)算。如果有符號數(shù)位數(shù)不夠,則在其高位填充符號位,即正數(shù)前補(bǔ)0,負(fù)數(shù)前補(bǔ)1,計(jì)算結(jié)果仍為補(bǔ)碼表示的數(shù)。只要計(jì)算結(jié)果不發(fā)生溢出,其答案就是正確的。例1.1設(shè)數(shù)據(jù)位數(shù)n=8,試用二進(jìn)制補(bǔ)碼求X+Y=100+77=?解:(1.1)這個(gè)運(yùn)算的特點(diǎn)是符號位沒有進(jìn)位,但數(shù)據(jù)的最高位有進(jìn)位。顯然,100+77=177,其結(jié)果超出了8位二進(jìn)制補(bǔ)碼數(shù)表示的范圍(-128~127),稱之為溢出(OV),這時(shí)其運(yùn)算結(jié)果0xB1作補(bǔ)碼-79來解釋是錯(cuò)誤的。例1.2設(shè)數(shù)據(jù)位數(shù)n=8,試用二進(jìn)制補(bǔ)碼求

X+Y=(-100)+(-77)=?

解:[X]補(bǔ)=10011100B,[Y]補(bǔ)=10110011B(1.2)這個(gè)運(yùn)算的特點(diǎn)是符號位有進(jìn)位,但數(shù)據(jù)的最高位沒有進(jìn)位。顯然,(-100)+(-77)=-177,其結(jié)果也超出了8位二進(jìn)制補(bǔ)碼數(shù)表示的范圍(-128~127),產(chǎn)生了溢出,這時(shí)其運(yùn)算結(jié)果0x4F=79(補(bǔ)碼)也是錯(cuò)誤的。例1.3設(shè)數(shù)據(jù)位數(shù)n=8,試用二進(jìn)制補(bǔ)碼求

X+Y=50+77=?

解:(1.3)這個(gè)運(yùn)算的特點(diǎn)是符號位和數(shù)據(jù)的最高位都沒有進(jìn)位。自然,50+77=127,其結(jié)果沒有超出8位二進(jìn)制補(bǔ)碼數(shù)表示的范圍(-128~127),未產(chǎn)生溢出,其運(yùn)算結(jié)果0x7F=127(補(bǔ)碼)是正確的。例1.4設(shè)數(shù)據(jù)位數(shù)n=8,試用二進(jìn)制補(bǔ)碼求

X+Y=(-50)+(-77)=?

解:(1.4)這個(gè)運(yùn)算的特點(diǎn)是符號位和數(shù)據(jù)的最高位都有進(jìn)位。自然,(-50)+(-77)=-127,其結(jié)果沒有超出8位二進(jìn)制補(bǔ)碼數(shù)表示的范圍(-128~127),未產(chǎn)生溢出,其運(yùn)算結(jié)果0x81=-127(補(bǔ)碼)是正確的。

C54xDSP芯片的CPU(中央處理單元)有一個(gè)16位的狀態(tài)寄存器ST0,用來記錄CPU的ALU(算術(shù)邏輯單元)的計(jì)算結(jié)果標(biāo)志。其中有3個(gè)比特位用來記錄計(jì)算結(jié)果是否有溢出和進(jìn)位。

當(dāng)ALU中的累加器A的計(jì)算有溢出時(shí),比特位OVA自動置1,當(dāng)ALU中的累加器B的計(jì)算有溢出時(shí),比特位OVB自動置1;當(dāng)加法有進(jìn)位時(shí),比特位C自動置1,當(dāng)減法有借位時(shí),比特

位C自動置0。ST0的結(jié)構(gòu)如圖1.1所示。圖1.1

C54xDSP的狀態(tài)寄存器ST0的結(jié)構(gòu)

ALU在進(jìn)行數(shù)值運(yùn)算時(shí),如果數(shù)據(jù)發(fā)生溢出,會產(chǎn)生錯(cuò)誤結(jié)果。例如16位二進(jìn)制有符號數(shù)(簡稱16bit,或16b,以下同)0x7FFFFFFF=2147483647,當(dāng)它再加1時(shí),按照ALU的運(yùn)算規(guī)則,應(yīng)等于0x80000000,但有符號數(shù)0x80000000作補(bǔ)碼解釋為-2147483648,則會帶來非常大的運(yùn)算錯(cuò)誤。為了減少此類錯(cuò)誤,需要對溢出作近似處理。

C54xDSP芯片的CPU還有一個(gè)16位的狀態(tài)寄存器ST1,其結(jié)構(gòu)如圖1.2所示。其中有一個(gè)溢出模式位OVM(OverflowMode),用來設(shè)置ALU計(jì)算的結(jié)果是否作溢出處理。圖1.2

C54xDSP的狀態(tài)寄存器ST1的結(jié)構(gòu)

1.5符號擴(kuò)展與補(bǔ)碼乘法

在計(jì)算機(jī)的計(jì)算中,有時(shí)為了提高計(jì)算精度,常常需要用多字來表示一個(gè)數(shù),這就存在數(shù)據(jù)擴(kuò)展的問題。在進(jìn)行補(bǔ)碼乘法時(shí),為了得到正確的結(jié)果,也需要進(jìn)行數(shù)據(jù)擴(kuò)展。對于無符號整數(shù)來說,這種擴(kuò)展比較容易,在前面補(bǔ)0即可。但對于用補(bǔ)碼表示的有符號整數(shù)而言,其擴(kuò)展方法是在原數(shù)據(jù)前補(bǔ)符號位,即在正整數(shù)前面全部補(bǔ)0,在負(fù)整數(shù)前面全部補(bǔ)1(負(fù)數(shù)的符號位)。采用這種擴(kuò)展方法,只要結(jié)果不溢出,其運(yùn)算結(jié)果就是正確的??梢?,對于用補(bǔ)碼表示的有

符號整數(shù)來說,其數(shù)據(jù)擴(kuò)展就是符號擴(kuò)展。在本書的其他部分,若無特別聲明,有符號數(shù)均用補(bǔ)碼表示。例1.5設(shè)數(shù)據(jù)位數(shù)n=8,現(xiàn)采用16位二進(jìn)制補(bǔ)碼求

X+Y=50+(-77)=?

解:(1.5)式中X=50是正數(shù),在其前面全部補(bǔ)0,Y=-77是負(fù)數(shù),在

其前面全部補(bǔ)1,最終結(jié)果是正確的(沒有超過16位有符號整

數(shù)表示的范圍)。用二進(jìn)制書寫不方便,用十六進(jìn)制數(shù)書寫

式(1.5)為

X+Y=0x0032+0xFFB3=0xFFE5=-27

(1.6)例1.6設(shè)數(shù)據(jù)位數(shù)n=8,現(xiàn)采用16位二進(jìn)制補(bǔ)碼求

X×Y=50×(-77)=?

解:(1.7)式中,在X前面全部補(bǔ)0,在Y前面全部補(bǔ)1,其結(jié)果是正確的(沒有超過16位有符號整數(shù)表示的范圍)。用十六進(jìn)制數(shù)書寫式(1.7)為

X×Y=0x0032×0xFFB3=0xF0F6=-3850

(1.8)

C54xDSP芯片的CPU的狀態(tài)寄存器ST1有一個(gè)比特位SXM用來設(shè)置計(jì)算的輸入數(shù)據(jù)是否作符號擴(kuò)展。當(dāng)SXM=1時(shí)(默認(rèn)設(shè)置),計(jì)算的輸入數(shù)據(jù)作符號擴(kuò)展,DSP作有符號數(shù)運(yùn)算;反之,輸入計(jì)算的數(shù)據(jù)不作符號擴(kuò)展,DSP作無符號數(shù)運(yùn)算。用匯編語言設(shè)置SXM的指令為

RSBX SXM;SXM=0,CPU作無符號數(shù)運(yùn)算

SSBX SXM;SXM=1,CPU作有符號數(shù)運(yùn)算

C54xDSP芯片有專用的硬件乘法單元和硬件加法單元,可在一個(gè)時(shí)鐘周期內(nèi),同時(shí)完成一次乘法和一次加法運(yùn)算。

1.6整數(shù)除法運(yùn)算

C54xDSP沒有除法指令,若除數(shù)是常數(shù),則轉(zhuǎn)化為乘法計(jì)算(乘以除數(shù)的倒數(shù));若除數(shù)是2的整數(shù)次方,可用算術(shù)移位快速實(shí)現(xiàn)計(jì)算;若除數(shù)是一個(gè)變量,則比較復(fù)雜,需要編程間接實(shí)現(xiàn)計(jì)算。

例1.7計(jì)算Y÷2=-0.0625,用C54xDSP匯編指令如下:

1.7小數(shù)補(bǔ)碼和運(yùn)算

有符號小數(shù)的補(bǔ)碼可由有符號整數(shù)的補(bǔ)碼直接擴(kuò)展而來。設(shè)n位二進(jìn)制小數(shù)由m位整數(shù)(包括符號位)和k位小數(shù)組成(n=m+k),這種表示方式稱為Qk方式。當(dāng)k=0時(shí),則退化為完全整數(shù)(Q0);若m=1,則為純小數(shù)(若n=16,為Q15)。Q表示法及其數(shù)值范圍、數(shù)據(jù)精度如表1.3所示。一個(gè)純小數(shù)X轉(zhuǎn)換成Qn格式的數(shù)(也稱定點(diǎn)數(shù),即小數(shù)點(diǎn)位置固定的數(shù))的公式為式(1.9)。

Xn=(int)X×2n

(1.9)

式中n為二進(jìn)制表示的小數(shù)點(diǎn)后面的位數(shù),int表示取整數(shù)部分。公式的含義是小數(shù)X先乘以2n變成整數(shù),然后按整數(shù)的方式轉(zhuǎn)換成補(bǔ)碼形式的二進(jìn)制數(shù)(或十六進(jìn)制數(shù)),

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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

提交評論