网上看到一篇文章,对于初学者很有用,学习的过程和注意点都很详细,值得给大家分享分享
出处: https://zhuanlan.zhihu.com/p/345303288
以下是部分摘要
入行10年后,我总结了这份FPGA学习路线
FPGA入门学习第一部分:硬件编程语言
FPGA的编程语言,是我们必须掌握的内容。和软件开发使用的C、C++、Java等“高级”语言不同,FPGA开发使用的语言叫硬件描述语言HDL,或者寄存器传输级语言RTL,下文中我们统称RTL。
对于初学者,这里我们先不讨论高层次综合的内容,也就是用C语言或者python编程FPGA。关于高层次综合的内容,可以看我之前的文章[《高层次综合:解锁FPGA广泛应用的最后一块拼图》但是至少从目前各个公司的FPGA岗位的需求来看,RTL的代码能力还是必须的。
主流的硬件描述语言有VHDL和Verilog,还有一个叫SystemVerilog。VHDL和Verilog各有优缺点,比如VHDL的语法更加严谨,Verilog更加灵活,比较像C语言。对比VHDL和Verilog谁好谁坏不是这篇文章的重点,入门的话建议先熟练掌握一个就可以。
从我个人的角度来看,推荐先学习Verilog,特别是如果你有一定的C语言基础,那么应该会比较好上手 。等你积累一定开发经验之后,可以考虑再看一下VHDL。因为有可能在实际项目里,一些模块是Verilog写的,另外一些是VHDL写的。所以即使写的不溜,也最好能大概看懂用VHDL写的设计。
不管你学习什么语言, 主要的学习内容都有三大部分,第一是语法,第二是如何用这个语言做电路设计,第三是如何用这个语言做验证 。
FPGA入门学习第二部分:基础知识
说完了编程语言,我们再来看看入门FPGA的第二部分内容:基础知识。这里主要有专业基础课和FPGA相关的专业知识两部分。
专业基础课不多说了,都是大学电子类专业的必修课:电路、数电、计算机体系结构、接口、数字信号处理等等。对于那些想转专业搞数字芯片或者FPGA的朋友,优先看数电,其他的内容应该根据你想从事的专业领域有目的的看。
和FPGA相关的专业知识,包括FPGA芯片的基础结构,以及它的一些基本单元的结构,比如查找表、逻辑单元、逻辑块、DSP、存储器等等。这部分内容,推荐看FPGA官方的文档,当然很多教FPGA的书里也都会有这方面的内容,接下来我们会说。
FPGA结构示意图
还有很重要的一部分,就是了解FPGA的开发流程, 主要包含了设计、仿真、综合、映射、布局布线,时序收敛,映像下载和硬件调试等步骤 。这里面还有很多小的环节,比如时序和面积的约束、各个阶段的仿真等等。我们至少应该知道,为什么需要这些步骤,每个步骤都完成了什么功能。
FPGA入门学习第三部分:开发工具
FPGA开发工具的使用也是入门FPGA必须要掌握的内容。目前,最主流的FPGA开发软件有两个,就是赛灵思/AMD的Vivado,还有英特尔的Quartus。这里又来一个二选一,大家要根据自身情况去选择,比如你们学校教的是谁家的FPGA,或者你用谁家的开发板,或者你手头有谁家的license之类的。在入门阶段,我建议专注于一个平台,没必要两个都学。一个搞通了另外一个其实换汤不换药。
学习FPGA开发工具的目的主要有3点。 第一,熟悉前面说的FPGA开发流程 。比如:怎么创建工程,怎么添加文件,怎么跑一系列编译的流程,怎么加入时序约束,怎么分配管脚,然后怎么把生成的FPGA映像加载到开发板上运行。
第二,就是熟悉一些常用的IP的用法
。在FPGA项目中,我们会用到很多不同的IP核,比如PLL、FIFO、存储器等等,这能帮助我们提升设计的效率和性能,避免重复造轮子。所以我们应该学会怎么配置和调用这些常用的IP。此外还有复杂一些的包括软核处理器NIOS,还有一些通信用的IP比如以太网控制器、PCIe、DDR控制器等等。一开始学习的时候一般不需要看,进阶的时候再看也来得及。
第三,就是学习一些常见的硬件调试和时序分析的方法,比如怎么看最大频率,当时序不收敛的时候怎么进行分析和修改设计,怎么用signaltap做一些简单的硬件测试等等。
使用SignalTap进行硬件测试
这部分的学习,建议大家对照教材或者参考书进行,此外,我强烈建议大家配合着开发板进行学习,这就是下面要说的FPGA入门路线的第四点:动手实验。