1、一. 我是已经从事 DSP 开发有几年了,看到许多朋友对 DSP 的开发非常感兴取,我结合这几年对 DSP 的开发写一写自己的感受,一家之言,欢迎指教。我上研究生的第一天起根据老板的安排就开始接触 DSP,那时 DSP 开发在国内高校刚刚开始,一台 DSP 开发器接近一万还是 ISA 总线的,我从 206 开始 240、2407A 都作过产品,对 5402、2812、5471 在产品方案规划制定和论证时也研究过。由于方向所限对 6X、8X 系列没有接触。我发现在国内无论在公司或高校许多地方为了加快开发周期往往把一个产品开发分为硬件和软件两个相对独立部分,由不同的人完成。这在具有一定技术和管理基
2、础的公司,由总设计师统一规划协调,分任务并行完成的情况下是可行的,也是符合现代产品开发规律的。但是在高校人员的流动很大,研究生的有效科研时间很短、基础差(许多研究生起步时对电熔、电阻、三极管的分类和选型都很困难,我也是这样过来的)更不用说系统规划设计了,况且许多老板自己也不太懂,师兄有自己的任务,他们搞明白时也毕业了。在许多高校做 DSP 就是找一个算法加到自己的主程序里,在板子上跑一下,基本达到效果就可以了,至于可靠性是次要的,产业化无从谈起,这已经算不错的了。其实我觉得一个系统的完成,系统的规划是最重要的,在规划时对硬件设计的知识和认识是决定性的,它可以让你知道什么是可行的,什么是不可行的
3、,当你同时具有软件设计能力时,就可以合理的分配系统功能,完成使用 VHDL 进行系统行为描述系统功能划分 系统子结构设计这样的自顶向下的设计规划流程,成为系统设计专家、项目经理,否则只是硬件工程师、软件工程师。无论作 51、196、还是 DSP 都是这样。下面分别谈谈我对硬件和软件设计的感受硬件设计是系统设计的关键,国内和国外产品的差距往往是硬件设计水平高低决定的,任何软件设计思想没有可靠的物理载体都是空中楼阁,纸上谈兵。学校的研究生很多都想避开硬件设计,对于一个全新的设计与其说不屑不如说不敢。试想一下烧几个片子的压力要比跑飞几段程序的压力大的多,尤其是功率器件,一旦烧掉,弄不好火光冲天,人的
4、自信都没了。况且改一次板周期长,经费高,还不知行不行。其实在国外实力一般的公司也是尽量避免硬件的更新设计,产品一旦定型往往通过软件升级,这是公司的发展策略,对个人而言物以希为贵,培养一个硬件设计师往往要比软件设计师时间长花费多。在设计 dsp 硬件时,开始设计最小系统板,系统按功能分板设计调试,注意分板电路的稳定性可能不如整板电路,要多加入抗干扰环节,分板间的引线包括电源线地线要短,尽量在 10 公分以内,实在不行加入光耦隔离、采用隔离电源。切记电源线、地线的干扰远比信号干扰对系统的危害大得多,又常常被人忽视。电路板工作正常的先决条件就是电源正常!当分板电路正常后再更居情况设计整板电路。在调试
5、时发现的问题一定要找到原因解决,即使是飞线,割线,不要寄希望于下一板改了再看,除非原理性错误。每一个功能环节多准备几套方案。DSP 的选型要根据系统功能而定,2000 是一个功能比较全的控制器,但运算性能相对低,但目前大部分控制类、家电类包括中低层次的工业总线通信产品足够了,281X 不错但太贵,而且开发技术不成熟。54XX 更像一个协处理器,其实高端产品 5471 就很好,功能完*,但 BGA 封装对产品的开发有一定难度。如果没有从事过嵌入式系统开发的朋友其实可以从 51 看起,许多思想是共通的,51 很经典没有哪一款微处理器像 51 那样使用持久和普遍。在硬件设计时更多的精力放在外围电路设
6、计上,外围电路设计的灵活性要比DSP 本身高得多,难度大得多。建议多考虑 CPLD。软件设计上,着眼点不要仅局限于某种算法和控制策略,而是软件系统框架的制定,即操作系统的选择和实现,算法和控制策略只是其中技巧性很强的子程序和子程序间参数相互关系,建议设计软件时能具有操作系统、数据结构和编译原理方面的知识,特别是使用 C。对 DSP 的内部硬件结构一定要掌握,特别是中断结构和流程、流水线操作,不然飞都不知道怎么飞的。在语言选择上我当时是这么给自己规定的先编 20 个左右的汇编程序,每个代码量超过 4K,使用语句范围覆盖全部语句的 6070,在此基础上使用 C。现在发现用 C 构建程序的主体框架(
7、操作系统)比较快而其不容易出错,(我现在正在用 ASM 根据 UCOSII 的思想重写自己的操作系统)但对系统实时性影响比较大的运算算法一般采用 MATLABCASM 的办法仿真调试优化,这里的优化不单单是利用优化器优化,而是根据数据的特点改变运算方法,以除法为例 C里的号其实掩盖了许多技巧,当除数为常数时就可以放大倒数移位相乘移位的办法进行,精度高速度快。这些办法只有掌握了 ASM 语言并用 ASM 语言思考才会熟练应用。另外我想告诉一些作算法特别是控制算法的朋友,千万不要随意评判一个算法的优劣,在程序中程序和代码优化的程度往往影响了控制效果好坏,而不是算法本身的思想。其实在实际中往往 PI
8、D 甚至PI、PD 就够了,神经元、模糊、小波适用于研究和写论文,模糊在实际中用的多一点,主要是小日本用的比较成熟,我再恨日本人,这点也服气,小日本就是滑,许多物理现象搞不透,就用这法,还管用,题外话。最后我想说的是,当我们面对市场要求时,产品往往考虑的是可靠性、性能、价格而不是你用的什么芯片,在满足性能的基础上结构越简单就越可靠,芯片越通用价格就越低,能用 51 就不用 196,能用 2407 就不用 2812,除非把芯片本身作买点利用高成本赢取高利润。无论 2000 还是 5000、6000 系列都有市场前景,关键是要做深做透获取知识的方法、处理项目的能力是相通的,具体的说就是不要把目光盯
9、在做硬件还是做软件上,用 ASM 还是 C,要勤动手打好基础,提高自己对系统总体设计的能力,从系统的眼光看问题。为什么都是做 DSP 的有的毕业拿 3000,有的 5000、8000,除了运气和关系外,重要的是你对事物的认识深度和高度。我一直都记住这句话:有前途的人做什么都有前途,没前途的人做什么都没前途。二. 与其说是钻在里面,毕业设计是搞 240,在老师的压力做出了一点东西,这期间主要是对DSP 的各种基础知识的熟悉与理解,对 DSP 的真正深入是在公司工作以后。当初进公司,因为正有一个项目需要用 5410 要我接手。说实话,在学校期间我 5000 的书都没有看过一眼,可没办法,只能靠自己
10、了。不过好的是我 2000DSP 的基础很好。接过项目后,我第一个星期就全部看的是 5000 的指令,DSP 的结构倒没怎么看,因为项目硬件已成型,主要是算法。这样,花了一个星期熟悉指令与项目相关的程序,第二个星期也就开始编程了。半个月以后我对 5410 也就用很熟了的,当然主要还是讲在算法方面。这个项目太概做了四个月吧,系统程序是我编写的,主要有如 64 位加减乘除乘方开方、及时域方面的一些算法。现在又做一个控制系统,用 2407开发的,硬件主要有直交变频,并把 2407 的所有外设资源全部用到了。现在我可以这样自夸一句吧:TI 的 2000 系列与 5000 系列的我都熟悉,要我去以此做个
11、系统,没问题。上面是把我搞DSP 的经历简单说了一下的吧,在这里我想对正在学及想学 DSP 的难兄们说一句的是,DSP 并不是很难。当然,这个前提是你的基础要好,我单片机,接口都还行,当初就是从单片机改成DSP 的。有了单片机的基础再去学 2000 第列的 DSP(下面的 DSP 单指 2000 系列,另有说明为止),你就可以把 DSP 看成一个 super microcontroller 了。相比之下,DSP 除了比单片机多了更丰的外设接口(SPI,SCI、CAN、PWM、CAP、QEP 等等),他就是一块单片机,只不过在单片机来说你要另加芯片的工作,DSP 全部把它做在一块芯片去了,我现在
12、看 DSP 也真就这么简单。前面有人提到 DSP 主要是做算法,这句话有一定的片面性: TI 有很多系列的 DSP,现在主流的DSP 主要为 2000 系列、3000 系列、4000 系列、5000 系列、6000 系列。除了 2000 与 5000 系列是定点 DSP 外,其余的均为浮点系列。 TI 的 2000 系列主要长处是在用于控制系统,因为它的资源非常丰富,前面提到,在控制系统中用到的一些外设 2000 系列均在片内集成了。 TI 的5000 系列主要长处是用于数字信号的算法处理,这里所讲算法处理主要是指在数字信号处理时的一些算法,如 FIR、IIR、FFT 等等。5000 系列的
13、DSP 的速度比 2000 快,2407 最快只能到40M,2800 系列除外,5410 的 DSP 可以达到 160M,如现在我们主要用来做数字信号方面的处理以及简单的静态图像处理等这样一些在资源需要处于中等的一些算法。 TI 的 6000 系列主要是用在实时图像处理,这个就更则重于算法处理。一般的硬件很少自制,我们是用 TI 的 DSK 板再加上自主板相结合。三. 使用 C/C+语言编写基于 DSP 程序的注意事项 1、 不影响执行速度的情况下,可以使用 c或 c/c+语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用 fabs()或 a
14、bs()函数,也可以使用 if.else.判断语句来替代。 2、 要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静态变量。 3、 一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断向量表中的中断名是任意取定的,dsp 是不认名字的,它只认地址!中断向量表要重新定位。这一点很重要。 4、 要明确 dsp 软件开发的第一步是对可用存储空间的分析,存储空间分配好坏关系到一个 dsp 程序员的水平。对于 dsp,我们有两种名称的存储空间,一种是物理空间,另一种是映射空间。物理空间是 dsp 上可以存放数据和程序的实际空间(包括外部存储器),我们
15、的数据和程序最终放到物理空间上,但我们并不能直接访问它们。我们要访问物理空间,必须借助于映射空间才行!但是映射空间本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如 io 映射空间,它本身还代表了一种接口。只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。 5、 尽可能地减少除法运算,而尽可能多地使用乘法和加法运算代替。 6、 如果 ti 公司或第三方软件合作商提供了 dsplib 或其他的合法子程序库供调用,应尽可能地调用使用。这些子程序均使用用汇编写成,更为重要之处是通过了 tms320 算法标准测试。而且,常用的数字信
16、号处理算法均有包括! 7、 尽可能地采用内联函数!而不用一般的函数!可以提高代码的集成度。 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 源程序,可以根据自己需要作出修改,修改前最好做个备份)。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。