入行10年后,FPGA学习路线经验总结

在这篇文章里,我会主要介绍入门FPGA的学习路线。如果你刚刚开始学习FPGA,或者想要学习FPGA,那么这篇文章肯定会对你有所帮助。如果你已经学习一段时间了,那么这里介绍的学习路线应该会让你少走一些弯路。如果你是一个FPGA高手,也欢迎在评论里分享你的学习经验,说不定就能帮助很多希望学习这个内容的朋友们。

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写的设计。

不管你学习什么语言,主要的学习内容都有三大部分,第一是语法,第二是如何用这个语言做电路设计,第三是如何用这个语言做验证

关于Verilog语法的书有无数本,但其实内容都大同小异,所以不用太纠结看哪本书,找一本评价好的就好。比较有名的有《Verilog数字系统设计教程》,或者《Verilog HDL高级数字设计》。但是不管你选哪本书,建议你花时间认真看一遍Verilog语法,不需要死记硬背,但应该对每条语法的基本用法和功能做到心中有数。

Verilog的语法,可以分为可综合(Synthesizable)和不可综合(Non-synthesizable)两部分。可综合就是指这部分语句可以生成对应的硬件电路。如果你的时间有限,一开始我们可以先看可以综合的Verilog语法,这个其实不多,常用的大概只有十来条语句。掌握之后我们再看用来主要用来写仿真和验证的那些不可综合的Verilog语句。

配合Verilog的学习,我强烈推荐一个刷题的网站,叫HDLBits。这里面有很多由浅入深的基础性的练习,非常适合初学者学习,强烈建议大家把这里面的题目做一遍。从做题的角度来看,其实学习Verilog和学习Python、C++或者Java等高级语言没什么区别,都需要代码量的积累,以提升熟练度。所以如果你学习的时间特别有限,可以先做这里的题目,遇到知识点之后,再去反查你的Verilog书,这样通过实践来学习。

使用RTL进行逻辑设计,主要有组合电路和时序电路两部分。组合电路里包括各种门电路、多路选择器、算术运算电路比如加法乘法、有符号数无符号数等等。时序电路里包括寄存器、时钟和复位的同步异步、计数器、移位等等,特别是状态机,都应该熟练掌握。这些在HDLbits那个网站里都有很多对应的题目。

RTL的验证,初学者主要掌握怎么搭建测试平台以及编写简单的测试用例就可以。验证这个东西可以很复杂,比如业界广泛使用的UVM、或者之前介绍过的形式化方法等等。我在验证这个领域花了将近三年的时间学习,仍然有很多欠缺的地方。所以对于初学者来说,这些内容在我们入门的时候不需要掌握。在下一篇文章里,我们再详细说说这些进阶的验证方法学。

初学者学习RTL最大的难点,也是最普遍的问题,就是喜欢用软件编程的思维来考虑硬件。其实,软件编程大都是顺序执行的,但是硬件编程大都是并行执行的,这是一个很大的思维方式的转变。这就需要我们在学习的Verilog的时候一定要多想想对应的电路,比如在Verilog里写一个for循环,它综合出来是什么样的电路结构;或者if else与case语句,生成的电路有什么区别等等,都是值得我们思考和总结的知识点。

学习一段时间之后,如果能做到对于一个给定的逻辑功能,我们能想象出来它的电路结构,然后能够用Verilog实现,并且能写一些简单的仿真环境和测试用例,那么就说明RTL语言这部分学的很通透了。

对于Verilog掌握比较熟练的朋友,我比较推荐大家转向SystemVerilog。事实上,很多业界的大公司其实都在使用的SystemVerilog作为主要的开发语言。

SystemVerilog可以看成是Verilog的超集,它向下兼容Verilog,但是加入了很多Verilog不支持、但非常有用的特性,比如自定义类型、结构体联合体,还有接口等等。此外还有一些用于仿真验证的特性,比如业界常用的用来做验证的随机约束和UVM,都是基于SystemVerilog实现的。同时,它也简化了很多Verilog里的一些语法表达,比如你不用纠结一个信号究竟是wire还是reg,在SystemVerilog里可以直接用logic表示,诸如此类的还有很多,我就不一一列举了。

我目前不太推荐初学者0基础自学SystemVerilog,主要原因是我没找到很好的中文入门资料。但是如果你学校或者培训班在教SystemVerilog,那样最好,可以一步到位。我一直在看的一本书叫《SystemVerilog硬件设计及建模》,我是10年前买的,它是非常好的一本工具书。但是请注意,它不是SystemVerilog的教材,所以如果你刚入门,看这本书肯定会懵逼。等你学完Verilog,再看这本书,就很容易转到SystemVerilog了。

还有另外一本书,叫《SystemVerilog验证 – 测试平台编写指南》,这个绿皮书也非常有名,它主要介绍的是电路验证的相关内容,比如面向对象、功能覆盖率、随机化、断言等等,想做验证的同学必看,购买链接我放在文末,但是刚开始入门的同学可以先不用看。

