新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 骏龙科技Andrew —— FPGA资深FAE的经验独白

骏龙科技Andrew —— FPGA资深FAE的经验独白

作者:时间:2014-09-01来源:网络收藏

  看似简单的几个问题,Andrew却回答的井井有条,小编已经没有办法有什么其他词语去形容了。本文Andrew不仅仅对入门学习流程做了详细的分享,更是对开发工作的要求分成大公司和小公司两个层面来分析。你能想象曾经从一个疏忽学业的人成为一名资深的嘛?

本文引用地址:http://www.eepw.com.cn/article/262433.htm

  1. 您认为想学的话,先学好什么才最重要?

  Andrew:我们玩FPGA的通常就是跟数字电路打交道,要想玩得转,必须先学习并掌握最最基础的数字电路和HDL硬件描述语言,当然这只是入门必备,实际上远远不够。个人拙见,要入行除了至少掌握一种FPGA的仿真及开发调试流程之外;起码还要了解一些模拟电路知识,掌握诸如电源纹波、时钟抖动、信号质量等经常需要测量的硬件参数的测试方法;起码还要掌握一种原理图和Layout设计软件,能够查看分析调试电路板上的电路模块,如电源、时钟、存储器、配置、I/O和高速收发器等模块;起码还要掌握一种单片机的开发流程,项目中难免有一些需要配置控制的需求,使用外置单片机或者内置ARM硬核或者其他软CPU来实现,简单又方便;由于本人水平有限,其他方面这里就不再赘述。

  那么,针对FPGA入门学习的一般流程,简单总结一下,供朋友们参考,有经验的大牛可以绕道:

  1.首先要有开发平台,把该准备的都准备好,磨刀不误砍柴工:

  比如ALTERA的Quartus II软件、开发板和配置调试工具USB Blaster,以及仿真软件Modelsim SE。软件可以从网上下载,入门功能的许可的和谐方法一大堆;开发板和USB Blaster可以借,可以买,动手能力强的朋友,自己画一块也行。对于初学者,建议找一块有详细配套教程的开发板。

  2. 对于新手来讲,按部就班地学习往往就是最快的学习方法:

  照猫画虎尽管囫囵吞枣一知半解,但起码能把开发流程摸熟,能跑起来。刚拿到开发板,肯定是丈二和尚摸不着头脑。这个时候,建议先根据开发板的配套教程,把原理图上的各项模块功能厘清,把FPGA周围的电源、时钟、复位、配置、GPIO和连接器等的电路原理理一理分析分析。再按照配套教程中介绍的流程,把配套的测试工程跑通,在这个阶段,把FPGA开发所涉及的RTL输入,综合、前仿真、布局布线、后仿真、配置调试的流程摸清楚。学习新东西的过程中,难免会出现一些不熟悉的“疑难杂症”,切莫灰心,坚持就是胜利。当然,往往这个时候,有些朋友开始嫌弃教程写得冗长、写得烂,或者碰到英文教程推辞看不懂,就开始闭门造车,天天碰壁,逐渐丧失兴趣和信心,当开发板上面落满了灰,你还好意思在跳槽的时候吹牛有过如何丰富FPGA经验吗?

  3. 熟悉了开发流程:

  接下来就可以分析或者改写原教程中的代码或者模块,有针对性地去实现一些功能模块,并且通过一些软件自带的调试组件来辅助验证结果是否符合预期,如SignalTap II等。无论是原厂的单板,还是FPGA爱好者做的单板,配套例程都会有一些经典的电路实现案例,比如基本的分频器,简单的I2C通信、SRAM读写控制,以及稍微复杂的SDRAM读写控制等,认真分析别人如何写代码实现所观测到的时序,与此同时,阅读相应模块手册或者器件内部组件文档中的时序描述章节来对比分析,查阅网上别人分享的调试心得博客、论文等,直到理解并掌握为止,并且适当地做些笔记归纳总结,所谓时常记记,以防忘记,给其他人或者给以后的自己参考。

  4. 光靠自己研究,有时会被一些问题阻塞思绪,大脑会卡壳:

  那么,加入一些学习小组、专业的讨论圈子是有必要的,是利大于弊的,比如论坛、FPGA产业圈QQ群,分享心得,咨询问题,探讨人生。这个过程,也有可能误入歧途,有些朋友可能过分享受社交的愉悦,迷恋于灌水的浪潮中。建议在学习工作的时候,把精力主要放到学习研究中,切莫堕入无聊的灌水大军中。除了线上交流,大家也可以参加社区组织的线下沙龙活动,面对面地交流学习,探讨问题的同时还可能交往一些好朋友。跟别人讨论问题,目的是为了解决问题,处理过程需要一些技巧,建议尽量把已经遇到的问题的器件型号软件版本、观测到的症状、仿真调试的波形、已尝试的方法和已分析的可能原因先罗列出来,让能帮你且有时间有心情帮你的朋友快速及时地分析出原因并给出解决方法,这是一个简单的讨论问题的方法论。别人帮你是恩德,不是义务。如果没有人帮到你,不要灰心,继续想其他办法。

  5. 有一点基础了,就可以适时选择一些项目练手:

  不仅可以锻炼FPGA开发能力,还可以增强信心,沉淀经验,获取价值体现。老是拿着开发板玩,思维容易囿于开发板所涉及的小小“圈套”,其实开发板只是个学习工具,开发板玩得再熟,也只是熟悉那上面的几个小模块而已。FPGA应用广泛,相关产品层出不穷,大把的就业及市场机会,如果光学不练,那真是白瞎了时光,浪费了生命。

  2.从事FPGA开发工作有些什么要求呢?

  Andrew:坦白地讲,这个问题很难回答,不同的公司、不同的产品、不同的项目组、不同的研发人员需求千差万别。不过,可以讨论讨论。公司与研发之间是双向选择,公司要求产品具有一定的技术优势和稳定度,能够及时上市覆盖一定的细分行业,研发需要公司按照合同提供合理的待遇和福利。 大公司人员分工相对比较清晰,FPGA工程师需要配合系统工程师、算法工程师、软件工程师、硬件工程师和测试工程师完成产品单板的功能设计和稳定性测试,因为不是一个人在战斗,所以更需要注重团队合作。而且大公司往往与芯片的供应商有战略合作关系,获取相应的支持资源在力度和速度的优先级上远远高于一般公司,这对FPGA技术层面的修炼是大有裨益的。

  在这样的公司里工作,窃以为需要培养:

  1. 自我学习能力。公司如果有相关培训,抓住机会好好学习;如果没有,平时在工作之余要加强专业知识充电,把自己打造成不可或缺的人才。另外要注意公司不是学校,公司要的是能干实事的员工,不是夸夸其谈纸上谈兵的赵括,不能天天想着学习而不干活。

  2. 沟通协调能力。遇到疑难问题要及时发起团体讨论诊断,切莫蒙头自己死扛,一来自己压力大,二来影响项目开发进度,必要时要及时把芯片供应商的支持团队拉进来共同讨论分析。要意识到自己的不足,尊重团队中其他成员的意见和建议,经常锻炼自己的沟通协调能力,为以后自己带团队做准备。

  3. 抗压能力。FPGA开发的难度高居主控芯片(CPU,DSP,FPGA,专用芯片等)的榜首,芯片厂家为了配合市场需求,连年不断升级器件软件,这对于研发来讲就是灾难,但是为了提升最终产品的竞争力,提升我们自身的价值,我们不得不去学习掌握。另外公司项目往往严格按照预期进度开展,如果遇到难题,加班加点是必须的。所以我们平时一定要多锻炼身体,多看书,培养一定的兴趣爱好,以排解项目开发中的苦闷。像某为那样,只注重工作效率,把研发当作加班的机器,时不时就有报道研发跳楼的新闻,简直就是业界的耻辱。

  4. 职业生涯规划能力。大公司职业任务单一,对专业深度要求高。要逐步规划调整自己未来的路,往专业深度走,做技术专家;往专业广度上走,做系统工程师;往技术之外的岗位走,转行。工作要积极主动,选好的路就好好走下去,切忌朝三暮四,滥竽充数,人浮于事,碰到好光景,还可以混日子;碰到诸如当前这种外企裁人潮,诺基亚、思科、微软等公司纷纷大裁员,老大不小的南郭处士再就业难度就比较大。凡事都逃不过因果关系,给公司努力工作,就是为自己的未来努力工作。只要有能力,将来还是有机会出去自创企业,创造更多社会价值。

  小公司自由度高,单独的FPGA工程师的职位设置不太常见,往往围绕着项目的需求,工程师既要当爹又要当妈,硬件软件逻辑机械模型一起搞。从表面上看,要做的事情比较杂,新人往往感觉在打酱油,跑龙套。有一些朋友耐心比较差,容易陷入经常跳槽的怪圈。其实呢,小公司有小公司的好,产品的复杂度相对来讲不高,研发出项目的速度比较快,数目也比较多,容易积累自身的成就感,这感受和大公司里面有时的无力感有天壤之别。再者小公司由于企业规模小的原因,直接做平台与大公司竞争的可能性不大,往往都是做一些围绕大公司平台的配套产品,或者做一些大公司不愿意做或者尚未注意到的新的细分产品。作为研发,能够直接或间接接触终端行业应用,对产品的功能理解直观透彻,对行业也有一定的调研,将来很容易出去创业,做出更加细分的行业产品。

  在小公司工作,窃以为需要锻炼:

  1. 产品设计的全局观。主动去研究产品的应用需求,整合现有的方案,揣摩可能改进的部分,将其开发设计为产品的亮点,赢得细分行业的市场。产品本身技术含量不高,所以我们也没有必要纠结一些技术细节,只要能实现能出产品,就是研发的价值体现。

  2. 技术的广度。多了解一些常用的芯片平台,热门的实现方案。产品在设计过程中,尽量选择成熟的芯片平台和结构,降低产品研发的风险和投资。

  3. 沟通能力。小公司的老板一般不太注重研发,对研发的投入力度有限,研发团队里往往只有光杆司令几人。长期欠缺沟通,有些朋友可能表现得比较木讷,比较闷骚,其实对今后的职业生涯是有害处的。一定要找机会与公司其他部门的人沟通交流,不要给自己画圈。平时要积极参加一些线下沙龙,活动,锻炼自身的沟通能力。

  4. 耐心。人生漫漫,来日方长,剩者为王。所谓干一行爱一行,机会永远留给有准备的朋友。

  3. 初级工程师应具备哪些专业技能?

  Andrew:至于FPGA工程师的所需的专业技能,仁者见仁,智者见智,我在第一个问题的回答中也提到若干。

  这里专门罗列一下我个人浅见,仅供参考:

  1. 时序的设计和仿真能力。时序是设计出来的,一些常见的电路模块必须要掌握,如流水线操作,状态机,localbus接口,存储器读写等电路的时序设计。FPGA相关的著作多如牛毛,这里推荐两本:《FPGA Prototyping by Verilog Examples》,美籍华人Pong P. Chu针对Xilinx Spatran3E 开发套件编著的Verilog基础教材,可以在网上下载英文版的pdf,可以自行打印成册参考;另外一本有中译本出版,可以在Amazon购买,作者克里兹,孟宪元翻译的《高级FPGA设计 结构、实现和优化》,书很好很薄,翻译得有待改进。这两本可以作为学习FPGA方法论的“红宝书”。

  2. 电路调试能力。稳定的产品是建立在不断调试改进的基础上的。熟练使用常用的测试工具,如万用表、示波器、逻辑分析仪等。熟悉FPGA厂家提供的调试工具,对于FPGA设计事半功倍,如前面提到的SignalTap II。一些辅助的调试工具最好也能够掌握,如串口、网络报文分析工具等等。电子设计相关的小工具有很多,根据自己的工作需要适当选择。

  3. 文档阅读和编写能力。作为一名FPGA工程师,免不了与器件软件的英文文档打交道,阅读文档要先是搞清楚几条:读哪些文档哪个章节,在哪里找这些文档。我想这些一时半会也讲不完,我曾经在某论坛发了一个关于 FPGA资料列表的帖子,很受欢迎,至今仍然在热帖之中。建议经常主动与相关芯片厂家的沟通,获取有效的直接的技术支持;当然文档是需要自己读的,别人不能永远帮你读。再一个,公司内部技术积累,编写文档也是必要的,有一些工具需要掌握,如画波形的TimeGen或者Timing Designer,字处理软件Word或者WPS等。关于文档建设,有些公司不太重视,其实文档很重要很必要,对团队内部审阅讨论,对未来的自己参考都是有用的。

  4. 演讲沟通的能力。俗话说,光说不练假把式,光练不说傻把式,又说又练真把式。团队内部讨论产品需求,方案规划,问题诊断,都需要演讲沟通。甚至请求老板加薪,罗列自己的成果也需要一定的演讲沟通能力。可以适当地借用工具来辅助,比如ppt。

互感器相关文章:互感器原理


万用表相关文章:万用表怎么用


fpga相关文章:fpga是什么


分频器相关文章:分频器原理

上一页 1 2 下一页

关键词: ALTEAR FPGA FAE

评论


相关推荐

技术专区

关闭