怎么学习FPGA?菜鸟学习FPGA的步骤

一、入门首先要掌握hdl(hdl=verilog+vhdl)。 第一句话是:还没学数电的先学数电。然后你可以选择verilog或者vhdl,有c语言基础的,建议选择vhdl。因为verilog太像c了,很容易混淆,最后你会发现,你花了大量时间去区分这两种语言,而不是在学习如何使用它。当然,你思维能转得过来,也可以选verilog,毕竟在国内verilog用得比较多。
接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器,常用的编译器有:quartus、ise、vivado、design compiler 、synopsys的vcs、iverilog、lattice的diamond、microsemi/actel的libero、synplify pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开rtl图,看一下综合出来是什么样的电路。
hdl是硬件描述语言,突出硬件这一特点,所以要用数电的思维去思考hdl,而不是用c语言或者其它高级语言,如果不能理解这句话的,可以看《什么是硬件以及什么是软件》。在这一阶段,推荐的教材是《verilog传奇》、《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》。
三、掌握设计方法和设计原则。 你可能发现你综合出来的电路尽管没错,但有很多警告。这个时候,你得学会同步设计原则、优化电路,是速度优先还是面积优先,时钟树应该怎样设计,怎样同步两个异频时钟等等。推荐的教材是《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论坛、opencores、chinaaet、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)都可以学一下,反正学无止境的。
十一、其它问题。 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、深入理解底一层次,可以更好地使用高一层次。该法则可以适用于所有编程语言。

又一大厂入局!预计2025年量产SiC功率器件
盛思达诚邀您共赴第82届中国(天津)教育装备展
STM32单片机的应用笔记 奇怪的NRST 管脚异常复位问题
一种新颖Bootloader设计方案
百度再次投资 利用AI技术加速医疗智能化进程
怎么学习FPGA?菜鸟学习FPGA的步骤
一文了解汽车电子被动元件AEC-Q200认证
基于ARM7 TDMI核的MCU ADuC7020的单电源心
RISC-V架构会是我国未来突破科技封锁的一个突破口!
石墨烯不仅能用于电池 还能够从海水中去除盐类物质
如何计算模型对预测结果的信心
数字压力变送器的设计
优恩-常见抑制瞬变骚扰器件(TVS管/MOV压敏电阻/陶瓷气体放电管)区别
苹果印度扩产,富士康将迎来危机感
pcb软性线路板的优点以及应用
连拓精密气密性测试仪检测洁面仪气密性案例分享
百度、小鹏“杀入”又一新能源材料赛道!
常见的电源管理IC芯片有哪些
为什么有时候FIF不能正常工作?
谷歌欲借助高空飞艇建设移动通信网络