源码先锋

源码先锋

如何零基础学习FPGA

admin 19 125

这个问题让我回忆起了十年前自己刚学FPGA时的难忘经历。

那是大三上学期FPGA的第一节课。

老师说,FPGA功能非常强大。硬件可编程,用代码定义硬件逻辑。

任何单片机能实现的功能,FPGA都能实现。

甚至可以在一个FPGA内实现多个8位或32位的单片机。

自己就这样带着一种高大上的感觉入坑了FPGA。

当时自认为c语言功底还可以,还参加过c语言程序设计大赛,觉得FPGA肯定能学好。

后来才发现硬件和软件的思维方式完全不一样。

软件是一条条代码顺序执行,而硬件完全则是并行处理。

VHDL里没有主函数,只有不同功能的电路模块。

不过思维模式切换回硬件后,之前很多的编程训练对学习VHDL和verilog还是很有帮助的。

FPGA确实远比单片机灵活和强大,自从接触了FPGA,自己的单片机开发板就失宠并开始吃灰了。。。

当时没钱买FPGA开发板,平时只能在QuartusII上做个仿真,看看波形。

只有FPGA的实验课上才能过把瘾。

不过老师的实验课安排的非常好。

最令我影响深刻的一个实验是用FPGA控制16*16的点阵显示自己的姓名。

老师事先给了代码,只不过是显示的学校名称,所以需要学生把学校名称改成自己的名字。

自己自认为编程基础很好,当然不愿意就这样简单改一下老师的代码。

要做就做一个更酷的:像广告牌一样滚动显示自己的名字。

那几天的脑子完全被FPGA占据了。

稍微有点课余时间就开始写代码。

然后就是盼着实验课快点到来,以便验证自己的设计。

终于盼到了,实验课上自己带着略微紧张的心情开始用quartus综合自己的代码。。。

刚开始有几个ERROR,很快改好了。

终于RTL综合完了,没有报错。

接着是布局布线和生成下载文件。

等了半天,跳出一个ERROR:

逻辑资源超出限制。。。

因为自己当时用软件的思维方式去写VHDL,没有考虑任何硬件复用,结果编译出来的代码巨耗资源。

而实验室的实验箱比较落后,FPGA的逻辑资源不过几百K。

接下来的几天,自己重新思考整个逻辑,把原来的代码推倒重来。

这次的思路更加清晰,代码也更加简洁。

经过反复debug,终于实现了预期的效果。

现在还记得老师看到自己的demo时充满欣赏的表情。

老师还专门把代码拷贝走,说要给下一届学生看看。

一不小心扯了这么多。不知道对各位学FPGA有没有帮助。

下面步入正题:

首先,很高兴你喜欢FPGA,这是嵌入式领域比较好就业的一个方向,而且待遇不错。

第一部分基础知识学习

1.《数字电路设计》,必备知识

当时自己学的是闫石老师写的这本书。比较经典。

看书的时候没必要纠结细节,知道常用的逻辑电路极其原理,知道什么是组合逻辑,什么是时序逻辑,以及同步和异步电路即可

2.《verilog程序设计》,必备知识

我当时用的是夏宇闻老师的书。如果有数字电路和c语言的基础,学verilog会很快。因为verilog语法和c很像。但切记你写的是电路,不是程序。

学习的时候在电脑上装一个modelsim或vivado,一边学verilog语法一边写代码做电路仿真。这样不至于太乏味,同时还能学会如何看波形和时序。

3.《c语言程序设计》,推荐学但非必须。推荐学的原因如下:

c语言是非常基础,且靠近底层硬件的语言,将来无论做硬件还是软件,c都能用的上。

比如,现在很多高端FPGA都集成了arm核,可以直接用c编程。

而且学好了c,其它高级语言学起来也会快很多。

推荐谭浩强老师的《C语言程序设计》。这本书应该是中文书籍中最适合初学者的。

我是高三暑假看谭浩强老师的书入门的c。自己看了好几遍。大一时,当班里很多人还不知道什么是c语言时,自己已经过了计算机二级。

这也为后来参加各种专业比赛打下了良好的基础。至今仍然很感激谭浩强老师这本书。

第二部分FPGA实践

(与第一部分同步进行)

在学习以上知识的同时,买一块配有丰富学习资料的FPGA开发板。边看书边做开发板的配套实验。

所做的实验务必亲手敲一遍代码,并理解清楚每行代码的含义。然后再适当对代码进行修改,验证所学。

除了做实验之外,把常用的逻辑电路都写一遍(做仿真即可),比如:

1.加法器

2.乘法器

3.计数器(最常用的电路之一)

4.同步复位电路/异步复位电路

5.译码器

6.多路选择器

7.移位寄存器

8.状态机(这里面的学问很多)

9.同步FIFO

10.异步FIFO

等等

第三部分做DIY设计

基本功打好以后,可以再根据自己的兴趣做一些有趣的小项目,比如:

1.SPI

2.UART

3.FIR滤波器

4.FFT快速傅里叶变换

5.AES/SM4等分组密码算法的硬件实现

6.Cordic(这是一个非常有趣的算法,可计算sin/cos/sinh/cosh/ln/exp等很多数学运算)

7.cpu(可以参考开源risc-v项目的源码)

等等。。。

中途不断学习积累,相信你能做的越来越好。

第四部分FPGA学习网站

1、opencores

开源IP最多的网站,我以前经常在上面找源码。现在好像国内注册不了,需要外网IP才能下载注册。

Home::OpenCores

2、黑金动力社区

黑金开发板的官方博客,博客有FPGA的教程。

FPGA黑金开发板-博客园

3、FPGA官网

毫无疑问,FPGA的两大主力厂商的主页有非常多官方技术资料。

很多复杂的或是不常见的问题都可以在上面找到解决方法。

我有时候遇到难以解决的问题会在官网上提问或者发邮件,基本上都有回复。

4.ZipCPU

AboutZipCPU

讨论FPGA和软核CPU设计。该站点专注于Verilog解决方案,专门使用用于FPGA设计的开源IP产品。