dsp晶元編譯器
① DSP有哪些特點適於進行數字信號處理
DSP的特點
對於沒有使用過DSP的初學者來說,第一個困惑就是DSP其他的嵌入式處理器究竟有什麼不同,它和單片機,ARM有什麼區別。事實上,DSP也是一種嵌入式處理器,它完全可以完成單片機的功能。
唯一的重要的區別在於DSP支持單時鍾周期的"乘-加"運算。這幾乎是所有廠家的DSP晶元的一個共有特徵。幾乎所有的DSP處理器的指令集中都會有一條MAC指令,這條指令可以把兩個操作數從RAM中取出相乘,然後加到一個累加器中,所有這些操作都在一個時鍾周期內完成。擁有這樣一條指令的處理器就具備了DSP功能。
具有這條指令就稱之為數字信號處理器的原因在於,所有的數字信號處理演算法中最為常見的算術操作就是"乘-加"。這是因為數字信號處理中大量使用了內積,或稱"點積"的運算。無論是FIR濾波,FFT,信號相關,數字混頻,下變頻。所有這些數字信號處理的運算經常是將輸入信號與一個系數表或者與一個本地參考信號相乘然後積分(累加),這就表現為將兩個向量(或稱序列)進行點積,在編程上就變成將輸入的采樣放在一個循環buffer里,本地的系數表或參考信號也放在一個buffer里,然後使用兩個指針指向這兩個buffer。這樣就可以在一個loop裡面使用一個MAC指令將二者進行點積運算。這樣的點積運算對與處理器來說是最快的,因為僅需一個始終周期就可以完成一次乘加。
了解DSP的這一特點後,當我們設計一個嵌入式系統時,首先要考慮處理器所實現的演算法中是否有點積運算,即是否要經常進行兩個數組的乘加,(記住數字濾波,相關等都表現為兩個數組的點積)如果有的話,每秒要做多少次,這樣就能夠決定是否採用DSP,採用多高性能的DSP了。
浮點與定點
浮點與定點也是經常是初學者困惑的問題,在選擇DSP器件的時候,是採用浮點還是採用定點,如果用定點是16位還是32位?其實這個問題和你的演算法所要求的信號的動態范圍有關。
定點的計算不過是把一個數據當作整數來處理,通常AD采樣來的都是整數,這個數相對於真實的模擬信號有一個刻度因子,大家都知道用一個16位的AD去采樣一個0到5V的信號,那麼AD輸出的整數除以2^16再乘以5V就是對應的電壓。在定點DSP中是直接對這個16位的采樣進行處理,並不將它轉換成以小數表示的電壓,因為定點DSP無法以足夠的精度表示一個小數,它只能對整數進行計算。
而浮點DSP的優勢在於它可以把這個采樣得到的整數轉換成小數表示的電壓,並不損失精度(這個小數用科學記數法來表示),原因在於科學記數法可以表示很大的動態范圍的一個信號,以IEEE754浮點數為例,
單精度浮點格式: [31] 1位符號 [30-23]8位指數 [22-00]23位小數
這樣的能表示的最小的數是+-2^-149,最大的數是+-(2-2^23)*2^127.動態范圍為20*log(最大的數/最小的數)=1667.6dB 這樣大的動態范圍使得我們在編程的時候幾乎不必考慮乘法和累加的溢出,而如果使用定點處理器編程,對計算結果進行舍入和移位則是家常便飯,這在一定程度上會損失是精度。原因在於定點處理處理的信號的動態范圍有限,比如16位定點DSP,可以表示整數范圍為1-65536,其動態范圍為20*log(65536/1)=96dB.對於32定點DSP,動態范圍為20*log(2^32/1)=192dB,遠小於32位ieee浮點數的1667.6dB,但是,實際上192dB對絕大多數應用所處理的信號已經足夠了。
由於AD轉換器的位數限制,一般輸入信號的動態范圍都比較小,但在DSP的信號處理中,由於點積運算會使中間節點信號的動態范圍增加,所以主要考慮信號處理流程中中間結果的動態范圍,以及演算法對中間結果的精度要求,來選擇相應的DSP。另外就是浮點的DSP更易於編程,定點DSP編程中程序員要不斷調整中間結果的P,Q值,實際就是不斷對中間結果進行移位調整和舍入。
DSP與RTOS
TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基於各自DSP的嵌入式多任務內核。DSP編程可以用單用C,也可以用匯編,或者二者結合,一般軟體編譯工具都提供了很好的支持。我不想在這里多說BIOS,VDK怎麼用這在相應的文檔里說的很詳細。我想給初學者說說DSP的RTOS原理。用短短幾段話說這個復雜的東西也是挑戰!
其實DSP的RTOS和基於其他處理器的通用RTOS沒什麼大的區別,現在幾乎人人皆知的uCOSii也很容易移植到DSP上來,只要把寄存器保存與恢復部分和堆棧部分改改就可以。一般在用BIOS和VDK之前,先看看操作系統原理的書比較好。uCOS那本書也不錯。
BIOS和VDK其實是一個RTOS內核函數集,DSP的應用程序會和這些函數連接成一個可執行文件。其實實現一個簡單的多任務內核並不復雜,首先定義好內核的各種數據結構,然後寫一個scheler函數,功能是從所有就緒任務中(通過查找就緒任務隊列或就緒任務表)找出優先順序最高的任務,並恢復其執行。然後在此基礎上寫幾個用於任務間通信的函數就可以了,比如event,message box,等等。
RTOS一般採用搶先式的任務調度方式,舉例說當任務A等待的資源available的時候,DSP會執行一個任務調度函數scheler,這個函數會檢查當前任務是否比任務A優先順序低,如果是的話,就會把它當前掛起,然後把任務A保存在堆棧里寄存器值全部pop到DSP處理器中(這就是所謂的任務現場恢復)。接著scheler還會把從堆棧中取出任務A掛起時的程序執行的地址,pop到PC,使任務A繼續執行。這樣當前任務就被任務A搶先了。
使用RTOS之後,每個任務都會有一個主函數,這個函數的起始地址就是該任務的入口。一般每個任務的主函數里有一個死循環,這個循環使該任務周期地執行,完成一部分演算法模塊的功能,其實這個函數跟普通函數沒任何區別,類似於C語言中的main函數。一個任務創建的時候,RTOS會把這個函數入口地址壓入任務的堆棧中,好象這個函數(任務)剛發生過一次中斷一樣。一旦這個新創建任務的優先順序在就緒隊列中是最高的,RTOS就會從其堆棧中彈出其入口地址開始執行。
有一個疑問是,不使用RTOS,而是簡單使用一個主循環在程序中調用各個函數模塊,一樣可以實現軟體的調度執行。那麼,這種常用的方法與使用RTOS相比有什麼區別呢?其實,使用主循環的方法不過是一種沒有優先順序的順序執行的調度策略而已。這種方法的缺點在於,主循環中調用的各個函數是順序執行的,那麼,即使是一個無關緊要的函數(比如閃爍一個LED),只要他不主動返回,也會一直執行直到結束,這時,如果發生一個重要的事件(比如DMA buffer full 中斷),就會得不到及時的響應和處理,只能等到那個閃爍LED的函數執行完畢。這樣就使整個DSP處理的優先次序十分不合理。而在使用了RTOS之後,當一個重要的事件發生時,中斷處理會進入RTOS,並調用scheler,這時scheler 會讓處理這一事件的任務搶佔DSP處理器(因為它的優先順序高)。而哪個閃爍LED任務即使晚執行幾毫秒都沒任何影響。這樣整個DSP的調度策略就十分合理。
RTOS要說的內容太多,我只能講一下自己的一點體會吧
DSP與正(余)弦波
在DSP的應用中,我們經常要用到三角函數,或者合成一個正(余)弦波。這是因為我們喜歡把信號通過傅立葉變換映射到三角函數空間來理解信號的頻率特性。信號處理的一些計算技巧都需要在DSP軟體中進行三角函數計算。然而三角函數計算是非線性的計算,DSP並沒有專門的指令來求一個數的正弦或餘弦。於是我們需要用線性方法來近似求解。
一個直接的想法是用多項式擬合,這也正是大多數DSP C編譯器提供正餘弦庫函數所採用的方法。其原理是把三角函數向函數空間{1,x,x^2,x^3....}上投影,從而獲得一系列的系數,用這些系數就可以擬合出三角函數。比如,我們在[0,pi/2]區間上擬合sin,只需在matlab中輸入以下命令:
x=0:0.05:pi/2;
p=polyfit(x,sin(x),5)
就得到5階的多項式系數:
p =
0.00581052047605 0.00580963216172 -0.17193865685360
0.00209002716293 0.99969270087312 0.00000809543448
於是在[0,pi/2]區間上:
sin(x)= 0.00000809543448+0.99969270087312*x+ 0.00209002716293*x^2-0.17193865685360*x^3+
0.00580963216172*x^4+0.00581052047605*x^5
於是在DSP程序中,我們可以通過用乘加(MAC)指令計算這個多項式來近似求得sin(x)
當然如果用定點DSP還要把P這個多項式系數表用一定的Q值來改寫成定點數。
這樣的三角函數計算一般都需要幾十個cycle 的開銷。這對於某些場合是不能容忍的。
另一種更快的方法是藉助於查表,比如,我們將[0,pi/2]分成32個區間,每個區間長度就為pi/64,在每個區間上我們使用直線段擬合sin曲線,每個區間線段起點的正弦值和線段斜率事先算好,存在RAM里,這樣就需要在在RAM里存儲64個
常數:
32個起點的精確的正弦值(事先算好): s[32]={0,sin(pi/64),sin(pi/32),sin(pi/16)....}
32個線段的斜率: f[32]={0.049,.....}
對於輸入的每一個x,先根據其大小找到所在區間i,通常x用定點表示,一般取其高幾位就是系數i了,然 後通過下式即可求出sin(x):
sin(x)= s[i]*f[i]
這樣一般只需幾個CYCLE就可以算出正弦值,如果需要更高的精度,可以將區間分得更細,當然,也就需 要更多的RAM去存儲常數表。
事實上,不僅三角函數,其他的各種非線性函數都是這樣近似計算的。
② DSP編譯器的處理器選項中大內存模型的特點
摘要 禁止編譯器優化:按(單線程)程序的順序依次訪問內存。
③ DSP處理器和滑鼠內部的晶元是否有區別
HDNS2000光學感測晶元在運動檢測中的應 用2009年02月17日 星期二 下午 10:40
摘 要:安捷倫(Agilent)公司的hdns2000晶元是一種高性能的運動檢測器件,在目前的光學滑鼠中應用廣泛,其易用性和廉價性使其非常適合應用於中低精度的運動和位置檢測中。本文介紹hdns2000的功能、特點,從硬體與軟體兩個方面討論hdns2000與AVR單片機的介面設計。
關鍵詞:hdns2000 運動檢測 AVR
在機電產品設計中,有時需要檢測物體間的相對運動,包括運動方向和運動距離。若採用機械式的結構,比如機械滑鼠中的滾輪和軌跡球,則會由於頻繁的機械運動而發生故障,導致精度下降甚至失效,維修起來也不方便。另外它需要兩個物體表面相接觸,靠相互間的摩擦進行工作,這在某些場合是不能允許的。解決方案之一就是採用光電器件,運用光學原理來測定運動。安捷倫公司的hdns2000就是為此而設計的,雖然它的市場是針對光學滑鼠,但也可以作為一種高性能而又廉價的器件運用於工業控制領域中。
1 hdns2000晶元介紹
1.1 主要功能與特性
hdns2000是安捷倫推出的高性能的光學感測晶元,它的內部包含三個基本模塊:圖像拾取系統、DSP處理器、PS/2或四狀態輸出轉換器,如圖1所示。在hdns2000晶元的底部有一個感光眼,如同一個小型的攝像頭,不斷地對物體表面進行拍照,接著將前後兩次的圖像送入DSP中進行處理,以判斷物體移動的方向和大小,最後將數據轉化為PS/2格式或者以兩通道四狀態格式輸出。圖2中的(a)與(b)分別為晶元前後兩次拾取的圖像。比較圖2中的(a)和(b)可以看出,物體向左下方移動了一點。
hdns2000的圖像拾取系統每秒鍾可以拾取1500張圖像,可以精確地測量最高30.48 cm/s(12 英寸/s)的運動,解析度為400點每英寸。
1.2 引腳介紹
hdns2000的主要引腳框圖如圖3所示。
PS2_C:PS/2介面的時鍾端。
MODE/XA:復用引腳,接高電平時表示選擇PS/2模式;否則,為XA輸出。
RB/XB:復用引腳,PS/2模式時為滑鼠右鍵輸入;否則,為XA輸出。
MB/YB:復用引腳,PS/2模式時為滑鼠中鍵輸入;否則,為YB輸出。
LB/YA:復用引腳,PS/2模式為滑鼠左鍵輸入;否則,為YA輸出。
XY_LED:激光LED控制輸出,在物體長時間不移動時,hdns2000可以控制LED關閉,以節約能量。
VDD3:3.3 V直流電源輸入。
REFB:內部參考引腳,通過電容與VDD3相連。
PS2_D :PS/2介面的數據端。
NRESET:低電平復位引腳。
VDD5:5 V直流電源輸入。
GND:電源地。
OSC2:晶振輸出。
OSC1:晶振輸入,外接18.432 MHz晶振。
2 hdns2000與AVR單片機介面設計
2.1 hdns2000與AT90S8015介面
hdns2000直接提供有PS/2介面,方便了PS/2滑鼠的設計;但在機電控制中,為了提高效率,宜直接採用hdns2000的另一種輸出模式,即X向與Y向兩通道四狀態輸出模式。此時XA、XB指示X向移動狀態,而YA、YB指示Y向移動狀態。圖 4為hdns2000與AVR單片機AT90S8515的介面原理圖。介面主要佔用了4個引腳,其它兩個是可選的,所以,即使是AVR中最低檔的ATtiny系列也可以方便地與hdns2000連接。
另外在對節能要求不高的場合,可以將激光LED的一端直接與地相連接,而通過控制開關三極體2N3906來主動控制hdns2000的工作狀態。本文作者在設計時正是採用的這種方式。在進行系統設計時,最好採用安捷倫公司提供的套件,其中包括hdns2000晶元、HDNS2100透鏡、HDNS2200 激光LED卡件及HLMP-ED80激光LED,激光波長為639 nm。
2.2 四位狀態機的工作過程
在hdns2000內部有兩個狀態機分別指示X、Y兩個方向,每個狀態機又有四個穩定的狀態。圖5是狀態機的示意圖。由圖5可見,一開始系統處於狀態0,每當檢測到物體向正向或反向移動1個單位時就轉移到下一個狀態,所以只要連續監測狀態機狀態的變化就可以判斷物體移動的方向和距離。圖6(a)和(b)分別為負向移動和正向移動時狀態機輸出的波形。值得注意的是,每個狀態的最少停留時間為133μs。
2.3 介面軟體設計
由狀態機輸出波形圖可以看出,有一種很簡單自然的介面設計方法,就是將狀態輸出引腳接到單片機的外部中斷引腳上,使其在每個波形的上下邊沿都產生中斷,再在中斷處理程序中,檢測另一對應波形的電平高低,就可以判斷移動方向。比如在XA的上升沿時,若XB是低電平就是左移,若XB是高電平就是右移。這種方法需要單片機提供足夠多的外部中斷。若同時檢測X向與Y向運動,且單片機1個引腳不能同時提供上升沿和下降沿中斷的情況下,就需要佔用8個中斷、8條引腳;而目前許多單片機僅提供2個外部中斷引腳,這種要求顯然較為苛刻。
另一種方式就是降低精度要求,僅在XA與YA的上升沿進行檢測,此時僅需要2個外部中斷引腳。但這種方式在一種極端條件下會出錯,讀者可以自行分析。若只檢測X一個方向,則可以同時檢測上下沿中斷,這樣不會出錯。這種方式犧牲了一點對運動換向和震顫的敏感度;但編程簡單,不失為一種好方法。
本文採用的是查詢方式,這種方式不佔用任何中斷,且能夠不損精度地同時檢測X向與Y向運動。前面已經提過,每個狀態的最小保持時間為133 μs,所以,只要將查詢的周期控制在60μs之下就可以抓住每個狀態的變化。對於AT90S8515,若按晶振為8 MHz計算,則只需將查詢周期匯編指令數控制在450條以下就可以了。實際上,以下給出的C語言程序經過編譯後只有不大於60條匯編指令,完全能夠滿足系統要求。
該方法的基本思想是將狀態機的前一狀態與現在的狀態組合在同一位元組內,如表1所列,尋找其中的規律,簡化程序設計。表1中以PRE開頭的表示前一狀態的對應值。
以X向移動為例(僅看前半位元組),正向移動時對應的值為0b1000、0b1110、0b0111、0b0001,負向移動時對應的值為0b0010、0b1011、0b1101、0b0100。假設狀態不變的情況已經排除,且查詢周期足夠短,不會出現相對周期的組合值。所以只要能將以上兩組值區分開來就可以了,這也正是程序中兩條條件判斷語句的目的。讀者可以對照程序自行驗證。介面程序如下:
while(1){
state=PINA&0xcc;
state_change=state^pre_state;
combo_state=sate | (pre_state>>2);
if(state_change & 0x0c)
{
if((combo_state & 0x06) == 0x06)
{asm("INC R20");goto next;}
if((combo_state | 0x09) == 0x09)
{asm("INC R20");goto next;}
asm("DEC R20");
}
next:
if(state_change & 0xc0)
{
if((temp & 0x60) == 0x60)
{asm("INC R21");goto end;}
if((temp | 0x90) == 0x90)
{asm("INC R21");goto end;}
asm("DEC R21");
}
end:pre_state=state;}
程序已經事先定義了寄存器R20與R21分別為X、Y向的計數器,用來表示X、Y向移動的距離。以上程序段利用內嵌匯編語句優化了程序結構。實際上,還可以對編譯器生成的匯編代碼進行優化,這里就不再詳述了。
結 語
以上軟硬體介面設計雖然是以功能強大的AVR單片機作為例子,但通過仔細分析不難發現,在簡單的應用場合,用普通的51單片機,甚至如AT89C2051在12 MHz晶振頻率下也可以實現其功能。所以整個系統會是相當廉價的。
④ 能否將Windows操作系統中的.exe文件下載到DSP晶元中執行如果可行,基本思路是什麼
把windows的EXE文件放在DSP中運行?這根本不可能啊!除非是你有這EXE文件的源程序,用DSP編譯器編譯之後才能下載到DSP中運行。
另外,現在windows的程序都是C++寫的吧?DSP的編譯器好像還沒有C++的呢!
⑤ 想問一下,dsp編程一般用的什麼編譯器
DSP產家提供的編譯器,部分DSP支持GCC
⑥ 設計數字信號處理應用系統選擇dsp時,應考慮哪些因素
德州儀器公司眾所周知,美國德州儀器(Texas Instruments,TI)是世界上最知名的DSP晶元生產廠商,其產品應用也最廣泛,TI公司生產的丁MS320系列 DSP晶元廣泛應用於各個領域。TI公司在1982年成功推出了其第一代DSP晶元TMS32010,這是DSP應用歷史上的一個里程碑,從此,DSP晶元開始得到真正的廣泛應用。由於TMS320系列DSP晶元具有價格低廉、簡單易用功能強大等特點,所以逐漸成為目前最有影響、最為成功的DSP系列處理器。目前,TI公司在市場上主要有三大系列產品:(1)面向數字控制、運動控制的TMS320C2000系列,主要包括 TMS320C24x/F24x、TMS320LC240x/LF240x、TMS320C24xA/LF240xA、TMS320C28xx等。(2)面向低功耗、手持設備、無線終端應用的TMS320C5000系列,主要包括TMS320C54x, TMS320C54xx,TMS320C55x等。(3)面向高性能、多功能、復雜應用領域的TMS320C6000系列,主要包括TMS320C62xx、TMS320C64xx、TMS320C67xx等。 美國模擬器件公司ADI公司在DSP晶元市場上也佔有一定的份額,相繼推出了一系列具有自己特點的DSP晶元,其定點DSP晶元有ADSP2101/2103/2105、ADSP2111/2115、ADSP2126/2162/2164、ADSP2127/2181、ADSP-BF532以及Blackfin系列,浮點DSP晶元有ADSP21000/21020、ADSP21060/21062,以及虎鯊TS101、TS201S。 Motorola公司Motorola公司推出的DSP晶元比較晚。1986年該公司推出了定點DSP處理器MC56001;1990年,又推出了與IEEE浮點格式兼容的的浮點DSP晶元MC96002。還有DSP53611、16位DSP56800、24位的DSP563XX和MSC8101等產品。 傑爾公司傑爾公司的SC-1000和SC2000兩大系列的嵌入式DSP內核,主要面向電信基礎設施、移動通信、多媒體伺服器及其它新興應用。DSP晶元的選型參數根據應用場合和設計目標的不同,選擇DSP晶元的側重點也各不相同,其主要參數包括以下幾個方面: (1)運算速度:首先我們要確定數字信號處理的演算法,演算法確定以後其運算量和完成時間也就大體確定了,根據運算量.及其時間要求就可以估算DSP晶元運算速度的下限。在選擇DSP晶元時,各個晶元運算速度的衡量標准主要有:•MIPS (Millions of InstructionsPer Second),百萬條指令/秒,一般DSP為20-100M IPS,使用超長指令字的TMS320B2XX為2400M IPS 。必須指出的是這是定點DSP晶元運算速度的衡量指標,應注意的是,廠家提供的該指標一般是指峰值指標,因此,系統設計時應留有一定的裕量。•MOPS(Millions of OperationsPer Second),每秒執行百萬操作。這個指標的問題是什麼是一次操作,通常操作包括CPU操作外,還包括地址計算、DMA訪問數據傳輸、I/0操作等。一般說MOPS越高意味著乘積一累加和運算速度越快。MOPS可以對DSP晶元的性能進行綜合描述。•MFLOPS(Million Floating PointOperations Per Second),百萬次浮點操作/秒,這是衡量浮點DSP晶元的重.要指標。例如TMS320C31在主頻為40MHz時,處理能力為40MFLOPS,TMS320C6701在指令周期為6ns時,單精度運算可達1GFLOPS .浮點操作包括浮點乘法、加法、減法、存儲等操作。應注意的是,廠家提供的該指標一般是指峰值指標,因此,系統設計時應注意留有一定的裕量。•MBPS(Million Bit Per Second),它是對匯流排和I/0口數據吞吐率的度量,也就是某個匯流排或I/0的帶寬。例如對TMS320C6XXX, 200MHz時鍾、32bit匯流排時,匯流排數據吞吐率則為800Mbyte/s或6400MBPS。•ACS(Multiply-AccumulatesPer Second),例如TMS320C6XXX乘加速度達300MMACS-600MMACS。•指令周期,即執行一條指令所需的時間,通常以ns(納秒)為單位,如TMS320LC549-80在主頻為80MHz是的指令周期為12.5ns.•MAC時間,執行一次乘法和加法運算所花費的時間:大多數DSP晶元可以在一個指令周期內完成一次MAC運算。•FFT/FIR執行時間,運行一個N點FFT或N 點FIR程序的運算時間。由於FFT運算/FIR運算是數字信號處理的一個典型演算法,因此,該指標可以作為衡量晶元性能的綜合指標。表1是基於上述某些參數對一些DSP晶元所作的比較。(2)運算精度:一般情況下,浮點DSP晶元的運算精度要高於定點DSP晶元的運算精度,但是功耗和價格也隨之上升。一般定點DSP晶元的字長為16位、24位或者32位,浮點晶元的字長為32位。累加器一般都為32位或40位。定點DSP的特點是主頻高、速度快、成本低、功耗小,主要用於計算復雜度不高的控制、通信、語音/圖像、消費電子產品等領域。通常可以用定點器件解決的問題,盡量用定點器件,因為它經濟、速度快、成本低,功耗小。但是在編程時要關注信號的動態范圍,在代碼中增加限制信號動態范圍的定標運算,雖然我們可以通過改進演算法來提高運算精度,但是這樣做會相應增加程序的復雜度和運算量。浮點DSP的速度一般比定點DSP處理速度低,其成本和功耗都比定點DSP高,但是由於其採用了浮點數據格式,因而處理精度,動態范圍都遠高於定點DSP,適合於運算復雜度高,精度要求高的應用場合;即使是一般的應用,在對浮點DSP進行編程時,不必考慮數據溢出和精度不夠的問題,因而編程要比定點DSP方便、容易。因此說,運算精度要求是一個折衷的問題,需要根據經驗等來確定一個最佳的結合點。(3)字長的選擇:一般浮點DSP晶元都用32位的數據字,大多數定點DSP晶元是16位數據字。而Motorola公司定點晶元用24位數據字,以便在定點和浮點精度之間取得折衷。字長大小是影響成本的重要因素,它影響晶元的大小、引腳數以及存儲器的大小,設計時在滿足性能指標的條件下,盡可能選用最小的數據字。(4)存儲器等片內硬體資源安排:包括存儲器的大小,片內存儲器的數量,匯流排定址空間等。片內存儲器的大小決定了晶元運行速度和成本,例如TI公司同一系列的DSP晶元,不同種類晶元存儲器的配置等硬體資源各不相同。通過對演算法程序和應用目標的仔細分析可以大體判定對DSP晶元片內資源的要求。幾個重要的考慮因素是片內RAM和ROM的數量、可否外擴存儲器、匯流排介面/中斷/串列口等是否夠用、是否具有A/D轉換等。(5)開發調試工具:完善、方便的的開發工具和相關支持軟體是開發大型、復雜DSP系統的必備條件,對縮短產品的開發周期有很重要的作用。開發工具包括軟體和硬體兩部分。軟體開發工具主要包括:C編譯器、匯編器、鏈接器、程序庫、軟體模擬器等,在確定DSP演算法後,編寫的程序代碼通過軟體模擬器進行模擬運行,來確定必要的性能指標。硬體開發工具包括在線硬體模擬器和系統開發板。在線硬體模擬器通常是JTAG周邊掃描介面板,可以對設計的硬體進行在線調試;在硬體系統完成之前,不同功能的開發板上實時運行設計的DSP軟體,可以提高開發效率。甚至在有的數量小的產品中,直接將開發板當作最終產品。(6)功耗與電源管理:一般來說個人數字產品、便攜設備和戶外設備等對功耗有特殊要求,因此這也是一個該考慮的問題。它通常包括供電電壓的選擇和電源的管理功能。供電電壓一般取得比較低,實施晶元的低電壓供電,通常有3.3V,25V,I8V, 0.9V等,在同樣的時鍾頻率下,它們的功耗將遠遠低於5V供電電壓的晶元。加強了對電源的管理後,通常用休眠、等待模式等方式節省功率消耗。例如TI公司提供了詳細的、功能隨指令類型和處理器配置而改變的應用說明。(7)價格及廠家的售後服務因素:價格包括DSP晶元的價格和開發.工具的價格。如果採用昂貴的DSP晶元,即使性能再高,其應用范圍也肯定受到一定的限制。但低價位的晶元必然是功能較少、片內存儲器少、性能上差一些的,這就帶給編程一定的困難。因此,要根據實際系統的應用情況,確定一個價格適中的DSP晶元。還要充分考慮廠家提供的的售後服務等因素,良好的售後技術支持也是開發過程中重要資源(8)其他因素:包括DSP晶元的封裝形式、環境要求、供貨周期、生命周期等。DSP應用選型型舉例面向數字控制、運動控制的DSP系統開發的DSP晶元選型面向數字控制、運動控制主.要有磁碟驅動控制、引擎控制、激光列印機控制、噴繪機控制、馬達控制、電力系統控制、機器人控制、高精度伺服系統控制、數控機床等。當然這些主要是針對數字運動控制系統設計的應用,在這些系統的控制中,不僅要求有專門用於數字控制系統的外設電路,而且要求晶元具有數字信號處理器的一般特徵。例如在控制直流無刷電動機的DSP控制系統中,直流無刷電機運行過程要進行兩種控制,一種是轉速控制,也即控制提供給定子線圈的電流;另一種是換相控制,在轉子到達指定位置改變定子導通相,實現定子磁場改變,這種控制實際上實現了物理電刷的機制。因此這種電機需要有位置反饋機制,比如霍爾元件、光電碼盤,或者利用梯形反電動勢特點進行反電動勢過零檢測等。電機速度控制也是根據位置反饋信號,計算出轉子速度,再利用PI或PID等控制方法,實時調整PWM占空比等來實現定子電流調節。因此,控制晶元要進行較多的計算過程。當然也有專門的直流無刷電機控制晶元;但一般來說,在大多數應用中,除了電機控制,總還需要做一些其他的控制和通信等事情,所以,選用帶屍WIVI ,同時又有較強數學運算功能的晶元也是一種很好的選擇。Motorola的數字信號處理器DSP568xx系列整合了通用數字信號處理器快速運算功能和單片機外圍豐富的特點,使得該系列特別適合於那些要求有較強的數據處理能力,同時又要有較多控制功能的應用中,對直流無刷電機的控制就是這一系列DSP的典型應用之一。除此之外,數字運動控領域還有TI公司的丁M S320C24x系列,TMS320Lx240xx系列,特別是TMS320LF2407A在控制方面得到了非常廣泛的應用,TMS320LF2407A作為一款專門面向數字控制系統進行優化的通用可編程微處理器,不僅具有低功耗和代碼保密的特點,而且它集成了極強的數字信號處理能力,又集成了數字控制系統所必需的輸入、輸出、A/D轉換、事件捕捉等外設,其時鍾頻率為40MHz,指令周期小於50ns,採用改進的哈佛結構和流水線技術,在一個指令周期內可以執行幾條指令。從運行速度,精度角度來講上述兩款晶元相差無幾,但是TMS320LF2407A的調試開發環境CCCS)更加成熟,可參考的資料也更豐富,這樣無疑會減少開發周期。面向低功耗、手持設備、無線終 端應用的DSP晶元選型C54X, C54XX, C55X相比其它一系列的主要特點是低功耗,所以最適合個人與攜帶型上網以及無線通信應用,如手機、PDA、GPS等應用。處理速度在80---400M IPS之間。C54XX和C55XX一般只具有McBSP同步串口、HPI並行介面、定時器、DMA等外設。值得注意的是C55XX提供了EMIF外部存儲器擴展介面,可以直接使用SDRAM,而C54XX則不能直接使用。
⑦ 什麼是dsp技術
20世紀60年代以來,隨著計算機和信息技術的飛速發展,數字信號處理技術應運而生並得到迅速的發展。在過去的二十多年時間里,數字信號處理已經在通信等領域得到極為廣泛的應用。數字信號處理是利用計算機或專用處理設備,以數字形式對信號進行採集、變換、濾波、估值、增強、壓縮、識別等處理,以得到符合人們需要的信號形式。數字信號處理是圍繞著數字信號處理的理論、實現和應用等幾個方面發展起來的。數字信號處理在理論上的發展推動了數字信號處理應用的發展。反過來,數字信號處理的應用又促進了數字信號處理理論的提高。而數字信號處理的實現則是理論和應用之間的橋梁。數字信號處理是以眾多學科為理論基礎的,它所涉及的范圍極其廣泛。例如,在數學領域,微積分、概率統計、隨機過程、數值分析等都是數字信號處理的基本工具,與網路理論、信號與系統、控制論、通信理論、故障診斷等也密切相關。近來新興的一些學科,如人工智慧、模式識別、神經網路等,都與數字信號處理密不可分。可以說,數字信號處理是把許多經典的理論體系作為自己的理論基礎,同時又使自己成為一系列新興學科的理論基礎。世界上第一個單片DSP晶元應當是1978年AMI公司發布的S2811,1979年美國Intel公司發布的商用可編程器件2920是DSP晶元的一個主要里程碑。這兩種晶元內部都沒有現代DSP晶元所必須有的單周期乘法器。1980年,日本NEC公司推出的μPD7720是第一個具有乘法器的商用DSP晶元。在這之後,最成功的DSP晶元當數美國德州儀器公司(TexasInstruments,簡稱TI)的一系列產品。TI公司在1982年成功推出其第一代DSP晶元TMS32010及其系列產品TMS32011、TMS320C10/C14/C15/C16/C17等,之後相繼推出了第二代DSP晶元TMS32020、TMS320C25/C26/C28,第三代DSP晶元TMS320C30/C31/C32,第四代DSP晶元TMS320C40/C44,第五代DSP晶元TMS320C5X/C54X,第二代DSP晶元的改進型TMS320C2XX,集多片DSP晶元於一體的高性能DSP晶元TMS320C8X以及目前速度最快的第六代DSP晶元TMS320C62X/C67X等。TI將常用的DSP晶元歸納為三大系列,即:TMS320C2000系列(包括TMS320C2X/C2XX)、TMS320C5000系列(包括TMS320C5X/C54X/C55X)、TMS320C6000系列(TMS320C62X/C67X)。如今,TI公司的一系列DSP產品已經成為當今世界上最有影響的DSP晶元。TI公司也成為世界上最大的DSP晶元供應商,其DSP市場份額佔全世界份額近50%。DSP處理器與通用處理器的比較考慮一個數字信號處理的實例,比如有限沖擊響應濾波器(FIR)。用數學語言來說,FIR濾波器是做一系列的點積。取一個輸入量和一個序數向量,在系數和輸入樣本的滑動窗口間作乘法,然後將所有的乘積加起來,形成一個輸出樣本。 類似的運算在數字信號處理過程中大量地重復發生,使得為此設計的器件必須提供專門的支持,促成了了DSP器件與通用處理器(GPP)的分流:1、對密集的乘法運算的支持GPP不是設計來做密集乘法任務的,即使是一些現代的GPP,也要求多個指令周期來做一次乘法。而DSP處理器使用專門的硬體來實現單周期乘法。DSP處理器還增加了累加器寄存器來處理多個乘積的和。累加器寄存器通常比其他寄存器寬,增加稱為結果bits的額外bits來避免溢出。同時,為了充分體現專門的乘法-累加硬體的好處,幾乎所有的DSP的指令集都包含有顯式的MAC指令。2、存儲器結構傳統上,GPP使用馮.諾依曼存儲器結構。這種結構中,只有一個存儲器空間通過一組匯流排(一個地址匯流排和一個數據匯流排)連接到處理器核。通常,做一次乘法會發生4次存儲器訪問,用掉至少四個指令周期。大多數DSP採用了哈佛結構,將存儲器空間劃分成兩個,分別存儲程序和數據。它們有兩組匯流排連接到處理器核,允許同時對它們進行訪問。這種安排將處理器存貯器的帶寬加倍,更重要的是同時為處理器核提供數據與指令。在這種布局下,DSP得以實現單周期的MAC指令。還有一個問題,即現在典型的高性能GPP實際上已包含兩個片內高速緩存,一個是數據,一個是指令,它們直接連接到處理器核,以加快運行時的訪問速度。從物理上說,這種片內的雙存儲器和匯流排的結構幾乎與哈佛結構的一樣了。然而從邏輯上說,兩者還是有重要的區別。GPP使用控制邏輯來決定哪些數據和指令字存儲在片內的高速緩存里,其程序員並不加以指定(也可能根本不知道)。與此相反,DSP使用多個片內存儲器和多組匯流排來保證每個指令周期內存儲器的多次訪問。在使用DSP時,程序員要明確地控制哪些數據和指令要存儲在片內存儲器中。程序員在寫程序時,必須保證處理器能夠有效地使用其雙匯流排。此外,DSP處理器幾乎都不具備數據高速緩存。這是因為DSP的典型數據是數據流。也就是說,DSP處理器對每個數據樣本做計算後,就丟棄了,幾乎不再重復使用。3、零開銷循環如果了解到DSP演算法的一個共同的特點,即大多數的處理時間是花在執行較小的循環上,也就容易理解,為什麼大多數的DSP都有專門的硬體,用於零開銷循環。所謂零開銷循環是指處理器在執行循環時,不用花時間去檢查循環計數器的值、條件轉移到循環的頂部、將循環計數器減1。與此相反,GPP的循環使用軟體來實現。某些高性能的GPP使用轉移預報硬體,幾乎達到與硬體支持的零開銷循環同樣的效果。4、定點計算大多數DSP使用定點計算,而不是使用浮點。雖然DSP的應用必須十分注意數字的精確,用浮點來做應該容易的多,但是對DSP來說,廉價也是非常重要的。定點機器比起相應的浮點機器來要便宜(而且更快)。為了不使用浮點機器而又保證數字的准確,DSP處理器在指令集和硬體方面都支持飽和計算、舍入和移位。5、專門的定址方式DSP處理器往往都支持專門的定址模式,它們對通常的信號處理操作和演算法是很有用的。例如,模塊(循環)定址(對實現數字濾波器延時線很有用)、位倒序定址(對FFT很有用)。這些非常專門的定址模式在GPP中是不常使用的,只有用軟體來實現。 6、執行時間的預測大多數的DSP應用(如蜂窩電話和數據機)都是嚴格的實時應用,所有的處理必須在指定的時間內完成。這就要求程序員准確地確定每個樣本需要多少處理時間,或者,至少要知道,在最壞的情況下,需要多少時間。如果打算用低成本的GPP去完成實時信號處理的任務,執行時間的預測大概不會成為什麼問題,應為低成本GPP具有相對直接的結構,比較容易預測執行時間。然而,大多數實時DSP應用所要求的處理能力是低成本GPP所不能提供的。這時候,DSP對高性能GPP的優勢在於,即便是使用了高速緩存的DSP,哪些指令會放進去也是由程序員(而不是處理器)來決定的,因此很容易判斷指令是從高速緩存還是從存儲器中讀取。DSP一般不使用動態特性,如轉移預測和推理執行等。因此,由一段給定的代碼來預測所要求的執行時間是完全直截了當的。從而使程序員得以確定晶元的性能限制。7、定點DSP指令集定點DSP指令集是按兩個目標來設計的:·使處理器能夠在每個指令周期內完成多個操作,從而提高每個指令周期的計算效率。·將存貯DSP程序的存儲器空間減到最小(由於存儲器對整個系統的成本影響甚大,該問題在對成本敏感的DSP應用中尤為重要)。為了實現這些目標,DSP處理器的指令集通常都允許程序員在一個指令內說明若干個並行的操作。例如,在一條指令包含了MAC操作,即同時的一個或兩個數據移動。在典型的例子里,一條指令就包含了計算FIR濾波器的一節所需要的所有操作。這種高效率付出的代價是,其指令集既不直觀,也不容易使用(與GPP的指令集相比)。GPP的程序通常並不在意處理器的指令集是否容易使用,因為他們一般使用象C或C++等高級語言。而對於DSP的程序員來說,不幸的是主要的DSP應用程序都是用匯編語言寫的(至少部分是匯編語言優化的)。這里有兩個理由:首先,大多數廣泛使用的高級語言,例如C,並不適合於描述典型的DSP演算法。其次,DSP結構的復雜性,如多存儲器空間、多匯流排、不規則的指令集、高度專門化的硬體等,使得難於為其編寫高效率的編譯器。即便用編譯器將C源代碼編譯成為DSP的匯編代碼,優化的任務仍然很重。典型的DSP應用都具有大量計算的要求,並有嚴格的開銷限制,使得程序的優化必不可少(至少是對程序的最關鍵部分)。因此,考慮選用DSP的一個關鍵因素是,是否存在足夠的能夠較好地適應DSP處理器指令集的程序員。8、開發工具的要求因為DSP應用要求高度優化的代碼,大多數DSP廠商都提供一些開發工具,以幫助程序員完成其優化工作。例如,大多數廠商都提供處理器的模擬工具,以准確地模擬每個指令周期內處理器的活動。無論對於確保實時操作還是代碼的優化,這些都是很有用的工具。GPP廠商通常並不提供這樣的工具,主要是因為GPP程序員通常並不需要詳細到這一層的信息。
⑧ 同一C語言程序寫進不同型號的DSP晶元,他們結果相同嗎
看看你所用到的功能在這兩個不同型號的晶元說明書里軟體操作上,功能上是否有差別。如果沒有差別,編譯正常 且外圍電路都一樣能正常工作的話,結果電路所完成的功能一般都會相同。只是不同晶元,性能不一樣,執行速度等都有所差別