这个问题让我回忆起了十年前自己刚学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产品。





