1、入门首先要掌握HDL(HDL=verilog+VHDL)。php
第一句话是:还没学数电的先学数电。而后你能够选择verilog或者VHDL,有C语言基础的,建议选择VHDL。由于verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。固然,你思惟能转得过来,也能够选verilog,毕竟在国内verilog用得比较多。html
接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,经常使用的编译器有:Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro),而后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路。linux
HDL是硬件描述语言,突出硬件这一特色,因此要用数电的思惟去思考HDL,而不是用C语言或者其它高级语言,若是不能理解这句话的,能够看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《Verilog HDL数字设计与综合》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就能够进入下一阶段了。ios
此外,你手上必须准备Verilog或者VHDL的官方文档,《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些语法问题的时候能查一下。git
为何不推荐学习NIOS II和MicroBlaze等软核?算法
一、性价比不高,通常的软核性能大概跟Cortex M3或M4差很少,用FPGA那么贵的东西去作一个性能通常的CPU,在工程上是很是不划算的。不如另外加一块M3。express
二、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的状况下,再加上软核,致使布局布线变得至关困难。编程
三、软核不开源,出现Bug的时候,不容易调试。api
2、独立完成中小规模的数字电路设计。网络
如今,你能够设计一些数字电路了,像交通灯、电子琴、DDS等等,推荐的教材是《Verilog HDL应用程序设计实例精讲》。在这一阶段,你要作到的是:给你一个指标要求或者时序图,你能用HDL设计电路去实现它。这里你须要一块开发板,能够选Altera的cyclone IV系列,或者Xilinx的Spantan 6。还没掌握HDL以前千万不要买开发板,由于你买回来也没用。这里你不必每次编译经过就下载代码,我们用modelsim仿真(此外还有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具),若是仿真都不能经过那就不用下载了,确定不行的。在这里先掌握简单的testbench就能够了。推荐的教材是《WRITING TESTBENCHES Functional Verification of HDL Models》。
3、掌握设计方法和设计原则。
你可能发现你综合出来的电路尽管没错,但有不少警告。这个时候,你得学会同步设计原则、优化电路,是速度优先仍是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/CPLD设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、LogicLock),静态时序分析(timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。若是有不懂的地方能够暂时跳过,由于这部分还须要足量的实践,才能有较深入的理解。
4、学会提升开发效率。
由于Quartus和ISE的编辑器功能太弱,影响了开发效率。因此建议使用Sublime text编辑器中代码片断的功能,以减小重复性劳动。Modelsim也是经常使用的仿真工具,学会TCL/TK以编写适合本身的DO文件,使得仿真变得自动化,推荐的教材是《TCL/TK入门经典》。你可能会手动备份代码,可是专业人士都是用版本控制器的,因此,为了提升工做效率,必须掌握GIT。文件比较器Beyond Compare也是个比较经常使用的工具。此外,你也能够使用System Verilog来替代testbench,这样效率会更高一些。若是你是作IC验证的,就必须掌握System Verilog和验证方法学(UVM)。推荐的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012语法手册》。
掌握了TCL/TK以后,能够学习虚拟Jtag(ISE也有相似的工具)制做属于本身的调试工具,此外,有时间的话,最好再学个Python。脚本,意味着一劳永逸。
5、加强理论基础。
这个时候,你已经会使用FPGA了,可是还有不少事情作不了(好比,FIR滤波器、PID算法、OFDM等),由于理论没学好。我大概地分几个方向供你们参考,后面跟的是要掌握的理论课。
一、信号处理——信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理
二、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort
三、无线通讯——信号与系统、数字信号处理、通讯原理、移动通讯基础、随机过程、信息论与编码
四、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理
五、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用
六、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用
七、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理
如今你发现,原来FPGA会涉及到那么多知识,你能够选一个感兴趣的方向,可是工做中颇有可能用到其中几个方向的知识,因此理论仍是学得越多越好。若是你要更上一层,数学和英语是不可避免的。
6、学会使用MATLAB仿真。
设计FPGA算法的时候,多多少少都会用到MATLAB,好比CRC的系数矩阵、数字滤波器系数、各类表格和文本处理等。此外,MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照,能够知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。
7、足量的实践。
这个时候你至少读过几遍芯片手册(官网有),而后能够针对本身的方向,作必定量的实践了(期间要保持良好的代码风格,增长元件例化语句的可读性,绘制流程图/时序图,撰写文档的习惯)。好比:通讯类的能够作调制解调算法,仪表类的能够作总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会以为书上的东西都很肤浅。那么,你能够在知网、百度文库、EETOP论坛、opencores、ChinaAET、Q群共享、博客上面找些相关资料(校外的朋友能够在淘宝买个知网帐号)。其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。
在工做当中,或许你须要关注不少协议和行业标准,协议能够在EETOP上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。
8、图像处理。(这部分只写给想学图像处理的朋友,也是由浅入深的路线)
一、Photoshop。花1、两周的时间学习PS,对图像处理有个大概的了解,知道各类图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让你们对图像处理有个感性的认识,而不是一上来就各类各样的公式推导。推荐《Photoshop CS6彻底自学教程》。
二、基于MATLAB或OpenCV的图像处理。有C/C++基础的能够学习OpenCV,不然的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数便可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。
三、图像处理的基础理论。这部分的理论是须要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础很差的话,建议先补补基础再来。看不懂的理论也能够暂时先放下,或许学到后面就天然而然地开窍了。推荐《数字图像处理》。
四、基于FPGA的图像处理。把前面学到的理论运用到FPGA上面,若是这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。
五、进一步钻研数学。要在算法上更上一层,必然须要更多的数学,因此这里建议学习实分析、泛涵分析、小波分析等。
下面这两个阶段是给感兴趣的朋友介绍的。
9、数电的尽头是模电。
如今FPGA内部的事情是难不到你的,可是信号出了FPGA,你就无法控制了。这个时候必须学好模电。好比:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI等等,能设计出一块带两片DDR3的FPGA开发板,就算通关了。具体的学习路线能够参考本博客的《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》。
10、学无止境。
能到这个境界,说明你已经很厉害了,可是还有不少东西要学的,由于FPGA经常要跟CPU交互,也就是说你得常常跟软件工程师交流,因此也得懂点软件方面的知识。好比ARM(Xilinx的ZYNQ和Altera的SOC会用到ARM的硬核,请参考本博客的《如何学习嵌入式软件》)、DSP、linux、安卓、上位机(QT、C#、JAVA)均可以学一下,反正学无止境的。
FPGA资深FAE的经验独白 — 骏龙科技Andrew_Zhang |
看似简单的几个问题,Andrew却回答的层次分明,小编已经没有办法有什么其余词语去形容了。本文Andrew不只仅对FPGA入门学习流程作了详细的分享,更是对FPGA开发工做的要求分红大公司和小公司两个层面来分析。你能想象曾经从一个疏忽学业的人成为一名资深FAE的嘛? |
采访:Cindy Sun chenfeng@elecfans.com 撰文、组稿:Cici Chen chenfeng@elecfans.com (原创内容,转载请注明来自ElecFans) |
1. 电子发烧友:您认为想学FPGA的话,先学好什么才最重要? |
Andrew: 咱们玩FPGA的一般就是跟数字电路打交道,要想玩得转,必须先学习并掌握最最基础的数字电路和HDL硬件描述语言,固然这只是入门必备,实际上远远不够。我的拙见,要入行除了至少掌握一种FPGA的仿真及开发调试流程以外;起码还要了解一些模拟电路知识,掌握诸如电源纹波、时钟抖动、信号质量等常常须要测量的硬件参数的测试方法;起码还要掌握一种原理图和Layout设计软件,可以查看分析调试电路板上的电路模块,如电源、时钟、存储器、配置、I/O和高速收发器等模块;起码还要掌握一种单片机的开发流程,项目中不免有一些须要配置控制的需求,使用外置单片机或者内置ARM硬核或者其余软CPU来实现,简单又方便;因为本人水平有限,其余方面这里就再也不赘述。 那么,针对FPGA入门学习的通常流程,简单总结一下,供朋友们参考,有经验的大牛能够绕道:
|
2. 电子发烧友:从事FPGA开发工做有些什么要求呢? |
Andrew: 坦白地讲,这个问题很难回答,不一样的公司、不一样的产品、不一样的项目组、不一样的研发人员需求千差万别。不过,能够讨论讨论。公司与研发之间是双向选择,公司要求产品具备必定的技术优点和稳定度,可以及时上市覆盖必定的细分行业,研发须要公司按照合同提供合理的待遇和福利。 大公司人员分工相对比较清晰,FPGA工程师须要配合系统工程师、算法工程师、软件工程师、硬件工程师和测试工程师完成产品单板的功能设计和稳定性测试,由于不是一我的在战斗,因此更须要注重团队合做。并且大公司每每与芯片的供应商有战略合做关系,获取相应的支持资源在力度和速度的优先级上远远高于通常公司,这对FPGA技术层面的修炼是大有裨益的。 在这样的公司里工做,窃觉得须要培养:
在小公司工做,窃觉得须要锻炼:
|
3. 电子发烧友:初级工程师应具有哪些专业技能? |
Andrew: 至于FPGA工程师的所需的专业技能,仁者见仁,智者见智,我在第一个问题的回答中也提到若干。 这里专门罗列一下我我的浅见,仅供参考:
|
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是一份幸运的工做, 他们可以接触各类各样的行业应用,可以向各类各样的研发人员学习,领略他们宝贵的绚烂的开发设计思想。 |
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=446964