论坛风格切换切换到宽版
发帖 回复
返回列表
12
  提醒:不能用迅雷等P2P下载,否则下载失败标(二级)的板块,需二级才能下载,没二级不要购买,下载不了
  • 1984阅读
  • 18回复

[技术讨论]DSP高手的经历 [复制链接]

上一主题 下一主题
离线yyyy138
 

性别:
人妖
发帖
182
金币
263
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看楼主 倒序阅读 使用道具 0楼 发表于: 2016-11-11
— 本帖被 老吴 从 DSP技术 移动到本区(2017-05-12) —
1Lz`.%k`:  
一. 我是已经从事DSP开发有几年了,看到许多朋友对DSP的开发非常感兴取,我结合这几年对DSP的开发写一写自己的感受,一家之言,欢迎指教。我上研究生的第一天起根据老板的安排就开始接触DSP,那时DSP开发在国内高校刚刚开始,一台DSP开发器接近一万还是ISA总线的,我从206开始240、2407A都作过产品,对5402、2812、5471在产品方案规划制定和论证时也研究过。由于方向所限对6X、8X系列没有接触。 oc' #sE  
我发现在国内无论在公司或高校许多地方为了加快开发周期往往把一个产品开发分为硬件和软件两个相对独立部分,由不同的人完成。这在具有一定技术和管理基础的公司,由总设计师统一规划协调,分任务并行完成的情况下是可行的,也是符合现代产品开发规律的。但是在高校人员的流动很大,研究生的有效科研时间很短、基础差(许多研究生起步时对电熔、电阻、三极管的分类和选型都很困难,我也是这样过来的)更不用说系统规划设计了,况且许多老板自己也不太懂,师兄有自己的任务,他们搞明白时也毕业了。在许多高校做DSP就是找一个算法加到自己的主程序里,在板子上跑一下,基本达到效果就可以了,至于可靠性是次要的,产业化无从谈起,这已经算不错的了。 '&Ox,i]t  
其实我觉得一个系统的完成,系统的规划是最重要的,在规划时对硬件设计的知识和认识是决定性的,它可以让你知道什么是可行的,什么是不可行的,当你同时具有软件设计能力时,就可以合理的分配系统功能,完成使用VHDL进行系统行为描述-—系统功能划分—— 系统子结构设计这样的自顶向下的设计规划流程,成为系统设计专家、项目经理,否则只是硬件工程师、软件工程师。无论作51、196、还是DSP都是这样。 UXD?gK1  
下面分别谈谈我对硬件和软件设计的感受 Nge_ Ks  
硬件设计是系统设计的关键,国内和国外产品的差距往往是硬件设计水平高低决定的,任何软件设计思想没有可靠的物理载体都是空中楼阁,纸上谈兵。学校的研究生很多都想避开硬件设计,对于一个全新的设计与其说不屑不如说不敢。试想一下烧几个片子的压力要比跑飞几段程序的压力大的多,尤其是功率器件,一旦烧掉,弄不好火光冲天,人的自信都没了。况且改一次板周期长,经费高,还不知行不行。其实在国外实力一般的公司也是尽量避免硬件的更新设计,产品一旦定型往往通过软件升级,这是公司的发展策略,对个人而言物以希为贵,培养一个硬件设计师往往要比软件设计师时间长花费多。在设计dsp硬件时,开始设计最小系统板,系统按功能分板设计调试,注意分板电路的稳定性可能不如整板电路,要多 'D%No!+Py  
(y|{^@  
zf $&+E-  
加入抗干扰环节,分板间的引线包括电源线地线要短,尽量在10公分以内,实在不行加入光耦隔离、采用隔离电源。切记电源线、地线的干扰远比信号干扰对系统的危害大得多,又常常被人忽视。电路板工作正常的先决条件就是电源正常!当分板电路正常后再更居情况设计整板电路。在调试时发现的问题一定要找到原因解决,即使是飞线,割线,不要寄希望于下一板改了再看,除非原理性错误。每一个功能环节多准备几套方案。DSP的选型要根据系统功能而定,2000是一个功能比较全的控制器,但运算性能相对低,但目前大部分控制类、家电类包括中低层次的工业总线通信产品足够了,281X不错但太贵,而且开发技术不成熟。54XX更像一个协处理器,其实高端产品5471就很好,功能完*,但BGA封装对产品的开发有一定难度。如果没有从事过嵌入式系统开发的朋友其实可以从51看起,许多思想是共通的,51很经典没有哪一款微处理器像51那样使用持久和普遍。在硬件设计时更多的精力放在外围电路设计上,外围电路设计的灵活性要比DSP本身高得多,难度大得多。建议多考虑CPLD。 GDw4=0u-  
软件设计上,着眼点不要仅局限于某种算法和控制策略,而是软件系统框架的制定,即操作系统的选择和实现,算法和控制策略只是其中技巧性很强的子程序和子程序间参数相互关系,建议设计软件时能具有操作系统、数据结构和编译原理方面的知识,特别是使用C。对DSP的内部硬件结构一定要掌握,特别是中断结构和流程、流水线操作,不然飞都不知道怎么飞的。 C0/s/p'  
在语言选择上我当时是这么给自己规定的先编20个左右的汇编程序,每个代码量超过4K,使用语句范围覆盖全部语句的60%-70%,在此基础上使用C。现在发现用C构建程序的主体框架(操作系统)比较快而其不容易出错,(我现在正在用ASM根据UCOSII的思想重写自己的操作系统)但对系统实时性影响比较大的运算算法一般采用MATLAB——C——ASM的办法仿真调试优化,这里的优化不单单是利用优化器优化,而是根据数据的特点改变运算方法,以除法为例C里的/号其实掩盖了许多技巧,当除数为常数时就可以放大倒数移位相乘移位的办法进行,精度高速度快。这些办法只有掌握了ASM语言并用ASM语言思考才会熟练应用。另外我想告诉一些作算法特别是控制算法的朋友,千万不要随意评判一个算法的优劣,在程序中程序和代码优化的程度往往影响了控制效果好坏,而不是算法本身的思想。其实在实际中往往PID甚至PI、PD就够了,神经元、模糊、小波适用于研究和写论文,模糊在实际中用的多一点,主要是??本用的比较成熟,我 ka{9{/dz3  
C.L5\"%  
$de_>  
再恨日本人,这点也服气,??本就是滑,许多物理现象搞不透,就用这法,还管用,题外话。 *E0+!  
最后我想说的是,当我们面对市场要求时,产品往往考虑的是可靠性、性能、价格而不是你用的什么芯片,在满足性能的基础上结构越简单就越可靠,芯片越通用价格就越低,能用51就不用196,能用2407就不用2812,除非把芯片本身作买点利用高成本赢取高利润。无论2000还是5000、6000系列都有市场前景,关键是要做深做透 y2>v'%]2  
获取知识的方法、处理项目的能力是相通的,具体的说就是不要把目光盯在做硬件还是做软件上,用ASM还是C,要勤动手打好基础,提高自己对系统总体设计的能力,从系统的眼光看问题。为什么都是做DSP的有的毕业拿3000,有的5000、8000,除了运气和关系外,重要的是你对事物的认识深度和高度。我一直都记住这句话:有前途的人做什么都有前途,没前途的人做什么都没前途。 8~RUYsg  
二. 与其说是钻在里面,毕业设计是搞240,在老师的压力做出了一点东西,这期间主要是对DSP的各种基础知识的熟悉与理解,对DSP的真正深入是在公司工作以后。当初进公司,因为正有一个项目需要用5410要我接手。说实话,在学校期间我5000的书都没有看过一眼,可没办法,只能靠自己了。不过好的是我2000DSP的基础很好。接过项目后,我第一个星期就全部看的是5000的指令,DSP的结构倒没怎么看,因为项目硬件已成型,主要是算法。这样,花了一个星期熟悉指令与项目相关的程序,第二个星期也就开始编程了。半个月以后我对5410也就用很熟了的,当然主要还是讲在算法方面。这个项目太概做了四个月吧,系统程序是我编写的,主要有如6?位加减乘除乘方开方、及时域方面的一些算法。现在又做一个控制系统,用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 Y<3s_  
+JZ<9,4  
]_I<-}?;  
有很多系列的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板再加上自主板相结合。 V\ch0i 1  
三. 使用C/C++语言编写基于DSP程序的注意事项 1、 不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用fabs()或abs()函数,也可以使用if...else...判断语句来替代。 2、 要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静态变量。 3、 一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断向量表中的中断名是任意取定的,dsp是不认名字的,它只认地址!!中断向量表要重新定位。这一点很重要。 4、 要明确dsp软件开发的第一步是对可用存储空间的分析,存储空间分配好坏关系到一个dsp程序员的水平。对于dsp,我们有两种名称的存储空间,一种是物理空间,另一种是映射空间。物理空间是dsp上可以存放数据和程序的实际空间(包括外部存储器),我们的数据和程序最终放到物理空间上,但我们并不能直接访问它们。我们要访问物理空间,必须借助于映射空间才行!!但是映射空间本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如io映射空间,它本身还代表了一种接口。只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。 5、 尽可能地减少除法运算,而尽可能多地使用乘法和加法运算代替。 6、 如果ti公司或第三方软件合作商提供了dsplib或其他的合法子程序库供调用,应尽可能地调用使用。这些子程序均使用用汇编写成,更为重要之处是通过了tms320算法标准测试。而且,常用的数字信号处理算法均有包括!! 7、 尽可能地采用内联函数!!而不用一般的函数!! n>>hfxv(O!  
&<@ { d  
jjBcoQU$o  
可以提高代码的集成度。 8、 编程风格力求简炼!!尽可能用c语言而不用c++语言。我个人感到虽然c++终代码长了一些,好象对执行速度没有影响。 9、 因为在c5000中double型和float型均占有2个字,所以都可以使用,而且,可以直接将int型赋给float型或double型,但,尽可能地多使用int数据类型代替!这一点需要注意!! 10、 程序最后至少要加上一个空行,编译器当这个空行为结尾提示符。 11、 大胆使用位运算符,非常好用!! 12、 2003年6月份从ti的网站上下到了关于tms320c67x系列dsp的快速算法库,于是,tms320c5000和c6000全系列的快速算法库都问世了,这些算法库均可供c/c++语言直接调用,优化程度100%,实际编程时尽可能地使用(下载时可以同时下载到说明文档和ascii源程序,可以根据自己需要作出修改,修改前最好做个备份)。 q_HC68YF,  
DSP新手解疑 2T5@~^:7u  
1、TI DSP的选型 Iu|G*~\  
主要考虑处理速度、功耗、程序存储器和数据存储器的容量、片内的资源,如定时器的数量、I/O口数量、中断数量、DMA通道数等。DSP的主要供应商有TI,ADI,Motorola,Lucent和Zilog等,其中TI占有最大的市场份额。 PN/2EmwtC  
TI公司现在主推四大系列DSP 3Zg=ZnF  
1) C5000系列(定点、低功耗):C54X,C54XX,C55X 相比其它系列的主要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机、PDA、GPS等应用。处理速度在80MIPS--400MIPS之间。C54XX和C55XX 一般只具有McBSP同步串口、HPI并行接口、定时器、DMA等外设。值得注意的是C55XX提供了EMIF外部存储器扩展接口,可以直接使用SDRAM,而C54XX则不能直接使用。两个系列的数字 IO都只有两条。 ]n?a h  
2)C2000系列(定点、控制器):C20X,F20X,F24X,F24XX ,C28x该系芯片具有大量外设资源,如:A/D、定时器、各种串口(同步和异步),WATCHDOG、CAN总线/PWM发生器、数字IO脚等。是针对控制应用最佳化的DSP,在TI所有的DSP中,只有C2000有FLASH,也只有该系列有异步串口可以和PC的UART相连。 I'"*#QOX  
3)C6000系列:C62XX, C67XX,C64X 该系列以高性能著称,最适合宽带网络和数字影像应用。32bit,其中:C62XX和C64X是定点系列,C67XX 是浮点系列。该系列提供EMIF扩展存储器接口。该系列只提供BGA封 装,只能制作多层PCB。且功耗较大。同为浮点系列的C3X中的VC33现在虽非主流产品,但也仍在广泛使用,但其速度较低,最高在150MIPS。 p`gg   
4)OMAP系列:OMAP处理器集成ARM的命令及控制功能,另外还提供DSP 的低功耗实时信号处理能力,最适合移动上网设备和多媒体家电。 M_MiY|%V/K  
其他系列的DSP曾经有过风光,但现在都非TI主推产品了,除了C3X系列外,其他基本处于淘汰阶段,如:C3X的浮点 oV ?tp4&  
Jx-^WB  
COv#dOw  
系列:C30,C31,C32 C2X和C5X系列:C20,C25,C50 i051qpj  
每个系列的DSP都有其主要应用领域. JeMhiY}  
2、设计中如何得到技术参考资料以及如何得到相关源码 9Q=g]int u  
原则是碰到问题就去www.ti.com GW'=/ z7  
1)在TI网站的搜索中用keyword搜索资料,主要要注意的就是Application Notes,user guides 比如不知道怎样进行 VC5402的McBSP编程,搜McBSP和VC5402 如果不知道如何设计VC5402和TLV320AIC23的接口以及编程,搜 TLV320AIC23和VC5402; 这样可以搜到一堆的资料,这些资料一般均有PDF文档说明和相应的源程序包提供,download后做少许改动即可 N rVQK}%K  
2)版上发问 (~-q}_G;Q  
3)google搜 }@@1N3nnxV  
4)再不济,找技术支持,碰运气了 X ~4^$x  
3、如何看待TI DSP庞杂的技术文档 RTA9CR)JP4  
新手进行DSP开发学习之时,常常感觉技术文档太多,哪本都有用,哪本都想看,无从下手。此时原则是只看入门必须的、只看和芯片相关的。根据经验,如下的资料必看不可: v|_?qBs"  
1)讲述DSP的CPU,memory,program memory addressing,data memory addressing的资料都需要看、外设资源的资料可以只看自己用到的部分; %xxe U  
2)C和汇编的编程指南需要看 pX6T7  
3)汇编指令和C语言的运行时间支持库、DSPLIB等资料需要看其他的如:Applications Guide,Optimizing CC++ Compiler User's Guide,Assembly Language Tools User's Guide等资料留待入门之后再去看体会会更深一些。 IaE};8a8  
4、如何高效开始TI DSP的硬件开发 b9EJLD  
1)根据应用领域选择TI推荐的DSP类型 E1 *\)q  
2)参考选定的DSP之EVM板,DSK等原理图,完成DSP最小系统的搭建(包括外扩内存空间、电源复位系统、各控制信号管脚的连接、JTAG口的连接等); |F<U;xV$p  
3)根据具体应用需要,选择外围电路的扩展,一般如语音、视频、控制等领域均有成熟的电路可以从TI网站得到。外围电路与DSP的接口可参看EVM或DSK,以及所选外围电路芯片的典型接口设计原理图;最好外围电路芯片也选择TI的,这样的话不管硬件接口有现成原理图、很多 6#N1 -@  
连DSP与其接口的基本控制源码都有。 9rB^)eV  
4)地址译码、IO扩展等用CPLD或者FPGA来做,将DSP的地址线、数据线、控制信号线如IS/PS/DS等都引进去有利于调试 Z T8. r0  
5、如何高效开始TI DSP的软件开发 St|sUtj<r  
如果你不是纯做算法,而是在一个目标版上进行开发,需要使用DSP的片上外设,需要控制片外接口电路,那么建议在写程序前先好好将这个目标版的电路设计搞清楚。最重要的是程序、数据、I/O空间的译码。不管是否纯做算法还是软硬结合,DSP的CPU,memory, program memory addressing, data mem.ory addressing的资料都需要看. {0QD-b o  
1)看CCS的使用指南 <WaiJy?  
2)明白CMD文件的编写 tt|U,o  
3)明白中断向量表文件的编写,并定位在正确的地方 a&L8W4  
oLruYSaD  
 i2)SSQ  
SZG8@ !_}7  
4)运行一个纯simulator的程序,了解CCS的各个操作 9<7Q{  
5)到TI网站下相关的源码,参考源码的结构进行编程 Z> QSZ48=  
6)不论是C编程还是ASM编程,模块化是必须的 &>I8^i  
6、选择C还是选择ASM进行编程 cJ]`/YJ  
记住一条原则,TI的工程师在不断改进CCS的C程序优化编译器,现在C优化的效率可达到手工汇编的90%甚至更高。当然有的时候如果计算能力和内存资源是瓶颈,ASM还是有优势,比如G.729编解码。但是针对一般的应用开发,C是最好的选择。 "R*B~73  
新手编程则选择C和汇编混合编程更有利一些 sf\;|`}  
7、选择什么仿真器 ~l6e&J  
一般来说,买个并口的EPP就够了,价格便宜又稳定 }E>2U/wpXY  
8、关于TI 54X系列DSP的bootloader过程 U{>!`RN  
请详细阅读TI文档SPRA618A、SPRA571,这些文档对boot的机制进行了详细说明同时说明了利用hex500将*.out文件转化为*.hex文件时,需要编写的cmd文件的写法。
)yJeh  