学习编程语言的时候,还有一个很重要的内容就是仿真工具。这里比较常用的是Mentor的Modelsim,还有Synopsis的VCS,又是一个二选一,其实哪个都可以。我用的比较多的是Modelsim。业界使用的其实是Modelsim的高级版Questasim,这个和初学者也关系不大。

此外呢,一般FPGA开发工具会自带一个轻量级的仿真工具,网上也有一些开源的验证工具,比如iverilog,还有一些网页工具,比如EDAplayground。这些大家可以根据自己的实际情况,如果没有Modelsim或者VCS的license,可以考虑使用这些开源工具看看。

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入门路线的第四点:动手实验。

FPGA入门学习第四部分:动手实验

学习硬件不摸板子,就像纸上谈兵。所以最好结合开发板和参考书的实验例程,从头到尾走几遍前面说的流程。现在市面上这类书也有很多,其实内容也比较类似,比较经典的实验有流水灯、按键、数码管、红绿灯、一些常见总线的通信、一些数据和信号处理的实验等等。

我当年看的是特权同学的书,相信很多同学也看过。我当时没买他的开发板,我用的是学校的板子。现在这些开发板在某宝上有很多,如果你要买的话,我认为不用买太贵的,基本功能有就可以了。绝大部分板子我都没用过,我就不做具体推荐了。如果你看好了哪个板子但是不确定合不合适,可以在下面留言或者私信我。

FPGA入门学习:知识点小结

这篇文章给大家梳理了一下入门FPGA的学习路线和知识点,主要有四点,就是编程语言、开发工具,基础知识和实际的硬件实验操作。如果你掌握了这些,其实就已经为更高阶段的学习打下一个比较坚实的基础了。

当然这些内容说起来容易,实际还是需要大家花时间下功夫去学习和钻研。事实上不管是学习FPGA,还是学习其他任何东西,从来都是一份耕耘一分收获。除了学习这些专业的内容以外,我们更是在努力变的自律,也在培养和锻炼自己不断学习的能力、面对挑战的勇气,以及在挫折和困难中不断前行的韧劲。我相信付出肯定会有收获,明天的你也肯定会感激自己今天的努力。我祝愿大家能够享受这个学习的过程,我也希望能和大家一起,不断通过努力变成更好的自己。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开始有计划写这本书的时候, Altera 还叫 Altera, 还没有加入 Intel 的大家庭, Xilinx 的 ZYNQ 也才刚刚开始有人探索, Altera 大学计划第一次将亚洲创新大赛由传统的 SOPC 大赛 换成了 SOC 大赛,软核变硬核,性能翻几番。 那个时候,能出一本认认真真讲 FPGA 设计的 书, 会得到非常高的评价。 而我,则由于工作变动, 中间拖沓了半,当半后再来准备动 笔时,才恍然领悟到, Altera 即将成为 Intel 的可编程事业部, 基于嵌入式硬核的 SOC FPGA 芯片开始获得了大量的关注,已经有不少大的小的公司在着手这方面的教学内容与板卡设 计。原本计划编写的内容在新技术新产品面前,好像显得非常的不值一提。 总感觉当大家把 目光都投在了前沿的可编程 SOC 上的时候,我再编写这样一本单纯讲解 FPGA 数字逻辑设计 的书会显得与时代脱节。 于是,编书的动力没有了那么强烈, 这事,又这么放了下来。 在这期间,我也向着 SOC FPGA 做了积极努力的探索, 学习了 Cyclone V SOC 的开发流 程, 从裸机到基于 Linux 嵌入式系统,实现了 FPGA 和 ARM Cortex-A9 CPU 之间的双向控制和 数据传输。 在做完这之后,就感觉遇到了瓶颈, 瓶颈主要来自于两个方面,第一是对 Linux 软件开发不熟悉,而 SOC FPGA 的处理器端应用又恰好需要对 Linux 的底层和应用都需要一 定的了解。 另一方面是对 FPGA 设计经验的欠缺,使用到 SOC FPGA 架构的场合,往往都是 一些较为复杂的系统,在系统中,本身就对 FPGA 的设计内容要求较高, 如视频流的处理, 运算加速逻辑的设计, 通信接口的实现等。 所以, 欠缺了任何一方面的知识, 在使用 SOC FPGA 架构的时候都会困难重重。如果 FPGA 方面没有踏实的功底,那么使用 SOC FPGA 也仅 仅只能是当做通用的嵌入式处理器使用, 无法将其结构的优势发挥出来 。 如果没有 ARM 嵌 入式处理器方面的踏实功底, SOC FPGA 也仅仅只能是个 FPGA。 所以, 编写这样一本单纯讲解 FPGA 数字逻辑的书还是非常有意义的,因为这才是真正合理应用 SOC FPGA 优势架构的 基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值