目录
9、上板验证(目前还没有购买开发板故此部分直接复制野火文档)
前言
学习说明:是根据野火FPGA视频教程的学习笔记
一、开发设计流程
1、设计规划:分析项目需求,搭框架,确定子功能模块的结构关系、信号之间相互关系,确定模块的端口信号(即模块的输入输出),模块的功能。将一个大工程分解成几个子功能模块。
2、波形图绘制:使用绘图软件绘制信号的波形图。
3、代码编写:参照波形图编写代码,生成RTL传输级的代码。
4、代码编译:检查代码是否有语法错误。
5、逻辑仿真:modsim仿真,模拟输入信号的输入规则验证,RTL代码的功能是否符合要求。
6、波形图对比:仿真的波形图与绘制的波形图进行对比。
7、绑定管脚:界面绑定、代码绑定。
8、分析综合布局布线:生成上板的bit流文件。
9、上板验证
二、使用FPGA点亮LED灯
规范项目文件夹:文件夹命名方式字母、数字和下划线
例:G:\FPGA_Artix7\01_led\ 再次文件下建立
doc文件夹:存放数据手册、文档资料、绘制的波形图、编写的开发手册等we
led文件夹:工程文件夹
1、设计规划
由于并不是开发,而是学习,故不考虑硬件选型和电源功耗等问题。
项目功能描述:
通过一个按键控制一个led灯的亮灭,按键按下时亮起。
硬件资源:
查看硬件原理图,了解硬件资源配置
这里学习是用的野火的凌云开发板:相关资料可以去野火官网下载
找到开发版数据手册的第十二页可以看,按键与LED灯的原理图。
从以下按键原理图可知,当按键未按下时,KEY1为高电平;按下时,为低电平。
从以下LED灯原理图可知, 当LED为高电平时亮,低电平时熄灭。
模块和端口信号划分:
由于该功能较简单,仅一个功能模块即可实现,因此不需要进行功能模块划分。
功能模块取名为led,输入信号为key_in,输出信号为led_out。由此可以看出这是一个黑箱,只关心输入和输出,其中间信号的变换并不需要关系,中间黑箱只关系实现的功能就可以。
2、波形图绘制
在已创建的doc文件夹下( G:\FPGA_Artix7\01_led\doc),创建led的Visio波形图。
在使用Visio画波形图的时候需要把FPGA设计相关的图形添加进来
根据端口信号的真值表,绘制波形图。绿色信号为输入,红色信号为输出,黄色信号为中间信号
3、代码编写
创建工程
打开Vivado,在主界面点击Create Project.
打开后显示创建工程导向,点击"Next"
对工程项目命名,及设置存放位置。这里工程名为led,位置为刚刚建立的文件夹的位置。
G:\FPGA_Artix7\01_led\led
是否创建子目录,勾选后可以看出在选中的目录下,又创建了项目名的子目录。
是否勾选视情况而定,这里因为已经有led子目录了故,取消勾选
点击"Next",出现工程类型界面,选择寄存器级的工程
点击"Next",出现是否添加 .v 文件界面,如果需要可以点击添加,因为目前还没有 .v 文件,故不勾选。
点击"Next",出现是否添加连接文件,选择添加已经写好的约束文件、引脚配置,这里不进行添加。
点击"Next",出现添加FPGA芯片型号的界面,由于使用的野火的学习资源与资料,开发板是凌云核心板FPGA型号:XCa35TFGG484,故在Family框中选择Artix-7,Package框中选择fgg484,Speed框中选择-2,进行芯片的筛选,并找到xc7a35tfgg484-2。
点击"Next",出现添加FPGA芯片型号的界面
点击"Finish",完成工程创建。
创建代码文件
点击添加与创建代码文件
添加已经存在的文件:(常用于非Vivado代码编辑器,将编辑好的代码复制添加都工程下)
点击添加文件,并找到已经写好的代码文件,
选择添加,点击OK ,一般选择勾选
创建新的代码文件:(常用于在Vivado软件内部编写代码)
点击创建代码文件
点击OK,出现提示是否添加输入输出端口。
这里不需要添加所以直接点击OK
编写代码
代码编辑器设置
1、在Vivdo自带编辑器内编写
2、在notepad++编辑器内编写
修改打开编辑器设置
添加notepad++编辑器路径,路径设置格式为:
D:/Program Files (x86)/Notepad++/notepad++.exe [file name] -n[line number]
填入即可,点击OK并应用。
现在在Vivado内点击代码文件,直接可以跳转到notpad++代码编辑器中。
4、代码编译
Vivado只要填加上.v文件,那么软件就会自动编译,查找语法错误
这里将代码删除个",",点击保存后可以看出,会有提示错误。
5、逻辑仿真
testbench的原理
testbench是测试脚本,测试我们用硬件描述语言(HDL)设计的电路,测试设计电路的整体功能、部分性能能否达到预期目标。
testbench又可以成为事前仿真,主要是针对逻辑进行仿真。
当然还有其他仿真方式,时序仿真(过后仿真),由于时序仿真速度非常慢,而且并非100%正确,故采用速度较快的事前仿真,只需要编写一次代码,就可以进行快速仿真。
时序仿真多用于IC相关行业,如数字IC设计与验证。
Testbench过程及步骤
编写Testbench进行测试过程:
1、产生模拟激励(输入波形);
2、将产生的激励加入到被测试模块并观察其输出相应;
3、将输出相应与期望进行对比,从而判断设计的正确性。
步骤:
1、设计功能框图
这里测试功能常用“tb_工程名”来表示
2、将功能模块插入到测试文件中
3、在测试文件和功能模块之间加入信号传递连接
注:并非说在测试文件验证逻辑功能后上板就一定能够正常工作,虽然逻辑没有问题,但是在高速系统中往往需要进行时序约束,否则会由于系统工作太快导致时序违例,导致不能正常工作。
Testbench仿真文件的建立
创建与添加仿真文件与创建代码文件类似
如果已经有仿真文件可以直接根据路径进行添加,否则需要建立仿真文件
这里以创建为例进行操作
默认OK即可
已经建好的仿真文件
Testbench仿真代码的编写
编写后由于例化所以会自动包含功能文件
逻辑仿真
运行结果:
6、波形图对比
对比绘制波形图可以两者关系为取反,与仿真结果类似。
7、绑定管脚
方式一:界面设置创建(约束文件)
双击运行
弹出对话框后点击OK,最后出现以下界面 ,并单击管脚设置
对管脚进行设置
设置好后快捷键“CTRL + S”保存该约束文件。
生成一个物理与时序的约束文件
点击查看xdc约束文件
方式二:直接创建并编写约束文件
生成文件后直接在xdc文件中编写约束代码。
8、分析综合布局布线
生成上板的bit流文件,双击
生成后,点击取消即可
9、上板验证(目前还没有购买开发板故此部分直接复制野火文档)
下载到开发板
如图 8-80 所示,方框中是我们 bit 文件所在的位置,确认无误后点击“program”进行下载。
程序的固化
需要设置的参数:
生成成功
生成文件的位置

已经生成.bin文件
接下来如图 8-89 所示,在“Configuration file”一栏中点击搜索添加我们前面生成的MCS 文件或 BIN 文件,其余选项按默认设置即可,点击“OK”
本文档仅仅是学习FPGA的笔记