您的位置:首页 > 其它

如何学习FPGA

2015-03-25 20:27 274 查看
经常会有初学者问,怎样学FPGA,有木有优秀教材推荐。问的人多了,一两句话又说不清楚,还是写篇博文吧。

笔者强烈建议[b]诸位注册一个EETOP的账号,每天签到或者发贴、回贴就有积分了,里面的资源非常丰富,各种软件、资料都能找到。[/b]

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

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

接下来,首先找本实例抄代码。抄代码的意义在于熟悉语法规则和编译器(常用的编译器有:Quartus、ISE、VivadoDesign
Compiler
SynopsysVCS、iverilog、LatticeDiamond、Actel的Libero、Synplify
pro),然后再模仿着写,最后不看书也能写出来。编译完代码,就打开RTL图,看一下综合出来是什么样的电路,用数电的思维去思考HDL,而不是用C语言或者其它高级语言。在这一阶段,推荐的教材是《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仿真(此外还有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入门经典》。此外,你也可以使用System
Verilog
来替代testbench,这样效率会更高一些。如果你是做IC验证的,就必须掌握System Verilog和验证方法学(UVM)。推荐的教材是《Writing Testbenches using SystemVerilog》和《The
UVM Primer
》。

五、增强理论基础。

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

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

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

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

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

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

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

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

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

六、学会使用MATLAB仿真。

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

七、足量的实践。

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

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

八、数电的尽头是模电。

现在FPGA内部的事情是难不到你的,但是信号出了FPGA,你就没法控制了。这个时候必须学好模电。

比如电路分析、模拟电子技术、高频电子线路、PCB设计、EMC、SI等等,能设计出一块带两片DDR2的FPGA开发板,就算通关了。具体的学习路线可以参考本博客的《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》。

九、学无止境。

能到这个境界,说明你已经很厉害了,但是还有很多东西要学的,因为FPGA常常要跟CPU交互,也就是说你得经常跟软件工程师交流,所以也得懂点软件方面的知识。比如ARM(Xilinx的ZYNQ和Altera的SOC会用到ARM的硬核,请参考本博客的《如何学习嵌入式软件》)、DSP、linux、安卓、上位机(QT、Labview、C#、JAVA)都可以学一下,反正学无止境的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: