比较老的一个贴了,对初学者来说还是很实用的。分享与此。
  内容来自骏龙科技资深FAE Andrew Zhang(张亚峰)
由 芯片之家  整理
  1、 问:您认为想学FPGA的话,先学好什么才最重要?
  Andrew:我们玩FPGA的通常就是跟数字电路打交道,要想玩得转,必须先学习并掌握最最基础的数字电路和HDL硬件描述语言,当然这只是入门必备,实际上远远不够。个人拙见,要入行除了至少掌握一种FPGA的仿真及开发调试流程之外;起码还要了解一些模拟电路知识,掌握诸如电源纹波、时钟抖动、信号质量等经常需要测量的硬件参数的测试方法;起码还要掌握一种原理图和Layout设计软件,能够查看分析调试电路板上的电路模块,如电源、时钟、存储器、配置、I/O和高速收发器等模块;起码还要掌握一种单片机的开发流程,项目中难免有一些需要配置控制的需求,使用外置单片机或者内置ARM硬核或者其他软CPU来实现,简单又方便;由于本人水平有限,其他方面这里就不再赘述。
  那么,针对FPGA入门学习的一般流程,简单总结一下,供朋友们参考,有经验的大牛可以绕道:
  首先要有开发平台,把该准备的都准备好,磨刀不误砍柴工。  比如ALTERA的Quartus II软件、开发板和配置调试工具USB Blaster,以及仿真软件Modelsim SE。软件可以从网上下载,入门功能的许可的和谐方法一大堆;开发板和USB Blaster可以借,可以买,动手能力强的朋友,自己画一块也行。对于初学者,建议找一块有详细配套教程的开发板。
  对于新手来讲,按部就班地学习往往就是最快的学习方法。  照猫画虎尽管囫囵吞枣一知半解,但起码能把开发流程摸熟,能跑起来。刚拿到开发板,肯定是丈二和尚摸不着头脑。这个时候,建议先根据开发板的配套教程,把原理图上的各项模块功能厘清,把FPGA 周围的电源、时钟、复位、配置、GPIO 和连接器等的电路原理理一理分析分析。再按照配套教程中介绍的流程,把配套的测试工程跑通,在这个阶段,把FPGA开发所涉及的RTL输入,综合、前仿真、布局布线、后仿真、配置调试的流程摸清楚。学习新东西的过程中,难免会出现一些不熟悉的“疑难杂症”,切莫灰心,坚持就是胜利。当然,往往这个时候,有些朋友开始嫌弃教程写得冗长、写得烂,或者碰到英文教程推辞看不懂,就开始闭门造车,天天碰壁,逐渐丧失兴趣和信心,当开发板上面落满了灰,你还好意思在跳槽的时候吹牛有过如何丰富FPGA 经验吗?
  熟悉了开发流程。  接下来就可以分析或者改写原教程中的代码或者模块,有针对性地去实现一些功能模块,并且通过一些软件自带的调试组件来辅助验证结果是否符合预期,如SignalTap II 等。无论是原厂的单板,还是FPGA 爱好者做的单板,配套例程都会有一些经典的电路实现案例,比如基本的分频器,简单的I2C 通信、SRAM 读写控制,以及稍微复杂的SDRAM 读写控制等,认真分析别人如何写代码实现所观测到的时序,与此同时,阅读相应模块手册或者器件内部组件文档中的时序描述章节来对比分析,查阅网上别人分享的调试心得博客、论文等,直到理解并掌握为止,并且适当地做些笔记归纳总结,所谓时常记记,以防忘记,给其他人或者给以后的自己参考。
  光靠自己研究,有时会被一些问题阻塞思绪,大脑会卡壳。  那么,加入一些学习小组、专业的讨论圈子是有必要的,是利大于弊的,比如电子发烧友论坛、FPGA 产业圈QQ 群,分享心得,咨询问题,探讨人生。这个过程,也有可能误入歧途,有些朋友可能过分享受社交的愉悦,迷恋于灌水的浪潮中。建议在学习工作的时候,把精力主要放到学习研究中,切莫堕入无聊的灌水大军中。除了线上交流,大家也可以参加电子发烧友等社区组织的线下沙龙活动,面对面地交流学习,探讨问题的同时还可能交往一些好朋友。跟别人讨论问题,目的是为了解决问题,处理过程需要一些技巧,建议尽量把已经遇到的问题的器件型号软件版本、观测到的症状、仿真调试的波形、已尝试的方法和已分析的可能原因先罗列出来,让能帮你且有时间有心情帮你的朋友快速及时地分析出原因并给出解决方法,这是一个简单的讨论问题的方法论。别人帮你是恩德,不是义务。如果没有人帮到你,不要灰心,继续想其他办法。
  有一点基础了,就可以适时选择一些项目练手。  不仅可以锻炼FPGA 开发能力,还可以增强信心,沉淀经验,获取价值体现。老是拿着开发板玩,思维容易囿于开发板所涉及的小小“圈套”,其实开发板只是个学习工具,开发板玩得再熟,也只是熟悉那上面的几个小模块而已。FPGA 应用广泛,相关产品层出不穷,大把的就业及市场机会,如果光学不练,那真是白瞎了时光,浪费了生命。
  2、 问:从事FPGA 开发工作有些什么要求呢?
  Andrew:坦白地讲,这个问题很难回答,不同的公司、不同的产品、不同的项目组、不同的研发人员需求千差万别。不过,可以讨论讨论。公司与研发之间是双向选择,公司要求产品具有一定的技术优势和稳定度,能够及时上市覆盖一定的细分行业,研发需要公司按照合同提供合理的待遇和福利。 大公司人员分工相对比较清晰,FPGA 工程师需要配合系统工程师、算法工程师、软件工程师、硬件工程师和测试工程师完成产品单板的功能设计和稳定性测试,因为不是一个人在战斗,所以更需要注重团队合作。而且大公司往往与芯片的供应商有战略合作关系,获取相应的支持资源在力度和速度的优先级上远远高于一般公司,这对FPGA 技术层面的修炼是大有裨益的。
  在这样的公司里工作,窃以为需要培养:
  自我学习能力  公司如果有相关培训,抓住机会好好学习;如果没有,平时在工作之余要加强专业知识充电,把自己打造成不可或缺的人才。另外要注意公司不是学校,公司要的是能干实事的员工,不是夸夸其谈纸上谈兵的赵括,不能天天想着学习而不干活。
  沟通协调能力  遇到疑难问题要及时发起团体讨论诊断,切莫蒙头自己死扛,一来自己压力大,二来影响项目开发进度,必要时要及时把芯片供应商的支持团队拉进来共同讨论分析。要意识到自己的不足,尊重团队中其他成员的意见和建议,经常锻炼自己的沟通协调能力,为以后自己带团队做准备。
  抗压能力  FPGA 开发的难度高居主控芯片(CPU,DSP,FPGA,专用芯片等)的榜首,芯片厂家为了配合市场需求,连年不断升级器件软件,这对于研发来讲就是灾难,但是为了提升最终产品的竞争力,提升我们自身的价值,我们不得不去学习掌握。另外公司项目往往严格按照预期进度开展,如果遇到难题,加班加点是必须的。所以我们平时一定要多锻炼身体,多看书,培养一定的兴趣爱好,以排解项目开发中的苦闷。像某为那样,只注重工作效率,把研发当作加班的机器,时不时就有报道研发跳楼的新闻,简直就是业界的耻辱。
  职业生涯规划能力  大公司职业任务单一,对专业深度要求高。要逐步规划调整自己未来的路,往专业深度走,做技术专家;往专业广度上走,做系统工程师;往技术之外的岗位走,转行。工作要积极主动,选好的路就好好走下去,切忌朝三暮四,滥竽充数,人浮于事,碰到好光景,还可以混日子;碰到诸如当前这种外企裁人潮,诺基亚、思科、微软等公司纷纷大裁员,老大不小的南郭处士再就业难度就比较大。凡事都逃不过因果关系,给公司努力工作,就是为自己的未来努力工作。只要有能力,将来还是有机会出去自创企业,创造更多社会价值。
  小公司自由度高,单独的FPGA 工程师的职位设置不太常见,往往围绕着项目的需求,工程师既要当爹又要当妈,硬件软件逻辑机械模型一起搞。从表面上看,要做的事情比较杂,新人往往感觉在打酱油,跑龙套。有一些朋友耐心比较差,容易陷入经常跳槽的怪圈。其实呢,小公司有小公司的好,产品的复杂度相对来讲不高,研发出项目的速度比较快,数目也比较多,容易积累自身的成就感,这感受和大公司里面有时的无力感有天壤之别。再者小公司由于企业规模小的原因,直接做平台与大公司竞争的可能性不大,往往都是做一些围绕大公司平台的配套产品,或者做一些大公司不愿意做或者尚未注意到的新的细分产品。作为研发,能够直接或间接接触终端行业应用,对产品的功能理解直观透彻,对行业也有一定的调研,将来很容易出去创业,做出更加细分的行业产品。
  在小公司工作,窃以为需要锻炼:
  产品设计的全局观  主动去研究产品的应用需求,整合现有的方案,揣摩可能改进的部分,将其开发设计为产品的亮点,赢得细分行业的市场。产品本身技术含量不高,所以我们也没有必要纠结一些技术细节,只要能实现能出产品,就是研发的价值体现。
  技术的广度  多了解一些常用的芯片平台,热门的实现方案。产品在设计过程中,尽量选择成熟的芯片平台和结构,降低产品研发的风险和投资。
  沟通能力  小公司的老板一般不太注重研发,对研发的投入力度有限,研发团队里往往只有光杆司令几人。长期欠缺沟通,有些朋友可能表现得比较木讷,比较闷骚,其实对今后的职业生涯是有害处的。一定要找机会与公司其他部门的人沟通交流,不要给自己画圈。平时要积极参加一些线下沙龙,活动,锻炼自身的沟通能力。
  耐心。  人生漫漫,来日方长,剩者为王。所谓干一行爱一行,机会永远留给有准备的朋友。
  3、 问:初级工程师应具备哪些专业技能?
  Andrew:至于FPGA 工程师的所需的专业技能,仁者见仁,智者见智,我在第一个问题的回答中也提到若干。这里专门罗列一下我个人浅见,仅供参考:
  时序的设计和仿真能力  时序是设计出来的,一些常见的电路模块必须要掌握,如流水线操作,状态机,localbus 接口,存储器读写等电路的时序设计。FPGA 相关的著作多如牛毛,这里推荐两本:《FPGA Prototyping by Verilog Examples》,美籍华人Pong P. Chu 针对Xilinx Spatran3E 开发套件编著的Verilog 基础教材,可以在网上下载英文版的pdf,可以自行打印成册参考;另外一本有中译本出版,可以在Amazon 购买,作者克里兹,孟宪元翻译的《高级FPGA 设计 结构、实现和优化》,书很好很薄,翻译得有待改进。这两本可以作为学习FPGA 方法论的“红宝书”。
  电路调试能力  稳定的产品是建立在不断调试改进的基础上的。熟练使用常用的测试工具,如万用表、示波器、逻辑分析仪等。熟悉FPGA 厂家提供的调试工具,对于FPGA设计事半功倍,如前面提到的SignalTap II。一些辅助的调试工具最好也能够掌握,如串口、网络报文分析工具等等。电子设计相关的小工具有很多,根据自己的工作需要适当选择。
  文档阅读和编写能力。  作为一名FPGA 工程师,免不了与器件软件的英文文档打交道,阅读文档要先是搞清楚几条:读哪些文档哪个章节,在哪里找这些文档。我想这些一时半会也讲不完,我曾经在某论坛发了一个关于ALTERA FPGA 资料列表的帖子,很受欢迎,至今仍然在热帖之中。建议经常主动与相关芯片厂家的FAE 沟通,获取有效的直接的技术支持;当然文档是需要自己读的,别人不能永远帮你读。再一个,公司内部技术积累,编写文档也是必要的,有一些工具需要掌握,如画波形的TimeGen 或者Timing Designer,字处理软件Word或者WPS 等。关于文档建设,有些公司不太重视,其实文档很重要很必要,对团队内部审阅讨论,对未来的自己参考都是有用的。
  演讲沟通的能力。  俗话说,光说不练假把式,光练不说傻把式,又说又练真把式。团队内部讨论产品需求,方案规划,问题诊断,都需要演讲沟通。甚至请求老板加薪,罗列自己的成果也需要一定的演讲沟通能力。可以适当地借用工具来辅助,比如PPT。
  4、 问:自从业以来,遇到最大的困难与挑战是什么?能否给我们分享些您的经验以及心路历程?
  Andrew:对我个人而言,在学习FPGA 的道路上所遇到的最大的困难和挑战是在大学期间发生的。由于高中阶段过分着迷于网页设计,疏忽了学业,结果只考上一所不太有名的工科大学。大一结束的暑假,没有回家,被老乡介绍到当时由某老师组织的DSP 小组中打杂。小组里有两拨人,一拨人研究基于TI DSP 的指纹识别,另外一拨人研究ALTERA FPGA,基于友晶的DE1 开发板。当时刚刚念完《电路》,比较好奇附录章节的MATLAB 实验,所以玩过一阵子MATLAB,用来解电路的习题。那个时候对DSP 和数字电路都不懂,刚好小组里研究DSP 的人比较多,FPGA 小组还有名额,我就被分到FPGA 小组。短短两个月暑假,老师给我们分配了MIT 的《基于MATLAB 的数字信号处理实验》中的一些习题任务,同时我们也自学了《数字电路》中的部分章节,学会了 Quartus II 的基本操作流程。大二上学期,我基本把DE1 开发板所配套的仅有的几个实验例程都跑通了,算是入门了。那时也不晓得FPGA能干啥,反正就是比较着迷。老师平时给我们介绍一些学习方法,布置一些实验任务,剩下的就是自我学习完成。好景不长,不晓得什么原因,我们那个老师失踪了,至今我都没有他的音信。加上学校懂FPGA 的人屈指可数,我请教过很多老师,但都是玩单片机和DSP 的居多。也邮件联系过骏龙科技和艾睿电子,最终都是石沉大海,没有回信。所以从大二开始,我对FPGA 纯粹就是独自在学习。这对我来讲,是FPGA 学习道路上最大的困难和挑战。
  还好我在网上发现了萧鸿森 oomusou 的博客,他以前搞软件的,当时他30 多岁在台大读研究生同时负责本科FPGA 实验的助教,他写了上百篇基于友晶DE 系列开发板的实验步骤及心得的博文。我几乎把萧老师的大部分博文都深入研究实验过,萧老师写的博文主要是为了带台大本科的FPGA 实验课,行文完全按照写论文的格式,论述深入浅出,对实现原理和代码的解说非常详尽,所引用的内容也一一标出。这段自学经历对我有深远的影响。再后来我认真研究过SOPC 系统和Nios II 软核处理器,加入了著名的“SOPC 技术联盟”QQ 群,群主腾龙大哥,张景秀,是《SOPC 系统设计与实践》的作者。在此群中我认识了很多FPGA 爱好者,一直相处到如今。所以我认为网络的力量是无穷的,不论身在何方,只要感兴趣,可以自学任何技术,我个人的经历就是生动的案例。
  最后我拿杨振宁老先生解说过的“真情妙悟著文章”来总结一下FPGA 的研习心得。首先要存真情,要有兴趣去学习,去摸索,兴趣是第一老师;然后如果能够在学习研究的同时独立或者与别人合作完成一些小成果,比如参加电子竞赛实现一些力所能及并且能体现自己想法的功能模块,这就是妙语,有自己的积累和闪光点;最后著文章,就是经年累月,在项目实践中学习总结,逐步沉淀为一定的专业修养,将自己的思想凝结在产品的开发设计中。
  5、 问:您认为从“Junior”工程师成长为“Senior”工程师的过程有哪几个阶段呢?
  Andrew:这个话题有难度有深度,恐怕我个人能力不够,不好驾驭。窃以为从产品设计的层面上讲,初级工程师也许只能覆盖一些基本的指定的功能模块开发设计,可能还比较吃力,过程中可能还需要向先进请教,工作的独立性也需要逐步加强,所开发的产品可能考虑得不全面。但是他们有优势,年轻好学,积极主动,没有明显的过时的思维惯式和不良的工作习惯,欠缺的只是工作经验,如果公司内部有好的人才培养机制,那么成为高级工程师是早晚的事。相比较于初级工程师,高级工程师更加擅长于系统架构层面的工作,可能具体的执行层面不一定比初级工程师熟练,但是他们身经百战,对行业应用了如指掌,能够敏感地挖掘出行业潜在的需求,并及时转化到产品项目的研发架构及计划中。他们是战略性人才,是研发型公司不可或缺的顶梁柱。
  一般来讲,在初级工程师阶段,所能做的就是打打下手,做一些别人指派的工作,研究实现某些具体的简单的可能有参考的项目模块,同时逐步积累一些已经验证过的项目模块的开发经验。然后下一步就是自己能够独立承接并完成一些有规划的有指标要求的项目,有一些独特的见解和专业的沉淀,这个过程可能对于不同公司不同产品在时间跨度上各有差别。那么最终就是量变导致质变,项目开发的多了,对行业应用的认知就越来越清晰,自然而然就升华蜕变为高级工程师。
  6、 问:在您生命中曾经有哪些人对你造成过影响? 给你的启示又是什么呢?
  Andrew:很多人,主要是我不同时期的老师们和朋友们。给我的启示就是学习别人的长处,正视自己的短处,展示自己的特别之处
  7、 问:身为一名资深FAE 不知道您对这个岗位又有怎样的看法呢?
  Andrew:有一个小故事,大家可能耳熟能详。从前有个人去看医生,他说自己很沮丧,生活无情而残酷,在这充满威胁世上觉得非常孤独。医生说:“不要紧,城里的马戏团有位著名的小丑,会说所有笑话。看了他的表演,你就不会再烦恼了。”那个人哭着说:“可是医生,我就是那个小丑。”这个故事可能有些夸张,但我认为也在一定层面上反映了咨询支持从业人员的现状,FAE 可能也概莫能外吧。
  FAE 是研发人员最真诚的朋友!他们给研发人员推介最先进最合适的技术方案,帮助解决一个又一个已经遇到的技术难题,并且及时指出可能出现问题的规避方法;在加快研发产品速度的同时,也间接地直接的被传导了一些研发压力,那么当不同方向的压力传导到单个FAE 的身上,FAE 的压力也在倍增。他们可能有时没有及时回复你的邮件,没有接你的电话,那是因为太忙了,请不要骂娘,请耐心等待。
  FAE 是一份极具挑战的工作!尤其是主动器件的FAE。需要时刻保持积极主动的学习精神,第一时间把芯片厂商的最新技术学习消化并及时传播给研发朋友们;需要良好的脑力和体力,才能够在短时间内响应及回复来自于不同公司、不同项目、不同研发人员的不同层面的技术问题。
  FAE 是一份幸运的工作!他们能够接触各种各样的行业应用,能够向各种各样的研发人员学习,领略他们宝贵的绚烂的开发设计思想。