关于作者 作者就职于某知名电信公司,担任系统工程师。2007年开始接触DSP的开发,使用的第一款DSP芯片为TI的C6482(代号Himalaya);2008年开始使用TI的C6487/8(代号为Farady),2010年底预研了TI的C6497(代号为Nyquist)。在此期间,也在Freescale的MSC8144、8156、8157等DSP上从事过开发工作。开发中使用的几乎都是TI或Freescale最高端的多核DSP,主要针对电信级应用。 作者主要完成过以下DSP相关的开发工作:- 多个大型驱动的开发与维护;
- DSP上操作系统(公司自主开发)的移植(C64到C64+,SC3400到SC3850);
- DSP平台软件架构设计;
- 编译器的优化及异常行为研究;
- Cache的利用情况剖析及优化;
- DSP的远程调试、Trace、Dump及日志;
- DSP的自动编译与测试。
作者声明本人郑重声明:
(1) 文章所有内容(文字、图片)均系原创,如有特别引用会标明出处;
(2) 对本文的所有转载或引用均需标明出处,但任何单位或个人不得以赢利为目的转载或引用本文中的任何内容。
【摘要】本文将分成三个部分:第一部分主要从作者的角度讲述电信行业中DSP处理器开发情况,以及未来此类DSP的发展趋势;第二部分讲述DSP工程师应当从哪些方面来进行自我提升;第三部分讲述DSP工程师的职业演进路程。【关键词】高端DSP、TI、职业演进、芯片级、系统级、架构级 在公司内部,我曾经做过很多与DSP相关的培训与经验交流。由于公司是大客户,我也有幸能与TI和Freescale的DSP工程师进行无数次的交流,参加他们数不清场次的培训,更是与来自TI、Freescale的优秀AE(Application Engineer,支持工程师)一起为我们的项目加班加点。但我深知真正的达人都是深居简出,上网笑而不语。这不是一篇说教的文章,因为任何观点都不能放之四海而皆准,所以我更建议读者用它来自省,结合自身的实际情况来做出决定。 1 我眼中的电信行业DSP开发 DSP在电信领域主要用于高吞吐量的基带数据处理,都要求DSP有强大的处理能力、高速接口(如现在的RapidIO 2.x可达到20Gbps以上),多种硬件加速器,高速缓存等等必须的功能。
让我们一起看一下我曾经使用的TIFarady(C6487)主要特性:
- 3个1 GHz的C64+内核;
- 多种硬件加速器(VCP、TCP等)
- AIF(Antenna Interface,TI自定的基于CPRI的高速串行数据传输方式)
- 两个RapidIO接口;
- DDR2控制器;
- 1000 Mbps EMAC;
- 32 KB的L1P,32 KB的L1D,3 MB的L2,等等。
图1给了电信应用中DSP的分层架构,事实上它也适用于其它嵌入式系统。
图1 电信应用中DSP的分层架构
- 应用软件:没有应用软件的嵌入式系统,也就失去了真正存在的意义。在电信业,DSP上的应用软件主要按上层调度完成用户数据处理、按某种通信协议(如CDMA、LTE、GSM等)的软件算法以及功控、赋形等功能。
- 平台软件:为了提高系统的可移植性及可重用性,以及调测及辅助功能,通常会在驱动程序之上加入平台软件层。
- 驱动程序:这是为了使芯片及其外设正常运行必须做的工作。驱动程序是否高效、健壮、易于分析定位,通常也是DSP在电信级应用中成功的关键因素。
- 操作系统:优秀的操作系统是电信项目成功的关键因素之一,它能够增强系统的健壮性、实时性、可诊断性及可维护性。
- 硬件系统:它给软件提供了可行的运行平台。
由于电信业所使用的DSP本身的复杂度,以及应用对于DSP几近苛刻的要求,通常都需要多个团队协同开发,最后按阶段进行迭代式的集成测试。在初始阶段,也使用仿真器接入板卡调试,但一旦项目开始集成,甚至设备安装到了室外,则必须更多的依赖于Dump内存、系统日志、告警信息、远程调试手段等来分析问题。总的来说,电信行业DSP开发具有较高的复杂度,对工程师的知识面、思考与开发能力,甚至是沟通组织能力等都有较高的要求。当前热门的各种智能网络、物联网、M2M、LTE的各种应用等等,都是基于电信业提供的宽带无线网络,这是社会发展的必然趋势。我认为,这种宽带无线网络势必再次改变这个世界。 由于高速网络、高质量音视频等应用的增长需求,必将带来DSP的持续发展,高端DSP会有如下的发展趋势:- 越来越多的集成各类硬件加速器;
- 以多核、高速内核、高速外设、低功耗为特征;
- 异构多核与同构多核的发展中,前者将占优;
- 编译器将支持并行编程语言(如OpenMP),甚至根据系统建模直接生成代码;
- 将更多的挖掘并行指令(或总线)与Cache的能力。
2 做正确的DSP工程师,再把事情做正确 我相信今天看到这篇文章的很多读者,都肯定在网上看过类似于工程师如何规划人生,DSP学习方法之类的文章。甚至也许我们都看过同样的一篇(即使没看过,你身边一定有人向你表达类似观点):做技术是没前途的,一定要转做技术管理或销售。三年以前,我也这般认为,但今天越来越多的事实证明,它就是一个谬论!如果你对自己的职业规划就是做管理或销售,那么我支持;但如果是因为觉得做技术没前途,那我并不赞同。举两个例子:其一,我认识某位DSP的资深AE,可以算是中国区该领域的专家,年薪不菲(60万以上),走遍世界,工作也很轻松;其二,我们公司晋升年限一样的技术专家,比同级的经理薪酬要高,如,Expert(专家级)与管理大概50个人的经理相比,前者的薪酬要更高。 中国的某些传统观念以及当下的社会风气,正在侵蚀着我们的工程师群体,使他们变得浮躁,不能潜心研究技术。我想告诉大家的是,无论在什么环境中,你都要有自己的秉持与原则,请记住:真正有前途的人,做什么都会有前途!千万不要还没有窥清DSP的技术门道,就想着转做那种小作坊管理,而将技术束之高阁。几年之后你就会发现,管理方面你很山寨,而技术早就一清二白了,悔之晚矣! 我只讲五点自己觉得最为重要的,事实上我认为如果能做到这五点,那你根本不用为自己的“前途”与“钱途”发愁。
(1) 找到你自己的行业定位
“男怕入错行”,这句话真的是非常贴切。我把它放在最重要的第一条,正是想说明行业的选择对于工程师的重要性。请记住:你首先需要做正确的事,然后才是把事情做正确!当你选择一个行业之后,请多学习了解这个行业相关的知识,只有这样,你才能成长为更高级别的工程师。再请记住这样一个例子:一块开发板只能卖100块钱,但如果把它用在某个具体的行业应用上,价格可以翻数十倍甚至更多。
(2) 适应用英语工作
如果你当前还不能适应阅读英语资料、检索文献以及听取国外的相关技术讲座,请务必抽出时间去再学习,因为最好的资料都是英语原著的,那些Reference Manual、Datasheet、Application Guide才是最好的参考与帮助,从这些途径去学习与解决问题,比你用Baidu或者上论坛求助,要高效与正确很多倍。能够熟练使用英语进行听、说、读的工程师,比技术能力相同但不能熟练使用英语的工程师,薪酬至少高出一半以上。
(3) 在某个方面成为技术专家,也要保持综合能力的全面发展
DSP工程师也必须先要有自己特别专长的技术方向。同时,也要对自己的沟通能力、个人修养、组织能力、性格特点、管理能力等等进行全面的提升,只有这样才能成长为系统级、架构级的工程师。
(4) 明确你的学习目的,带着问题去学习
其实有些工程师一直都在很努力的工作与学习,但又困惑于工作上没什么成绩,学了什么之后好象还是不懂。图2也许能解释这种困惑:
图2 效率与效果平衡图
学习与工作所追求的最好境界,当然是效率与效果的得兼,次之是无效率但有效果。至于没有效果的事情,我建议还不如去打场球,让自己放松一下。那种学完之后还是觉得什么也不懂的情况,就是因为做了没有效果的事情。
因此,为了有效果的学习,请一定先要清楚你自己要学习什么,给自己一个明确的可量化目标。带着问题去学习新的东西,完善自己的学习方法,知道面对新知识自己应该从哪些方面着手,这样才能真正的事半功倍。
(5) 打好基础,不要好高骛远
电子行业的发展可谓日新月异,DSP这一行业也不例外。但只要你打好了基础,懂得那些最基本的原理,加之正确的学习方法,你就不会被那些所谓的新技术牵着走了,再新的技术在你眼中也将万变不离其中。
切记,万丈高楼从地起!
3 DSP工程师的职业演进方向[1] 让我们来看图3所示的DSP工程师职业演进示意
[2]。
图3 DSP工程师职业演进图
模块级DSP工程师 能力特点:初步接触DSP,可以对DSP上的某些外设进行编程,一心只关注程序能不能Run起来,能不能跑出看似正确的结果。与图片中展示的情形一样,此阶段的DSP工程师尚处于迷茫期。 知识结构:C(C++)语言、数字与模拟电路基础、软硬件调试基础、硬件设计基础。 芯片级DSP工程师 能力特点:能够与其它设计人员协同,按要求完成整个芯片的开发任务。这一阶段的DSP工程师认为已经能掌握一切,就象图片中一样故作老成。 知识结构:汇编语言、编译器与链接器行为、嵌入式操作系统(DSPBIOS、OSEck等)、DSP外围电路设计、软件工程、测试方法、DSP优化方法。
系统级DSP工程师
能力特点:能从产品功能特点出发,进行合理的芯片选型,能够系统的协调软硬件功能,保证DSP相关任务的质量与进度,也能够对DSP相关工作流程提出改进建议。能够走到这一步的工程师,可以说已经几经磨炼,变得稳重而谨慎,浑身上下充满着专业的态度与职业素质。 知识结构:代码质量控制、多核处理器架构(含同构与异构)、CPLD/FPGA设计基础、某一种GCP(ARM/PowerPC/MIPS等)知识、软件版本控制(CVS)、DSP内核行为、深入的DSP优化方法。 架构级DSP工程师 能力特点:了解所从事的行业形势,清楚公司产品在市场中发展情况以及优劣势。能够从公司战略出发,对整个产品的开发过程进行协调、量化与控制,对产品设计进行修正。这个时期的工程师,除了拥有让人敬佩的专业技术外,更加拥有了运筹帷幄的能力,以及更加成熟的人生态度。 知识结构:行业背景、产品设计、管理工程、DSP前沿技术跟踪、系统建模方法、系统测试与评估方法、工程质量管理。 综合上面的DSP工程师发展历程,可以看出,DSP工程师必须在工作与不断的学习中,加强技术的全面性,同时保持对DSP的深入研究,结合公司的实际产品与行业情况,最终能够举重若轻(这也是作者正在努力的方向)。
[1] 此处主要针对嵌入式DSP工程师,而对DSP算法类工程师而言,更侧重于行业应用,不在此过多讨论。但我认为DSP算法类工程师除了关注算法本身,也必须对DSP的芯片特性与功能、编译特性、运行时优化等有充分认识,才能写出更优秀的算法。[2] 此处的四幅图片均来自Baidu的结果,如涉及版权,请联系作者修改。