如何快速入坑FPGA

根据我自身学习FPGA以及成长路上的其他同学的经验,写一篇简短的博客,旨在帮助刚接触亦或是想要学习FPGA的同学绕过我们曾经遇到过的弯路。

一、认识HDL

在学习FPGA之前,一定要学过数电,学的好不好不做讨论,但对基本的门电路、触发器、时序电路等基本的概念一定要有,这是先决条件。

确保有基本的数电概念之后,再选择学习HDL((Hardware Description Language,硬件描述语言)。HDL主流分两大类,一类是VHDL,另一类是Verilog HDL;现在国内Verilog用的还是比较多的,并且Verilog的语法太像C语言了,如果你有C语言的功底学起来非常的快,所以我还是推荐新同学首选Verilog,当然Verilog和VHDL都只是描述语言,学习FPGA最重要的是掌握设计思想,无论哪种语言,多用多写很快就能掌握。

在这里多讲一句,HDL一定注意是Description而不是Design,HDL是描述语言而不是设计或者是编程语言。所以在写代码的时候一定要牢记,我写的是描述语言,是描述整个电路的功能,去控制各种信号,带着数电思维去学习。

二、掌握HDL

一、如何看视频

说了这么久的HDL,那么作为初学者我们怎么学习乃至快速掌握这门语言呢?

不要想着抱起一本语法书就开始看,看完就觉得自己学会了,我保证你大概率翻不到第二章。教材枯燥且乏味,看两眼以后,你学不学的会不一定,拿我来说,我是真的会被劝退。

怎么学呢,来,打开B站,搜索“FPGA教程”,弹出来的教学视频多如牛毛,各位老师也都讲解的生动形象,这不比自己啃教材更容易坚持下去。这个时候,就要自己做取舍了,“小梅哥,特权同学,正点原子,野火”这四个用来入门完全够用,每个视频都有着各自的风格,我建议大家可以广泛的听一下每个视频的前一两节课,根据自己对每个视频的接受程度以及喜欢程度,选好其中一个博主的视频认真钻研,把一个视频好好跟,切忌东一榔头西一棒槌,每个视频都有自己的风格,都有自己的讲解思路和体系,只要把其中一个跟好就已经完全够用了,不要贪多。

选定好视频之后,这时候就要多练习,跟着每个视频把讲解的例子跟着抄一遍,编译运行;成功了之后,再模仿着写一遍,编译运行;成功了之后,看看能不能不借助视频,通过自己的理解把代码完整的写出来运行通过。

二、如何看教材

刚刚咱们提到,不要一开始学的时候就立马抱着一本教材书直接看,这是不是说教材对我们这个阶段完全没有任何帮助呢?也不是,只是目前刚上手的这个阶段看教材对我们来说不合适。一个是代码语法类的课本身就是强调写工程、是理论与实践的结合,书上写的东西太宽太全,然而在实际写代码的过程中能用到的只是其中一部分;另一个就是没有重点的去看,也没有人告诉你哪些现在会用到、哪些以后可能会用到、甚至哪些你压根就用不到,没有师父带着你看,看似付出了极大的努力,但收获却是微乎其微。

重点:看视频课的时候的时候,讲到哪几条语法规则了,再看教材上对应的讲解;以视频为主,教材为辅。

这里推荐阅读夏宇闻老先生的《Verilog数字系统设计教程》。

三、如何选择IDE和开发板

IDE(Integrated Development Environment,集成开发环境),根据你所选择的视频课,视频里用哪个IDE就用哪个IDE,在前期,一定要尽可能减少出错概率。学习FPGA最重要的是掌握思想,而不是具体哪个IDE的使用。待学到一定程度之时,即使让你中途换一个IDE也能很快上手开发;但作为初学者,看的课程用的是一个软件,自己则是另一个软件,很多步骤初学者根本对应不上,这不是给自己找麻烦嘛。

至于FPGA开发板,在熟练掌握HDL之前,没必要买FPGA开发板,刚开始接触的时候,跑跑仿真就够了,用不着每次都需要编译下载,再者FPGA相对于其他开发板很贵,动辄上千。等到需要开发板的阶段,这个时候看你用的是XILINX(现为AMD)家还是ATREA(现为Inter)家的IDE,他们两家开发板不互通,所以型号得对应上,然后挑最便宜的买(还是因为贵),如果你在实验室,有学校支持是最好不过的。

三、掌握基本数字电路的概念

这个时候,还是一掌握概念,熟悉语法为主。

掌握基本的组合逻辑以及时序逻辑的概念,独立完成译码器、编码器、计数器以及简单的分频电路等设计,初步了解时序图,并逐渐掌握时序图。

时序图的概念很重要,后期代码编写、调试等离不开时序图。

四、掌握小规模数字电路的设计

到这个时候,首先要掌握状态机的设计思想,该思想在后面很多设计中都需要用到;学习状态机我推荐特权同学的《深入浅出玩转FPGA》,里面讲解状态机的部分很实用,包括一段式二段式三段式,米利米勒构型。

然后结合着《Verilog数字系统设计教程》独立设计一些小型数字电路,如售水机、篮球计分器、抢答器等,把这些学完基本上已经算初步入门了。学习这些最常见的小型数字电路一方面是为了巩固和提高Verilog代码水平、另一方面是了解并掌握模块化设计的思想。

五、常见的通信协议

做工程开发,我们肯定接触不止一块FPGA开发板。例如,FPGA与FPGA之间、FPGA与上位机之间、FPGA与CPU之间、甚至是同一块FPGA开发板片上各资源间都涉及两两间的相互交流,想要交流就涉及通信。而通信,就离不开各种协议。

FPGA常见的协议有UART、I2C、SPI、AXI、CAN等。作为新手,把UART用熟练,这里的熟练,不仅包括能传输数据,还要求大家能够把原理给讲清楚。至于I2C、SPI等,在此阶段难度稍大,在进阶时再考虑。

六、IP核以及FPGA设计思想

在提IP核以及FPGA设计思想之前,我们先把目光转向积木,对FPGA进行设计就像是搭积木一样。FPGA就像是一个装满小积木块的大盒子,我们写的一个个小模块就像是用小积木先搭建一个个小的模块、我们把各个模块的输入输出按照一定规则连接起来形成一个整体就像是把小模块按照一定的规则拼成一个大的城堡,FPGA的本质可以这么简单理解。所以对于FPGA设计,我们最关心的就是两个:①输入输出②功能。

输入输出就是看谁和谁连接,而功能就是看这个模块放在哪个位置合适。

有了这个概念之后,IP核就非常好理解了,IP核就是一个现成的小模块或者说是黑盒子,内部怎么组成的我们丝毫不关心,我们只关心输入输出以及它的功能,这就足够了。现在各家IDE内部的IP核都非常成熟并附带手册,在调用的时候搞清楚它的用法就可以了。

FPGA设计思想最常用的就是Top-Down(自上而下的设计思想)先把一个大任务拆成小任务,小任务下又细分小模块,小模块又细分子模块,层级分明。在分割完任务后,我们就要反向从最小的模块去设计,每设计完一个小模块时,对其单独进行编译仿真,仿真通过之后再进行上一级的设计,否则等整个大工程写完再进行仿真验证,出的问题又多又杂,丝毫没办法下手。不能谋全局者不能谋一隅,所以我们在设计之初,就要对全局有一个把握,一级一级思虑周全,才能保证整个系统的稳定。

七、掌握设计方法和设计原则

到这个层次之后,这时你就不得不注意那些警告了,整个系统的资源占用率,面积优先还是速度优先,时钟怎么优化,怎么提高系统的工作频率,同步还是异步,时序约束怎么办这些问题都将困扰着你。当然这部分是FPGA设计的难点,需要足够的实践才会有一些体会,想要把这一块玩儿好,则需要大量的实践和应用,这一块不了解的可以跳过。

八、增强理论学习

数学和英语一定是排在第一位的,这一点毋庸置疑,不管你学习哪个方向都必须重视起来。理论学习必然涉及大量公式的推导,有些公式不亲身推导就不会对其有深刻的领悟;英语的重要程度无需说,大家都是通信电子自动化领域的,权威的手册以及行业顶尖IDE是什么语言大家一看便知。

以下大概地分几个方向供大家参考,后面跟的是要掌握的理论课。原文来自于(如何学习FPGA_fpga学习-CSDN博客

1、信号处理——信号与系统、数字信号处理、通信原理、多采样率信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理、阵列信号处理

2、接口应用——如:UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort、HDMI

3、无线通信——信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码

4、CPU设计——计算机组成原理、单片机、计算机体系结构、编译原理、RISC-V

5、仪器仪表——模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用

6、控制系统——自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用

7、压缩、编码、加密——数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理、H.265

FPGA的方向实在是太多了,大家找准自己最感兴趣的一项深耕,当然大家也可以涉猎其他方向以及领域,不过一定要保证自己有一项技术特别高,炉火纯青的那种。

九、学会使用MATLAB仿真

学习FPGA时,往往有些步骤我们无法判断是否正确,这个时候就要用上MATLAB联合仿真。可以FPGA走一步,MATLAB走一步,联合验证;也可以将仿真数据导入文件,放在MATLAB中计算。我自己在做FFT时有些步骤没办法确定,就是将数据通过文本导入MATLAB一步一步验证的,并且MATLAB很容易上手,需要用的时候现成学,多实践很容易掌握。

十、学无止境、勇于探索

知识永远学不完,FPGA之外依然有很多软件方面的知识,如C++,Python,Linux等等,都可以去学习一下,比如现在AMD(XILINX)家的ZYNQ,就是一块FPGA+ARM的架构,还有PYNQ,就是ZYNQ+Python,多学一些,提升自己的核心竞争力总是好的。

 

 

  • 48
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彼稷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值