摘要:最近项目中要用到FPGA,由于之前没有接触过FPGA的知识,从零开始,经过两天的学习,完成了自己的第一个小项目,二选一多路选择器。不知道有没有小伙伴也在学习FPGA啊!

我的第一个FPGA开发项目——二选一多路器_java

市面上笔者现在知道的有四家做FPGA的:黑金、小梅哥、正点原子、野火。其中黑金和小梅哥做FPGA是比较早的。正点原子和野火是这两个年开始做起来的,属于后起之秀。初学,不敢说哪一家好与不好,所以正点原子和野火和小梅哥的FPGA资料都下载了(百度网盘超级大会员我的第一个FPGA开发项目——二选一多路器_java_02)。看了一下感觉资料都不错。所以我是同时看三家的PDF文件,综合起来学习,这样感觉很不错我的第一个FPGA开发项目——二选一多路器_java_03

这里关于FPGA的简介以及历史我就不多做介绍了,学习FPGA之前当然是要搭建环境了。

所需要的安装的软件

1、QuartusII13.0(相当于Keil)

2、ModeSim(仿真用的)

3、UltraEdit(文本编辑器,在QuartusII内部编写中文会乱码)

1、安装QuartusII

1、双击安装包,以管理员身份运行。

我的第一个FPGA开发项目——二选一多路器_java_04

2、我接受协议。

我的第一个FPGA开发项目——二选一多路器_java_05

3、选择QuartusII的安装路径,切记安装路径不能有中文。

我的第一个FPGA开发项目——二选一多路器_java_06

4、选择要安装的组件。安装组件,默认全选。

注:开发软件的使用离不开器件库,器件库的的安装有两种方式,一种是与开发软件一并安装,但器件库必须与安装软件存放在同一文件夹,软件安装时,组件的选择包括器件库,如图所示;

我的第一个FPGA开发项目——二选一多路器_java_07
选择安装组件(器件库一并安装)

5、显示安装整体信息,准备软件安装。如图 4-11 所示,安装信息包括 Quartus II软件安装路径、软件安装所需磁盘空间大小以及磁盘可用空间大小,磁盘空间足够,直接点击“Next”。

我的第一个FPGA开发项目——二选一多路器_java_08

5、等待安装结束。安装过程所需时间主要由电脑性能和器件库大小决定,安装完成后点击“Next”。

我的第一个FPGA开发项目——二选一多路器_java_09

6、软件安装完成。图中包含三个选项卡,分别表示是否创建桌面快捷方式、是否立即打开软件、是否提供反馈。勾选第一选项,创建桌面快捷方式,点击“Finish”,完成软件安装。

我的第一个FPGA开发项目——二选一多路器_java_10

10、软件安装完成,创建桌面快捷方式。安装完成的Quartus软件可试用 30 天,若各位想要长期使用,请支持正版。

我的第一个FPGA开发项目——二选一多路器_java_112、安装ModelSim

modelsim的安装方法和quartus方法一样,下载好安装包后傻瓜式安装即可。

我的第一个FPGA开发项目——二选一多路器_java_123、初始Verilog HDL

Verilog是硬件描述语言,顾名思义,就是用代码的形式描述件的功能,最终在硬件电路上实现该功能。在 Verilog描述岀硬件功能后需要使用综合器对Ⅴerilog代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将Verilog代码转成网表的工具就是综合器。

硬件描述语言(Hardware Description Lagnuage,HDL)通过描述硬件的实现方法,来产生与之对应的真实的硬件电路,最终实现所设计的预期功能。设计方式与软件不同,因此也就意味着其描述的各个功能之间,可以像硬件一样实现真正的并行执行,这也是硬件描述语言和软件的不同。之所以不直接叫硬件语言却叫硬件描述语言的原因是:这是通过一种语言来“描述”我们设计的硬件所要实现的功能,而不是直接对硬件进行设计。硬件描述语言描述完设计的功能后,还需要通过“综合”这一过程才能最终生成所设计功能的硬件电路

目前常用的硬件描述语言主要有两种,一种是Verilog HDL(以下简称 Verilog),另一种是VHDL,它们之间有什么不同呢?

VHDL与Verilog相比 VHDL与Verilog相比
语法比 Verilog严谨,通过 EDA 工具自动语法检查,易排除许多设计中的疏忽。有很好的行为级描述能力和一定的系统级描述能力,而Verilog建模时,行为与系统级抽象及相关描述能力不及 VHDL。 VHDL 代码较冗长,在相同逻辑功能描述时,Verilog 的代码比 VHDL少许多。VHDL对数据类型匹配要求过于严格,初学时会感到不是很方便,编程耗时也较多;而 Verilog 支持自动类型转换,初学者容易入门。VHDL对版图级、管子级这些较为底层的描述级别几乎不支持,无法直接作集成电路底层建模。
我的第一个FPGA开发项目——二选一多路器_java_13

