FPGA工程师成长路程

废话:

时间飞逝入职也两年多了,计算机相关专业入职做了FPGA,小公司,之前一直做代码维护升级,一些功能的小改动,最近自己独立做了两个新的项目,也觉得自己专业水平有待提升。做硬件小公司懂得都懂,没项目的时候很闲,再就是公司哪里有活就把你往哪里派,下车间啊去工程现场啊。加之现在就业环境很差,大家都很卷。觉得自己不能再这么浑浑噩噩的过,需要系统学习和进步了。
文章主要来自:https://www.elecfans.com/d/1917862.html
特此记录一下,激励自己督促自己学习,也和大家共勉。

一,入门阶段

先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多(我们公司以前的代码都是VDHL的,所以我对VHDL更熟悉一些)

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

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

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

现在,你可以设计一些数字电路了,像交通灯、电子琴、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》
书籍:《Verilog HDL应用程序设计实例精讲》 《WRITING TESTBENCHES Functional Verification of HDL Models》

三,掌握设计方法和设计原则:

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

四,学会提高开发效率:

因为Quartus和ISE的编辑器功能太弱,影响了开发效率。所以建议使用Sublime text编辑器中代码片段的功能,以减少重复性劳动。Modelsim也是常用的仿真工具,学会TCL/TK以编写适合自己的DO文件,使得仿真变得自动化,推荐的教材是《TCL/TK入门经典》。你可能会手动备份代码,但是专业人士都是用版本控制器Git的,可以提高工作效率。文件比较器Beyond Compare也是个比较常用的工具,Git也有比较功能。此外,你也可以使用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、HDMI。
3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码。
4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理、RISC-V。
5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用。
6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用。
7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理、H.265
现在你发现,原来FPGA会涉及到那么多知识,你可以选一个感兴趣的方向,但是工作中很有可能用到其中几个方向的知识,所以理论还是学得越多越好。如果你要更上一层,数学和英语是不可避免的

六,学会使用MATLAB仿真:

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

七,足量的实践:

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

八,数电的尽头是模电:

现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。比如:电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI、PI等等,能设计出一块带两片DDR3的FPGA开发板,就算通关了。

九,学无止境:

能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为FPGA常常要跟CPU交互,也就是说你得经常跟软件工程师交流,所以也得懂点软件方面的知识。比如ARM(Xilinx的ZYNQ和Altera的SOC会用到ARM的硬核,请参考本博客的《如何学习嵌入式软件》)、DSP、Linux、安卓、上位机(QT、C#、JAVA)都可以学一下,反正学无止境的

十,其他问题:

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

1、性价比不高,一般的软核性能大概跟Cortex M3或M4差不多,用FPGA那么贵的东西去做一个性能一般的CPU,在工程上是非常不划算的。不如另外加一块M3。
2、加上软核,可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下,再加上软核,导致布局布线变得相当困难。
3、软核不开源,出现Bug的时候,不容易调试。
4、工程上很少使用,极有可能派不上用场。
b、为什么不推荐0基础学习ZYNQ或SOC?
1、容易让人有傍同心理。傍同心理是指一个人通过渲染与自己有亲近关系的人的杰出,来掩盖和弥补自己在这方面的不足,从而获得心理上的平衡。自己在学习很厉害的东西,然后也感觉自己很厉害,但这只是错觉而已。
2、入门应该学习尽量简单的东西,要么专心学习ARM,要么专心学习FPGA。这样更容易有成就感,增强信心。
3、ZYNQ和SOC的应用领域并不广,还有很多人没听过这种东西,导致求职的不利。
4、开发工具编译时间长,浪费较多时间。
5、绝大多数工作,都只是负责一方面,也就是说另一方面,很有可能派不上用场。
c、为什么已经存在那么多IP核,仍然需要写HDL?
1、问这种问题的,一般是学生,他们没有做过产品,没有遇到过工程上的问题。
2、IP核并非万能,不能满足所有需求。
3、尽量少用闭源IP核,一旦出问题,这种黑匣子很可能让产品难产。
4、深入理解底一层次,可以更好地使用高一层次。该法则可以适用于所有编程语言

作为一个十年的FPGA工程师,我的职业成长经历充满了挑战和机遇。开始的时候,我对FPGA的理解只是停留在书本知识上,缺乏实际操作的经验。然而,随着实践的积累,我逐渐掌握了FPGA设计的各个领域。 早期的成长经历是通过学习掌握FPGA的基础知识和工具的使用,如Verilog/VHDL编程语言、Xilinx/Vivado开发工具等。这让我有了在顶层设计的基础上完成简单的FPGA设计的能力。 随着时间的推移,我开始接触到更复杂的项目和挑战。我学习了如何优化FPGA设计,以减少功耗和资源占用,提升性能。同时,我也深入研究了高级设计技术,如时序约束、时钟域处理、IP核使用等。 在职业生涯中,我参与了多个大型项目的开发,这为我的成长提供了宝贵的机会。通过与团队合作,我学习到了如何与其他工程师合作,有效地进行沟通和协作。这帮助我成为一个具有良好团队合作精神的工程师。 此外,我也积极参加行业会议和培训,不断更新自己的知识和技能。我了解到了FPGA领域的最新发展和趋势,并将这些知识应用到实际的工程项目中。 在这十年中,我不仅在技术方面成长,还提升了自己的项目管理和解决问题的能力。我学会了如何合理地规划并管理项目的时间和资源,以确保项目按时交付。 总的来说,作为一个十年的FPGA工程师,我的成长经历是一个循序渐进的过程。通过不断的学习和实践,我逐渐掌握了FPGA设计的各个领域,并提升了自己的技术和管理能力。我相信,在未来的职业生涯中,我将继续不断学习和成长,为FPGA领域的发展做出更大的贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值