在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2988|回复: 0

[设计分享] 写给TI_6000系列DSP初学者

[复制链接]
发表于 2012-10-18 21:14:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我的经历
       错过第一次学习机会
       我2000年进入大学,专业通信工程。入学的时候成绩不错,还拿过一等奖学金,自以为自己很聪明。当时我们学院有个科技协会,简称科协,那时的科协会长是个大四的学兄,秃顶,给人印象深刻,感觉他很厉害,就入了科协,第一堂课是用555做个流水灯,科协已经把印制板做好,我只用把器件焊上去就行了,灯是亮了很好玩,于是自己琢磨电路的原理,那时是个刚入学的小子,什么也不懂,看那东西根本搞不懂,感觉太难了,后来慢慢就不去参加活动,再后来放弃了。
       现在想想那个时候太轻言放弃了,包括后来大学里自学51单片机、学FPGA都是只浅尝则止,而没有持之以恒,以至于后来错过了很多很多机会。所以在这里要告诉大家,也告诉我自己,学技术一定要坚持,不管碰到什么困难,绝不能轻言放弃,坚持就会有进步,就像长跑,总有几个困难点,坚持过去就觉得不是那么困难,水平才会有提升。
        第一次使用C51
        说起这个,不得不感谢下我的一个大学室友,是他带我入门C51,第一次用protel画印制板,第一次申请免费样片、第一次编写调试程序,第一次使用示波器等等,这些都得归功于他的指导。
        时间过得很快,一转眼就大四了,想想自己大学游戏玩了三年,学业荒废,毕业设计这个机会一定要把握住,不然自己没什么资本找工作啊,于是在选题的时候选了个单片机的题目“基于DDS的信号发生器设计”。虽然之前接触过51、protel,不过那都是看看书而已,实际做起来什么都不会,我确定的方案是用C51去控制AD9853输出相应频率的波形,当然这里离不开键盘和LCD显示,AD9853是从AD公司申请的样片,那时我第一次知道还有免费午餐,大公司真的不错,记得当时TIdsp都可以申请,我就申请了一片6202,不过后来没那么容易申请了,这次我坚持了下来,一步一步地做,最终圆满完成了毕业设计。
        我是幸运的,因为身边就有个很好的老师,初学者大都没有这样的条件,即便如此,初学者还是应充分挖掘身边的资源,将它们都利用起来,这样你才能更接近成功。
        接触DSP
        2004毕业后我到一个研究所工作,我所在的部门是做视频跟踪器的,主要用DSP+FPGA,对我来说入鱼得水,因为我对这些东西很有兴趣。当时我的同事们用的还是TI C50DSP,这个很多人可能听都没听过,TI的DSP按时间大概经历了这几个系列,C25-C50-V33-2000-5000-6000,C50的功能很有限,只有汇编开发环境,因为功能简单,所以学起来也相对容易,加上我有51的基础,很快就上手了,一年半后部门器件换代直接换成了64xx,由于受C50的影响,我们开发还是习惯用汇编,2006年5月前后,我率先用C开发产品,取得了不错的效果。
        这当中我接触到了很多,由于我个人性格的原因,学什么都想学精,走了很多弯路。比如PCB刚开始用protel,后来发现它画复杂板子的时候不方便,于是学用allegro,后来又学SI;DSP也是,6000会用了想学2000、5000,后来发现自己很幼稚,其实一到二门精通了足以,学什么要注意学习理念,工具平台这些始终是外家功夫,要勤修内功。
