FPGA入门指引

时间:2024-04-01 09:39:37

很久没更新了,今天不谈FPGA器件特性,出一篇对广大初学者们友好点的入门指引。

首先强调一点,

初学FPGA不需要买开发板!但必须要会仿真调试!

初学FPGA不需要买开发板!但必须要会仿真调试!

初学FPGA不需要买开发板!但必须要会仿真调试!

重要的事情说三遍

首先国际惯例,先上一张FPGA入门的思维导图

FPGA入门指引
FPGA入门思维导图

 

一、Verilog

1.理解input、output、 wire、 reg、inout、parameter 这些声明在代码中的作用。

  • input ,output,inout看名字就知道它的意思 (inout仿真的时候要用个信号决定他是输入还是输出)。

  • wire , reg就是决定verilog 是硬件描述语言最最重要的两个点,务必上网去搜他们的含义。

  • parameter 、localparameter 最终的目的就是让自己的代码参数化,并且更具有通用性。从模块复用的角度来看,本人还是强推用parameter而不是define。

2.理解组合逻辑,时序逻辑

  • 组合逻辑就是 与 或 非 等操作,与时钟无关。如:~ ! ^ & + - * / ;

  • 时序逻辑就是将数据打一拍,与时钟相关。

  • 初学者要深入去理解时钟和复位!!!!

 
 

assign a = b & c ; //组合逻辑

/

[email protected](posedge clk) a_dly <= a ; //时序逻辑

[email protected](posedge clk) a <= b & c ; //时序逻辑与组合逻辑混合 。 // b & c 是组合逻辑操作 , //将其得到得结果打一拍传给a ,这就是时序逻辑操作。

3.理解generator , task , function。让自己的代码更简洁 并且 更具有可移植性。

4.学习书上的模块代码,多看多写。只看不写很多时候都是,噢~脑子会告诉你你学会了,但双手一碰键盘,啥都写不出来。 推荐大家在写的过程中尽可能联想到1 、2 、3点的内容。

二、仿真

仿真分为多个阶段,不同阶段所关注的事务也不同 。这里我主要讲的是行为级仿真,以及综合后的仿真。

1.看波形,主要看关键输出波形与自己的预期是否相符,在行为级仿真阶段不符的化就要回去修改下代码,修改到它与自己预期相符为止。

2.看日志,调网表。看日志主要是针对行为级仿真ok,但综合后的仿真不ok的情况。这种情况主要是资源被EDA软件在综合过程中优化掉所造成的,通常日志和网表中就会指出哪些资源被优化掉。对于被优化掉的资源,我们可以通过keep 或者 修改综合策略来将其保留。

3.写测试用例,在关键信号较多的情况下,单单看波形会让你“眼花缭乱”。这时候我们就需要写代码,让仿真软件自己去比对输出信号与自己的预期是否相符,而不是人为的一个个去看。当然,大公司里一般都是对测试用例有严格要求~,个人玩家嘛,满足自己需求就好。

三、协议(多看手册!多看手册!多看手册!)

现在的模块,为了让设计更加通用,让更多的开发者快速上手调用。几乎都是按照各种各样的标准协议来做,所以协议的学习是FPGA学习不可或缺的一部分。在协议学习过程中,我们要学会看时序图,掌握各种协议间套路(找出不同的协议间都有哪些共性)。

1.对于UART I2C SPI这些非常常用却又很基础的协议。初学者必须要做到不看参考代码,只看时序图和信号介绍手敲一遍驱动代码,仿真代码,这样才能让你快速吸收这些协议中的内容。

2.对于PLL RAM FIFO 这些基本的IP,我们需要熟练掌握其使用技巧。

3.学会使用APB、AXI。很多FPGA厂家的IP应用层都是将它封装成AXI这种形式,如果单纯的应用开发的话,学会这AXI几乎可以做到一招鲜,吃遍天。

4.根据自己的需求

  • 如果只是为了用某个协议,你只需掌握所要使用协议的基本知识,并学会调用该协议IP的方法。

  • 如果要开发某个协议的模块,那你就得死磕协议specification的内容,设计好框架再去手撕代码了。

  • 如果连需求都不知道的,打开各大招聘网站,搜索FPGA工程师,看看大厂JD里面与所需掌握协议相关的内容,有针对性的学习就对了。

5.多看厂家example design,模仿厂家代码的风格,让自己的设计更加的通用。

四、后端

1.深入掌握EDA软件使用方法,懂的如何去选择符合自己设计需求的综合、实现策略。

2.学会看综合 、实现后的 Schematic,Chip View,Utilization的结果,并根据结果去优化自己的设计。

3.学会看时序报告,分析时序路径,写时序约束。这一点非常重要,内容也非常多,推荐去看 知乎@猫叔 FPGA Times相关的文章,写的很不错。


写这篇文章主要是针对偏向于应用的入门者!

如果想在FPGA这条路上一条道走到黑的话,欢迎关注我的FPGA从入门到精通专栏!

最近加班有点多,更的特别慢,各位客官大老爷抱歉啦~