上图是一段Verilog代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE和VIVADO等FPGA开发工具都是综合器,而在集成电路设计领域常用的综合器是DC。

4、代码编写

项目要求

二选一多路器,两个输入IO:a、b。可以是高电平,也可是低电平。输入按键按下时,LED灯与a端口状态保持一致;输入按键释放时,LED灯与b端口状态保持一致。

我的第一个FPGA开发项目——二选一多路器_java_14

FPGA的开发流程一般是按照上图的标准。

1、设计定义

这个步骤主要是明确项目的功能以及要求,然后打开quartus新建一个工程

2、设计输入

这一步主要是新建文件,编写功能代码。

module led_test(a,b,key_in,led_out);

 input a;  //输入端口A
 input b;  //输入端口B
 input key_in;  //按键输入,实现输入通道的选择
 output led_out; //led 控制端口
 
 //当 key_in == 0 :led_out = a
 assign led_out = (key_in == 0)? a : b;
 
endmodule
 

3、分析综合

这一步主要是对我们的代码进行编译,查看是否有语法错误,如果编译正确没有错误就大致可以认为代码没有错误,就可以进行下一步,否则,继续查找问题编写功能代码。

4、功能仿真

在FPGA设计的过程中,不可避免会出现各种BUG。如果在编写好代码、综合成电路、烧写到FPGA后才发现问题,此时再去定位问题就会非常地困难。而在综合前,设计师可以在电脑里通过仿真软件对代码进行仿真测试,检测出BUG并将其解决,最后再将程序烧写进FGA。一般情况下可以认为没有经过仿真验证的代码,一定是存在BUG的。为了验证以上逻辑设计是否成功,在直接下载到开发板观察现象之前需编写激励文件,此处再新建一个.v文件并输入如下代码,并再次进行分析和综合查看是否存在语法设计错误。

我的第一个FPGA开发项目——二选一多路器_java_15
`timescale 1ns/1ps

module led_test_tb;
 //激励信号定义,对应连接到待测试模块的输入端口
 reg signal_a;
 reg signal_b;
 reg signal_c;
 //待检测信号定义,对应连接到待测试模块的输出端口
 wire led;
 //例化待测试模块
 led_test led_test0(
  .a(signal_a),
  .b(signal_b),
  .key_in(signal_c),
  .led_out(led)
 );
 //产生激励
 initial begin
  signal_a = 0;signal_b = 0;signal_c = 0;
  #100;//延时 100ns
  signal_a = 0;signal_b = 0;signal_c = 1;
  #100;
  signal_a = 0;signal_b = 1;signal_c = 0;
  #100;
  signal_a = 0;signal_b = 1;signal_c = 1;
  #100;
  signal_a = 1;signal_b = 0;signal_c = 0;
  #100;
  signal_a = 1;signal_b = 0;signal_c = 1;
  #100;
  signal_a = 1;signal_b = 1;signal_c = 0;
  #100;
  signal_a = 1;signal_b = 1;signal_c = 1;
  #200;
  $stop;
 end
endmodule
 

5、布线布局

点击Quartus Prime主界面的Start Compilation,进行综合&布局布线,布局布线过程中如遇出错,应根据编译错误信息具体修改。

我的第一个FPGA开发项目——二选一多路器_java_16

6、时序仿真

点击Tools→Run Simulation Tool→Gate Leval Simulation或者在工具栏点击Gate Leval Simulation进行后仿真,也就是门级仿真。弹出选择时序模型对话框,可针对相应情况具体选择。此时可选择第一个时序模型:慢速工作、环境温度为85℃、内核供电1.2V的情况进行仿真。

我的第一个FPGA开发项目——二选一多路器_java_17

时序仿真完成后,可以在Modelsim的波形窗口中看到时序仿真波形。从波形中发现与之前的功能仿真相比有了一些差异,如:存在不希望存在的脉冲、且在200ns时,led相对输入信号有一定时间的逻辑延时。

我的第一个FPGA开发项目——二选一多路器_java_18

7、IO分配

IO分配其方法不唯一,常用的有三种。在标题栏中Assignments—Pin Planner或者直接单击工具栏的Pin Planner进行IO分配。同时也可通过编写Tcl文件的方式来实现引脚分配,此处需针对不同板卡进行不同的设置。

8、配置FPGA下载

最后就是下载代码到开发板了!

最后看看四家FPGA板子的真容吧,你觉得哪块板子最漂亮、性价比最高呢?

我的第一个FPGA开发项目——二选一多路器_java_19

我的第一个FPGA开发项目——二选一多路器_java_20我的第一个FPGA开发项目——二选一多路器_java_21我的第一个FPGA开发项目——二选一多路器_java_22

 

https://mp.weixin.qq.com/s/Zqmlt0UkWkHG9fzRrBOHhw