总结及建议
       1)选好自己的工具和平台学DSP当然首先要选择一款DSP(这里主要说TI的DSP,AD公司的不熟这里就不说了)。如果是个人学习的话主要看个人需要和应用场合,比如做图像处理那当然首推TI6000了,初学者不必将DSP分出三六九等,各个系列没有明显的优劣,但有明确的应用领域,2000偏接口控制,5000偏语音,6000适合做大数据量信号处理,比如图像、雷达等等。初学者最好有个开发板,不然无异于纸上谈兵,2000、5000的开发板相对便宜,6000的就比较昂贵。
        就上手容易度来说,我个人觉得6000更易上手,6000的结构较2000、5000明了清晰,硬件上的条条框框比较少,你不需要看很多的硬件结构资料就能着手编程,这个大概是技术的进步吧。不过还是这句话,应用场合决定你的选择。
        2)自己先动手
        初学者如果会C语言语法,在看过一些资料后就可以着手写自己的第一个程序,如果写不出来,看看TI最初级的例程,完成自己第一个程序。我给我们单位新同事做6000培训的时候,给他们的第一个题目就是写一个程序让LED灯不停闪烁,这个灯可能接在GPIO上或者通过EMIF译码与FPGA配合控制(后者可能更有意义),更进一步的程序是控制闪烁的频率。我比较喜欢让他们用GPIO和EMIF,它们可能是6000里最简单和用的最多的外设了,它们是初学者最早要攻克的堡垒。
        初学者往往对硬件结构和软件的配合没有概念,对片内存储空间、片外存储空间、片上外设这些概念没有实在的理解,这些概念需要自己的反复的思考、反复的实验、反复的体会才能最终搞清楚,这些弄明白了你也就入门了。
        初学者比较忌讳看太多和太复杂的例程,看得太多你的思绪会比较乱,看得太复杂你会心浮气躁,复杂的例程一般它都有相对复杂的编程结构,这个初学者是很难体会到的,所以刚开始不要看,等你写了20到30个程序的时候再试着看相对复杂的例程。
        3)多动手
        这个不用多说了,光看不练假把式。
        4)片上外设
       这里拿DM642来说,我把常用的外设由简单到复杂排个序:GPIO-TIMER-EDMA-EMIF-I2C-MCASP-VideoPort-EMAC、MDIO,MCASP我没用过,不过看过资料感觉不复杂,我给初学者的建议是先把前面4个学清楚,可以先学GPIO这个真的是简单,刚开始不要急着用CSL,用汇编或是C写个程序让某个GPIO脚上输出波形,这样有助于理解片上外设以及有关的概念。前面4个明白了后面的具体用到再学,这个时候你可以看TI相应的例程,拿来用就可以。
        5)汇编、C和线性汇编
        现在开发6000的标准流程是先用C写,C的好处很多这里不说了,有太多的文章在论述,不过对于准备做优化的同志们来说,汇编不会也不行,用汇编相对于C更助于你理解6000的架构,很多初学者对C语言中用指针对某个空间操作不理解,用汇编写的话相对要好理解的多。
        大家不必对汇编心存畏惧,其实它也很简单,只不过它比较晦涩,用它开发整个系统的时间上的花费太多,不过关键算法的优化有时还是离不开它,TI目前还提供线性汇编,它是汇编和C的折中,兼备汇编的效率和C的易开发性。
        汇编和C都只是工具,关键还是你对架构的理解和编程理念,所以选择哪个都有道理,通过工具去探索架构而已。我个人觉得初学者主要应学习C,毕竟它是主流,可以用汇编写4-5个小程序,熟悉它的语法就行,日后用它做优化也不会什么都不知道,而且也助于对硬件架构的理解。
结束
        就写这么多了,一家之言,里面有很多废话,希望对初学者有点帮助,抛砖引玉,也希望高手们多多写出自已的经验。
优化一起放过来了~~~
关于优化我的经验是这样的
一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最早做;
二、其次从算法层面上着手,看采用的算法有没有更好更简单的计算方法,算法是否有某种对称性,可否采用更合适的数据结构等等,这方面的优化比程序上的优化更明显;
三、如果算法层面暂时无更好的优化办法,看看软件结构能否优化。
比如:
          1)多层的循环结构能否减层。我经常看到这样的程序:
              for(i = 0; i++; i A)
                  for(j = 0; j++ j B)
                  {
                        E[j]  = C[j] - D[j];
                  }
              这个可以优化成:
              for(i = 0; i++; iAB)
              {
                      E = C - D;
              }
             2) 关键循环结构中的条件、跳转指令应尽量避免,哪怕会增加一些循环次数,循环中没有条件指令优化器更容易优化;
             3)关键循环不要调用子函数
             其它还有一些,具体可以看看手册,手册上讲的很清楚
四、结合DSP系统的硬件结构优化
             1)看你处理的数据是放在片内还是片外,如果放在片外的话这个建议将数据分块分批倒入片内处理,类似于流水结构;
             2)针对外部数据可对L2 cache优化
五、结合DSP优化器、指令系统等进行优化
            这部分可以详细的看TI的手册,大概有这几个方法:
             1)优化选项,-o3 -pm 取消-g 等等这些选项,如果你的软件结构很好,那么它们的优化效果很明显;
             2)加一些优化指示符指导优化,这部分看手册,包括存储地址无关性,SIMD(单指令多数据处理)等等;
             3)用一些专用指令,比如6000提供饱和加、溢出减指令,可以不必用条件判断;
             4)如果效果还是不好,用线性汇编改写你的程序,将你的优化思想用线性汇编表述出来,一般到地步就可以了;
             5)如果线性汇编优化未能尽显你的优化思想,那就汇编吧,优化器不会再帮助你优化,完全是你自己控制程序了,自己做软件流水吧;
            这部分需要有比较丰富的优化经验和扎实的优化功底,多多积累,多看资料。
最后要重点说下:
            优化是没有止境的,在对程序对细致优化前要对程序每个部分测试下时间,对非常耗时的部分做优化,一但满足你的要求就可以,不要为了优化而优化,我们应该有更重要的东西要学,不要陷在优化上而不能自拔!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 21:47 , Processed in 0.281963 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表