评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

一般

差劲
离线yoyole103

性别:
帅哥
发帖
2216
金币
1325
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 1楼 发表于: 2016-11-11
    


离线robinfit

性别:
帅哥
发帖
505
金币
233
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 2楼 发表于: 2016-12-02
向前辈看齐


离线chjchjchj816

性别:
帅哥
发帖
2185
金币
1059
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 3楼 发表于: 2016-12-05
文章写得很好


离线zheshiwo

性别:
帅哥
发帖
2233
金币
262
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 4楼 发表于: 2016-12-08
多多学习!


离线chjchjchj816

性别:
帅哥
发帖
2185
金币
1059
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 5楼 发表于: 2017-03-21
真实不错的


离线小勺

性别:
人妖
发帖
114
金币
0
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 6楼 发表于: 2017-03-22
,人生就是如此,看轻的往往是自己不会的


离线cheng099

性别:
帅哥
发帖
215
金币
35
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 7楼 发表于: 2017-03-23
写的很好


离线bingfengz

性别:
帅哥
发帖
435
金币
361
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 8楼 发表于: 2017-03-23
  


离线cheng099

性别:
帅哥
发帖
215
金币
35
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 9楼 发表于: 2017-03-27
也要做高手


离线j314960091

性别:
人妖
发帖
554
金币
381
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 10楼 发表于: 2017-03-29
看完了  学习了


离线ky175

性别:
人妖
发帖
6228
金币
1475
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 11楼 发表于: 2017-04-03
肯下功夫一定行


离线qxy50244

性别:
帅哥
发帖
275
金币
70
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 12楼 发表于: 2017-04-12
写的不错



性别:
人妖
发帖
593
金币
476
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 13楼 发表于: 2017-05-15
学习下


离线lry

性别:
帅哥
发帖
146
金币
180
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 14楼 发表于: 2017-05-15
学习了


快速回复
限150 字节
 
上一个 下一个