從事多年DSP開發工程師——全方位剖析DSP
發布時間:2015-04-17 責任編輯:sherry
【導讀】本篇文章講解的是一位從事多年DSP開發的工程師根據自己的經驗分享的在DSP技術設計中的一些感受和技巧,這些東西很多事對於現在剛入門DSP技術的菜鳥是“未知領域”,先來學習學習做到“未雨綢繆”總沒有壞處。
說起來自己已經從事DSP技術開發有幾年了,看到許多朋友對DSP的開發非常感興取,結合這幾年對DSP的開發寫一寫自己的感受,一家之言,歡迎指教。自己上研究生的第一天起根據老板的安排就開始接觸DSP,那時DSP開發在國內高校剛剛開始,一台DSP開發器接近一萬還是ISA總線的,從206開始240、2407A都作過產品,對5402、2812、5471在產品方案規劃製定和論證時也研究過。由於方向所限對6X、8X係列沒有接觸。
在(zai)國(guo)內(nei)無(wu)論(lun)在(zai)公(gong)司(si)或(huo)高(gao)校(xiao)許(xu)多(duo)地(di)方(fang)為(wei)了(le)加(jia)快(kuai)開(kai)發(fa)周(zhou)期(qi)往(wang)往(wang)把(ba)一(yi)個(ge)產(chan)品(pin)開(kai)發(fa)分(fen)為(wei)硬(ying)件(jian)和(he)軟(ruan)件(jian)兩(liang)個(ge)相(xiang)對(dui)獨(du)立(li)部(bu)分(fen),由(you)不(bu)同(tong)的(de)人(ren)完(wan)成(cheng)。這(zhe)在(zai)具(ju)有(you)一(yi)定(ding)技(ji)術(shu)和(he)管(guan)理(li)基(ji)礎(chu)的(de)公(gong)司(si),由(you)總(zong)設(she)計(ji)師(shi)統(tong)一(yi)規(gui)劃(hua)協(xie)調(tiao),分(fen)任(ren)務(wu)並(bing)行(xing)完(wan)成(cheng)的(de)情(qing)況(kuang)下(xia)是(shi)可(ke)行(xing)的(de),也(ye)是(shi)符(fu)合(he)現(xian)代(dai)產(chan)品(pin)開(kai)發(fa)規(gui)律(lv)的(de)。但(dan)是(shi)在(zai)高(gao)校(xiao)人(ren)員(yuan)的(de)流(liu)動(dong)很(hen)大(da),研(yan)究(jiu)生(sheng)的(de)有(you)效(xiao)科(ke)研(yan)時(shi)間(jian)很(hen)短(duan)、基礎差(許多研究生起步時對電熔、電阻、三極管的分類和選型都很困難)更不用說係統規劃設計了,況且許多老板自己也不太懂,師兄有自己的任務,他們搞明白時也畢業了。在許多高校做DSPjiushizhaoyigesuanfajiadaozijidezhuchengxuli,zaibanzishangpaoyixia,jibendadaoxiaoguojiukeyile,zhiyukekaoxingshiciyaode,chanyehuawucongtanqi,zheyijingsuanbucuodele。
qishiyigexitongdewancheng,xitongdeguihuashizuizhongyaode,zaiguihuashiduiyingjianshejidezhishiherenshishijuedingxingde,takeyirangnizhidaoshenmeshikexingde,shenmeshibukexingde,dangnitongshijuyouruanjianshejinenglishi,jiukeyihelidefenpeixitonggongneng,wanchengshiyongVHDL進行係統行為描述-—係統功能劃分—— 係統子結構設計這樣的自頂向下的設計規劃流程,成為係統設計專家、項目經理,否則隻是硬件工程師、軟件工程師。無論作51、196、還是DSP都是這樣。
下麵分別談談對硬件和軟件設計的感受
硬(ying)件(jian)設(she)計(ji)是(shi)係(xi)統(tong)設(she)計(ji)的(de)關(guan)鍵(jian),國(guo)內(nei)和(he)國(guo)外(wai)產(chan)品(pin)的(de)差(cha)距(ju)往(wang)往(wang)是(shi)硬(ying)件(jian)設(she)計(ji)水(shui)平(ping)高(gao)低(di)決(jue)定(ding)的(de),任(ren)何(he)軟(ruan)件(jian)設(she)計(ji)思(si)想(xiang)沒(mei)有(you)可(ke)靠(kao)的(de)物(wu)理(li)載(zai)體(ti)都(dou)是(shi)空(kong)中(zhong)樓(lou)閣(ge),紙(zhi)上(shang)談(tan)兵(bing)。學(xue)校(xiao)的(de)研(yan)究(jiu)生(sheng)很(hen)多(duo)都(dou)想(xiang)避(bi)開(kai)硬(ying)件(jian)設(she)計(ji),對(dui)於(yu)一(yi)個(ge)全(quan)新(xin)的(de)設(she)計(ji)與(yu)其(qi)說(shuo)不(bu)屑(xie)不(bu)如(ru)說(shuo)不(bu)敢(gan)。試(shi)想(xiang)一(yi)下(xia)燒(shao)幾(ji)個(ge)片(pian)子(zi)的(de)壓(ya)力(li)要(yao)比(bi)跑(pao)飛(fei)幾(ji)段(duan)程(cheng)序(xu)的(de)壓(ya)力(li)大(da)的(de)多(duo),尤(you)其(qi)是(shi)功(gong)率(lv)器(qi)件(jian),一(yi)旦(dan)燒(shao)掉(diao),弄(nong)不(bu)好(hao)火(huo)光(guang)衝(chong)天(tian),人(ren)的(de)自(zi)信(xin)都(dou)沒(mei)了(le)。況(kuang)且(qie)改(gai)一(yi)次(ci)板(ban)周(zhou)期(qi)長(chang),經(jing)費(fei)高(gao),還(hai)不(bu)知(zhi)行(xing)不(bu)行(xing)。其(qi)實(shi)在(zai)國(guo)外(wai)實(shi)力(li)一(yi)般(ban)的(de)公(gong)司(si)也(ye)是(shi)盡(jin)量(liang)避(bi)免(mian)硬(ying)件(jian)的(de)更(geng)新(xin)設(she)計(ji),產(chan)品(pin)一(yi)旦(dan)定(ding)型(xing)往(wang)往(wang)通(tong)過(guo)軟(ruan)件(jian)升(sheng)級(ji),這(zhe)是(shi)公(gong)司(si)的(de)發(fa)展(zhan)策(ce)略(lve),對(dui)個(ge)人(ren)而(er)言(yan)物(wu)以(yi)希(xi)為(wei)貴(gui),培(pei)養(yang)一(yi)個(ge)硬(ying)件(jian)設(she)計(ji)師(shi)往(wang)往(wang)要(yao)比(bi)軟(ruan)件(jian)設(she)計(ji)師(shi)時(shi)間(jian)長(chang)花(hua)費(fei)多(duo)。在(zai)設(she)計(ji)dsp硬(ying)件(jian)時(shi),開(kai)始(shi)設(she)計(ji)最(zui)小(xiao)係(xi)統(tong)板(ban),係(xi)統(tong)按(an)功(gong)能(neng)分(fen)板(ban)設(she)計(ji)調(tiao)試(shi),注(zhu)意(yi)分(fen)板(ban)電(dian)路(lu)的(de)穩(wen)定(ding)性(xing)可(ke)能(neng)不(bu)如(ru)整(zheng)板(ban)電(dian)路(lu),要(yao)多(duo)加(jia)入(ru)抗(kang)幹(gan)擾(rao)環(huan)節(jie),分(fen)板(ban)間(jian)的(de)引(yin)線(xian)包(bao)括(kuo)電(dian)源(yuan)線(xian)地(di)線(xian)要(yao)短(duan),盡(jin)量(liang)在(zai)10公分以內,實在不行加入光耦隔離、采用隔離電源。切記電源線、地線的幹擾遠比信號幹擾對係統的危害大得多,又常常被人忽視。電路板工作正常的先決條件就是電源正常!當dang分fen板ban電dian路lu正zheng常chang後hou再zai更geng居ju情qing況kuang設she計ji整zheng板ban電dian路lu。在zai調tiao試shi時shi發fa現xian的de問wen題ti一yi定ding要yao找zhao到dao原yuan因yin解jie決jue,即ji使shi是shi飛fei線xian,割ge線xian,不bu要yao寄ji希xi望wang於yu下xia一yi板ban改gai了le再zai看kan,除chu非fei原yuan理li性xing錯cuo誤wu。每mei一yi個ge功gong能neng環huan節jie多duo準zhun備bei幾ji套tao方fang案an。DSP的選型要根據係統功能而定,2000是一個功能比較全的控製器,但運算性能相對低,但目前大部分控製類、家電類包括中低層次的工業總線通信產品足夠了,281X不錯但太貴,而且開發技術不成熟。54XX更像一個協處理器,其實高端產品5471就很好,功能完善,但BGA封裝對產品的開發有一定難度。如果沒有從事過嵌入式係統開發的朋友其實可以從51看起,許多思想是共通的,51很經典沒有哪一款微處理器像51那樣使用持久和普遍。在硬件設計時更多的精力放在外圍電路設計上,外圍電路設計的靈活性要比DSP本身高得多,難度大得多。建議多考慮CPLD。

