zoukankan      html  css  js  c++  java
  • 如何学好FPGA

    http://bbs.elecfans.com/jishu_278578_1_1.html
    掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用FPGA可以让设计变得非常有灵活性。掌握了FPGA设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但FPGA入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。FPGA设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这个门槛很容易就过去。  我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对FPGA学习步骤理解写出来,仅是作为一个参考,不对的地方,欢迎大家讨论和指正。
    FPGA学习步骤1、工欲善其事,必先利其器。
    计算机必不可少。目前FPGA应用较多的是Altera和xilinx这两个公司,可以选择安装quartusII或者ISE软件。这是必备的软件环境。
    硬件环境还需要下载器、目标板。虽然有人说没有下载器和目标板也可学习fpga,但那总是纸上谈兵。这就像谈女朋友,总是嘴上说说,通个电话,连个手都没牵,能说人家是你朋友?虽说搭建硬件环境需要花费,但想想,硬件环境至多几百元钱,你要真的掌握FPGA的设计,起薪比别人都不止高出这么多。这点花费算什么?
    FPGA学习步骤2、熟悉verilog语言或者vhdl语言 ,熟练使用quartusII或者ISE软件。
    VHDL和verilog各有优点,选择一个,建议选择verilog。熟练使用设计软件,知道怎样编译、仿真、下载等过程。
    起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。入门阶段可以在利用网络资源完成。
    FPGA学习步骤3、设计一个小代码,下载到目标板看看结果
    此时可以设计一个最简答的程序,譬如点灯。如果灯在闪烁了,表示基本入门了。如果此时能够下载到FPGA外挂的flash,FPGA程序能够从flash启动,表明FPGA的最简单设计你已经成功,可以到下一步。
    FPGA学习步骤4、设计稍微复杂的代码,下载到目标板看看结果。
    可以设计一个UART程序,网上有参考,你要懂RS232协议和FPGA内置的逻辑分析仪。网上下载一个串口调试助手,调试一番,如果通信成功了, 恭喜,水平有提高。进入下一步。
    FPGA学习步骤5、设计复杂的代码,下载到目标板看看结果。
    譬如sdram的程序,网上也有参考,这个设计难度有点大。可用串口来调试sdram,把串口的数据存储到sdram,然后读回,如果成功,那你就比较熟悉FPGA设计了
    FPGA学习步骤6、设计高速接口,譬如ddr2或者高速串行接口
    这要对FPGA的物理特性非常了解,而且要懂得是时序约束等设计方法,要看大量的原厂文档,这部分成功了,那就对FPGA的物理接口掌握很深,你就是设计高手了
    FPGA学习步骤7、设计一个复杂的协议
    譬如USB、PCIexpress、图像编解码等,锻炼对系统的整体把握和逻辑划分。完成这些,你就是一个一流的高手、
    FPGA学习步骤8、学习再学习
    学习什么,我也不知道,我只知道“学无止境,山外有山”。
    现在很多FPGA工程师,没找到合适,我觉得很多人从开始的时候就误入歧途了,对新手学习FPGA设计我也说一点看法吧。我认为要从基础开始做,基础牢,才有成为高手的可能。
    我觉得FPGA学习有以下几步必须要走:
    第一步:学习了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有了解了FPGA内部的结构才能明白为什么写Verilog和写C整体思路是不一样的。
    第二步:掌握FPGA设计的流程。了解每一步在做什么,为什么要那么做。很多人都是不就是那几步吗,有什么奇怪的?呵呵,我想至少有一半以上的人不知道synthesize和traslate的区别吧。
    了解了FPGA的结构和设计流程才有可能知道怎么去优化设计,提高速度,减少资源,不要急躁,不要去在为选择什么语言和选择哪个公司的芯片上下功夫。语言只是一个表达的方式,重要的是你的思维,没有一个好的指导思想,语言用得再好,不过是个懂语言的人。
    第三步:开始学习代码了。我建议要学代码的人都去Altera或Xilinx的网站上下原厂工程师的代码学习。不要一开始就走入误区。
    第四步:template很重要。能不能高效利用FPGA资源,一是了解fpga结构,二是了解欲实现的逻辑功能和基本机构,三是使用正确的模板。FPGA内部器件种类相对较单一,用好模板,你的逻辑才能被高效的综合成FPGA擅长表达的结构:)
    做FPGA主要是要有电路的思想,作为初学者,往往对器件可能不是熟悉,那么应该对于数字电路的知识很熟悉吧,FPGA中是由触发器和查找表以及互联线等基本结构组成的,其实在我们在代码里面能够看到的就是与非门以及触发器,不要把verilog和c语言等同起来,根本就是不同的东西,没有什么可比性,在写一句程序的时候应该想到出来的是一个什么样的电路,计数器选择器 三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的时候可以画画时序图,这样思路会更加的清晰,还有就是仿真很重要,不要写完程序就去往FPGA中去加载,首先要仿真,尤其是对比较大型一点的程序,想像自己是在做asic,是没有二次机会的,所以一定要把仿真做好,还有很多新手对于语言的学习不知道选vhdl好还是verilog好,个人偏好verilog,当然不是说vhdl不好,反正写出来的都是电路,那当然就不要在语言的语法上面花太多的功夫了,verilog 言简意赅assign always case if else 掌握这些几乎可以写出90%的电路了,上面是我对FPGA学习的一些愚见,希望对大家有所帮助。
     
     
     
     
     
     
     
     
     
     
     
     
    http://blog.csdn.net/k331922164/article/details/44626989
    PS:笔者强烈建议诸位注册一个EETOP的账号,每天签到或者发贴、回贴就有积分了,里面的资源非常丰富,各种软件、资料都能找到。

    一、入门首先要掌握HDL(HDL=verilog+VHDL)。

           第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。

           接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:QuartusISEVivadoDesign Compiler 、SynopsysVCS、iverilog、LatticeDiamond、Microsemi/Actel的Libero、Synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路

           HDL是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考HDL,而不是用C语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《Verilog HDL数字设计与综合》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。

           此外,你手上必须准备Verilog或者VHDL的官方文档,《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》,以便遇到一些语法问题的时候能查一下。

           为什么不推荐学习NIOS II和MicroBlaze等软核?

          1、性价比不高,一般的软核性能大概跟Cortex M3或M4差不多,用FPGA那么贵的东西去做一个性能一般的CPU,在工程上是非常不划算的。不如另外加一块M3。

          2、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下,再加上软核,导致布局布线变得相当困难。

          3、软核不开源,出现Bug的时候,不容易调试。

    二、独立完成中小规模的数字电路设计。

           现在,你可以设计一些数字电路了,像交通灯、电子琴、DDS等等,推荐的教材是《Verilog HDL应用程序设计实例精讲》。在这一阶段,你要做到的是:给你一个指标要求或者时序图,你能用HDL设计电路去实现它。这里你需要一块开发板,可以选Altera的cyclone IV系列,或者Xilinx的Spantan 6。还没掌握HDL之前千万不要买开发板,因为你买回来也没用。这里你没必要每次编译通过就下载代码,咱们用modelsim仿真(此外还有QuestaSimNC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具),如果仿真都不能通过那就不用下载了,肯定不行的。在这里先掌握简单的testbench就可以了。推荐的教材是《WRITING TESTBENCHES Functional Verification of HDL Models》。

    三、掌握设计方法和设计原则。

           你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/CPLD设计》第二版的基础篇高级篇两本。学会加快编译速度(增量式编译、LogicLock),静态时序分析timequest),嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过,因为这部分还需要足量的实践,才能有较深刻的理解。

    四、学会提高开发效率。

            因为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。脚本,意味着一劳永逸。

    五、增强理论基础。

            这个时候,你已经会使用FPGA了,但是还有很多事情做不了(比如,FIR滤波器、PID算法、OFDM等),因为理论没学好。我大概地分几个方向供大家参考,后面跟的是要掌握的理论课。

    1、信号处理——信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理

    2、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort

    3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码

    4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理

    5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用

    6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用

    7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理

           现在你发现,原来FPGA会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的。

    六、学会使用MATLAB仿真。

            设计FPGA算法的时候,多多少少都会用到MATLAB,比如CRC的系数矩阵、数字滤波器系数、各种表格和文本处理等。此外,MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照,可以知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。

    七、足量的实践。

           这个时候你至少读过几遍芯片手册(官网有),然后可以针对自己的方向,做一定量的实践了(期间要保持良好的代码风格增加元件例化语句的可读性,绘制流程图/时序图撰写文档的习惯)。比如:通信类的可以做调制解调算法,仪表类的可以做总线分析仪等等。不过这些算法,在书上只是给了个公式、框图而已,跟实际的差距很大,你甚至会觉得书上的东西都很肤浅。那么,你可以在知网百度文库EETOP论坛opencoresChinaAET、Q群共享、博客上面找些相关资料(校外的朋友可以在淘宝买个知网账号)。其实,当你到了这个阶段,你已经达到了职业级水平,有空就多了解一些前沿技术,这将有助于你的职业规划。

            在工作当中,或许你需要关注很多协议和行业标准,协议可以在EETOP上面找到,而标准(如:国家标准GB和GB/T,国际标准ISO)就推荐《标准网》和《标准分享网》。

    八、图像处理。(这部分只写给想学图像处理的朋友,也是由浅入深的路线)

    1、Photoshop。花一、两周的时间学习PS,对图像处理有个大概的了解,知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念,并能使用它。这部分是0基础,目的让大家对图像处理有个感性的认识,而不是一上来就各种各样的公式推导。推荐《Photoshop CS6完全自学教程》。

    2、基于MATLAB或OpenCV的图像处理。有C/C++基础的可以学习OpenCV,否则的话,建议学MATLAB。这个阶段下,只要学会简单的调用函数即可,暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。

    3、图像处理的基础理论。这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础,基础不好的话,建议先补补基础再来。看不懂的理论也可以暂时先放下,或许学到后面就自然而然地开窍了。推荐《数字图像处理》。

    4、基于FPGA的图像处理。把前面学到的理论运用到FPGA上面,如果这时你有前面第七个阶段的水平,你将轻松地独立完成图像算法设计(图像处理是离不开接口的,上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。

    5、进一步钻研数学。要在算法上更上一层,必然需要更多的数学,所以这里建议学习实分析泛涵分析小波分析等。

    下面这两个阶段是给感兴趣的朋友介绍的。

    九、数电的尽头是模电。

           现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。比如:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI等等,能设计出一块带两片DDR3的FPGA开发板,就算通关了。具体的学习路线可以参考本博客的《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》。

    十、学无止境。

           能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为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入门学习的一般流程,简单总结一下,供朋友们参考,有经验的大牛可以绕道:
    • 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工程师,免不了与器件软件的英文文档打交道,阅读文档要先是搞清楚几条:读哪些文档哪个章节,在哪里找这些文档。我想这些一时半会也讲不完,我曾经在某论坛发了一个关于ALTEAR FPGA资料列表的帖子,很受欢迎,至今仍然在热帖之中。建议经常主动与相关芯片厂家的FAE沟通,获取有效的直接的技术支持;当然文档是需要自己读的,别人不能永远帮你读。再一个,公司内部技术积累,编写文档也是必要的,有一些工具需要掌握,如画波形的TimeGen或者Timing Designer,字处理软件Word或者WPS等。关于文档建设,有些公司不太重视,其实文档很重要很必要,对团队内部审阅讨论,对未来的自己参考都是有用的。
    • 4. 演讲沟通的能力。俗话说,光说不练假把式,光练不说傻把式,又说又练真把式。团队内部讨论产品需求,方案规划,问题诊断,都需要演讲沟通。甚至请求老板加薪,罗列自己的成果也需要一定的演讲沟通能力。可以适当地借用工具来辅助,比如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是一份幸运的工作,
    他们能够接触各种各样的行业应用,能够向各种各样的研发人员学习,领略他们宝贵的绚烂的开发设计思想。

    http://bbs.elecfans.com/forum.php?mod=viewthread&tid=446964

  • 相关阅读:
    Linux shell(3)
    Linux shell 编写(2)
    Linux shell 编写(1)
    团队冲刺(一)
    峦码团队任务表
    电梯演讲&界面展示说明
    第一次小组会议——NABCD讨论
    开发项目&团队介绍
    Linux中查看各文件夹大小命令:du -h --max-depth=1
    shell脚本[] [[]] -n -z 的含义解析
  • 原文地址:https://www.cnblogs.com/chengqi521/p/6529499.html
Copyright © 2011-2022 走看看