快捷导航

如何零基础学习FPGA

2025-3-9 07:54| 发布者: admin| 查看: 102| 评论: 0
摘要: 这个问题让我回忆起了十年前自己刚学FPGA时的难忘经历。那是大三上学期FPGA的第一节课。老师说,FPGA功能非常强大。硬件可编程,用代码定义硬件逻辑。任何单片机能实现的功能,FPGA都能实现。甚至可以在一个FPGA内实 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

只有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的两大主力厂商的主页有非常多官方技术资料。

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

http://www.xilinx.com/

http://www.altera.com.cn/

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

4. ZipCPU

About ZipCPU

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

如果本文对你有帮助,记得点赞、关注!


路过

雷人

握手

鲜花

鸡蛋

关注我们:东远物联

抖音

微信咨询

咨询电话:

199-2833-9866

D-Think | 广州东远智能科技有限公司

地址:广州市白云区北太路1633号广州民营科技园科创中心2栋16楼

电话:+86 020-87227952 Email:iot@D-Think.cn

Copyright  ©2020  东远科技  粤ICP备2024254589号

免责申明:部分图文表述来自于网络,如有侵权请联系作者删除!