從事多年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。
其qi實shi一yi個ge係xi統tong的de完wan成cheng,係xi統tong的de規gui劃hua是shi最zui重zhong要yao的de,在zai規gui劃hua時shi對dui硬ying件jian設she計ji的de知zhi識shi和he認ren識shi是shi決jue定ding性xing的de,它ta可ke以yi讓rang你ni知zhi道dao什shen麼me是shi可ke行xing的de,什shen麼me是shi不bu可ke行xing的de,當dang你ni同tong時shi具ju有you軟ruan件jian設she計ji能neng力li時shi,就jiu可ke以yi合he理li的de分fen配pei係xi統tong功gong能neng,完wan成cheng使shi用yongVHDL進行係統行為描述-—係統功能劃分—— 係統子結構設計這樣的自頂向下的設計規劃流程,成為係統設計專家、項目經理,否則隻是硬件工程師、軟件工程師。無論作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公分以內,實在不行加入光耦隔離、采用隔離電源。切記電源線、地線的幹擾遠比信號幹擾對係統的危害大得多,又常常被人忽視。電路板工作正常的先決條件就是電源正常!dangfenbandianluzhengchanghouzaigengjuqingkuangshejizhengbandianlu。zaitiaoshishifaxiandewentiyidingyaozhaodaoyuanyinjiejue,jishishifeixian,gexian,buyaojixiwangyuxiayibangailezaikan,chufeiyuanlixingcuowu。meiyigegongnenghuanjieduozhunbeijitaofangan。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)往(wang)PID甚至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)對(dui)5410也就用很熟了的,當然主要還是講在算法方麵。這個項目太概做了四個月吧,係統程序是自己編寫的,主要有如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上可以存放數據和程序的實際空間(包括外部存儲器),我(wo)們(men)的(de)數(shu)據(ju)和(he)程(cheng)序(xu)最(zui)終(zhong)放(fang)到(dao)物(wu)理(li)空(kong)間(jian)上(shang),但(dan)我(wo)們(men)並(bing)不(bu)能(neng)直(zhi)接(jie)訪(fang)問(wen)它(ta)們(men)。我(wo)們(men)要(yao)訪(fang)問(wen)物(wu)理(li)空(kong)間(jian),必(bi)須(xu)借(jie)助(zhu)於(yu)映(ying)射(she)空(kong)間(jian)才(cai)行(xing)。但(dan)是(shi)映(ying)射(she)空(kong)間(jian)本(ben)身(shen)是(shi)個(ge)“虛”空間,是個不存在的空間。所以,往往是映射空間遠遠大於實際的物理空間,有些映射空間,如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可編程電源,賦能高端裝備製造
技術文章更多>>
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
- 從技術研發到規模量產:恩智浦第三代成像雷達平台,賦能下一代自動駕駛!
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
按鈕開關
白色家電
保護器件
保險絲管
北鬥定位
北高智
貝能科技
背板連接器
背光器件
編碼器型號
便攜產品
便攜醫療
變容二極管
變壓器
檳城電子
並網
撥動開關
玻璃釉電容
剝線機
薄膜電容
薄膜電阻
薄膜開關
捕魚器
步進電機
測力傳感器
測試測量
測試設備
拆解
場效應管
超霸科技