ruanjianshejishang,zheyandianbuyaojinjuxianyumouzhongsuanfahekongzhicelve,ershiruanjianxitongkuangjiadezhiding,jicaozuoxitongdexuanzeheshixian,suanfahekongzhicelvezhishiqizhongjiqiaoxinghenqiangdezichengxuhezichengxujiancanshuxianghuguanxi,jianyishejiruanjianshinengjuyoucaozuoxitong、數據結構和編譯原理方麵的知識,特別是使用C。對DSP的內部硬件結構一定要掌握,特別是中斷結構和流程、流水線操作,不然飛都不知道怎麼飛的。在語言選擇上當時是這麼給自己規定的:先編20個左右的彙編程序,每個代碼量超過4K,使用語句範圍覆蓋全部語句的60%-70%,在此基礎上使用C。現在發現用C構建程序的主體框架(操作係統)比較快而其不容易出錯,(現在正在用ASM根據UCOSII的思想重寫自己的操作係統)但對係統實時性影響比較大的運算算法一般采用MATLAB——C——ASM的辦法仿真調試優化,這裏的優化不單單是利用優化器優化,而是根據數據的特點改變運算方法,以除法為例C裏的/號其實掩蓋了許多技巧,當除數為常數時就可以放大倒數移位相乘移位的辦法進行,精度高速度快。這些辦法隻有掌握了ASM語言並用ASM語yu言yan思si考kao才cai會hui熟shu練lian應ying用yong。另ling外wai想xiang告gao訴su一yi些xie作zuo算suan法fa特te別bie是shi控kong製zhi算suan法fa的de朋peng友you,千qian萬wan不bu要yao隨sui意yi評ping判pan一yi個ge算suan法fa的de優you劣lie,在zai程cheng序xu中zhong程cheng序xu和he代dai碼ma優you化hua的de程cheng度du往wang往wang影ying響xiang了le控kong製zhi效xiao果guo好hao壞huai,而er不bu是shi算suan法fa本ben身shen的de思si想xiang。其qi實shi在zai實shi際ji中zhong往wang往wangPID甚至PI、PD就夠了,神經元、模糊、小(xiao)波(bo)適(shi)用(yong)於(yu)研(yan)究(jiu)和(he)寫(xie)論(lun)文(wen),模(mo)糊(hu)在(zai)實(shi)際(ji)中(zhong)用(yong)的(de)多(duo)一(yi)點(dian),主(zhu)要(yao)是(shi)小(xiao)日(ri)本(ben)用(yong)的(de)比(bi)較(jiao)成(cheng)熟(shu),再(zai)恨(hen)日(ri)本(ben)人(ren),這(zhe)點(dian)也(ye)服(fu)氣(qi),小(xiao)日(ri)本(ben)就(jiu)是(shi)滑(hua),許(xu)多(duo)物(wu)理(li)現(xian)象(xiang)搞(gao)不(bu)透(tou),就(jiu)用(yong)這(zhe)法(fa),還(hai)管(guan)用(yong),題(ti)外(wai)話(hua)。
最後想說的是當麵對市場要求時,產品往往考慮的是可靠性、性能、價格而不是你用的什麼芯片,在滿足性能的基礎上結構越簡單就越可靠,芯片越通用價格就越低,能用51就不用196,能用2407就不用2812,除非把芯片本身作買點利用高成本贏取高利潤。無論2000還是5000、6000係列都有市場前景,關鍵是要做深做透。
獲取知識的方法、處理項目的能力是相通的,具體的說就是不要把目光盯在做硬件還是做軟件上,用ASM還是C,要勤動手打好基礎,提高自己對係統總體設計的能力,從係統的眼光看問題。為什麼都是做DSP的有的畢業拿3000,有的5000、8000,除了運氣和關係外,重要的是你對事物的認識深度和高度。自己一直都記住這句話:有前途的人做什麼都有前途,沒前途的人做什麼都沒前途。
與其說是鑽在裏麵,畢業設計是搞240,在老師的壓力下做出了一點東西,這期間主要是對DSP的各種基礎知識的熟悉與理解,對DSP的真正深入是在公司工作以後。當初進公司,因為正有一個項目需要用5410接手。說實話,在學校期間自己5000的書都沒有看過一眼,可沒辦法,隻能靠自己了。不過好的是自己2000DSP的基礎很好。接過項目後,第一個星期就全部看的是5000的指令,DSP的de結jie構gou倒dao沒mei怎zen麼me看kan,因yin為wei項xiang目mu硬ying件jian已yi成cheng型xing,主zhu要yao是shi算suan法fa。這zhe樣yang,花hua了le一yi個ge星xing期qi熟shu悉xi指zhi令ling與yu項xiang目mu相xiang關guan的de程cheng序xu,第di二er個ge星xing期qi也ye就jiu開kai始shi編bian程cheng了le。半ban個ge月yue以yi後hou對dui5410也就用很熟了的,當然主要還是講在算法方麵。這個項目太概做了四個月吧,係統程序是自己編寫的,主要有如64位加減乘除乘方開方、及時域方麵的一些算法。現在又做一個控製係統,用2407開發的,硬件主要有直交變頻,並把2407的所有外設資源全部用到了。現在自己可以這樣自誇一句吧:TI的2000係列與5000係列的自己都熟悉,要以此做個係統,沒問題。上麵是把自己搞DSP的經曆簡單說了一下的吧,在這裏想對正在學及想學DSP的難兄們說一句的是,DSP並不是很難。當然,這個前提是你的基礎要好,自己本身單片機,接口都還行,當初就是從單片機改成DSP的。有了單片機的基礎再去學2000第列的DSP(下麵的DSP單指2000係列,另有說明為止),你就可以把DSP看成一個super microcontroller了。相比之下,DSP除了比單片機多了更豐的外設接口(SPI,SCI、CAN、PWM、CAP、QEP等等),他就是一塊單片機,隻不過在單片機來說你要另加芯片的工作,DSP全部把它做在一塊芯片去了,現在看DSP也真就這麼簡單。前麵有人提到DSP主要是做算法,這句話有一定的片麵性: TI有很多係列的DSP,現在主流的DSP主要為2000係列、3000係列、4000係列、5000係列、6000係列。除了2000與5000係列是定點DSP外,其餘的均為浮點係列。 TI的2000係列主要長處是在用於控製係統,因為它的資源非常豐富,前麵提到,在控製係統中用到的一些外設2000係列均在片內集成了。 TI的5000係列主要長處是用於數字信號的算法處理,這裏所講算法處理主要是指在數字信號處理時的一些算法,如FIR、IIR、FFT等等。5000係列的DSP的速度比2000快,2407最快隻能到40M,2800係列除外,5410的DSP可以達到160M,如現在我們主要用來做數字信號方麵的處理以及簡單的靜態圖像處理等這樣一些在資源需要處於中等的一些算法。 TI的6000係列主要是用在實時圖像處理,這個就更則重於算法處理。一般的硬件很少自製,我們是用TI的DSK板再加上自主板相結合。
[page]
使用C/C++語言編寫基於DSP程序的注意事項
1、 不影響執行速度的情況下,可以使用c或c/c++語言提供的函數庫,也可以自己設計函數,這樣更易於使用“裁縫師”優化處理,例如:進行絕對值運算,可以調用fabs()或abs()函數,也可以使用if...else...判斷語句來替代。
2、 要非常謹慎地使用局部變量,根據自己項目開發的需要,應盡可能多地使用全局變量和靜態變量。
3、 一定要非常重視中斷向量表的問題,很多朋友對中斷向量表的調用方式不清楚。其實中斷向量表中的中斷名是任意取定的,dsp是不認名字的,它隻認地址。中斷向量表要重新定位。這一點很重要。
4、 要明確dsp軟件開發的第一步是對可用存儲空間的分析,存儲空間分配好壞關係到一個dsp程序員的水平。對於dsp,我們有兩種名稱的存儲空間,一種是物理空間,另一種是映射空間。物理空間是dsp上可以存放數據和程序的實際空間(包括外部存儲器),womendeshujuhechengxuzuizhongfangdaowulikongjianshang,danwomenbingbunengzhijiefangwentamen。womenyaofangwenwulikongjian,bixujiezhuyuyingshekongjiancaixing。danshiyingshekongjianbenshenshige“虛”空間,是個不存在的空間。所以,往往是映射空間遠遠大於實際的物理空間,有些映射空間,如io映射空間,它本身還代表了一種接口。隻有那些物理空間映射到的映射空間才是我們真正可訪問(讀或寫)的存儲空間。
5、 盡可能地減少除法運算,而盡可能多地使用乘法和加法運算代替。
6、 如果ti公司或第三方軟件合作商提供了dsplib或其他的合法子程序庫供調用,應盡可能地調用使用。這些子程序均使用用彙編寫成,更為重要之處是通過了tms320算法標準測試。而且,常用的數字信號處理算法均有包括。
7、 盡可能地采用內聯函數。而不用一般的函數。可以提高代碼的集成度。
8、 編程風格力求簡煉。盡可能用c語言而不用c++語言。個人感到雖然c++終代碼長了一些,好象對執行速度沒有影響。
9、 因為在c5000中double型和float型均占有2個字,所以都可以使用,而且,可以直接將int型賦給float型或double型,但,盡可能地多使用int數據類型代替。這一點需要注意。
10、 程序最後至少要加上一個空行,編譯器當這個空行為結尾提示符。
11、 大膽使用位運算符,非常好用。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 三星上演罕見對峙:工會集會討薪,股東隔街抗議
- 摩爾線程實現DeepSeek-V4“Day-0”支持,國產GPU適配再提速
- 築牢安全防線:智能駕駛邁向規模化應用的關鍵挑戰與破局之道
- GPT-Image 2:99%文字準確率,AI生圖告別“鬼畫符”
- 機器人馬拉鬆的勝負手:藏在主板角落裏的“時鍾戰爭”
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
NFC
NFC芯片
NOR
ntc熱敏電阻
OGS
OLED
OLED麵板
OmniVision
Omron
OnSemi
PI
PLC
Premier Farnell
Recom
RF
RF/微波IC
RFID
rfid
RF連接器
RF模塊
RS
Rubycon
SATA連接器
SD連接器
SII
SIM卡連接器
SMT設備
SMU
SOC
SPANSION

