二、3【FPGA】如何点亮LED灯

目录

前言

一、开发设计流程

二、使用FPGA点亮LED灯

1、设计规划

项目功能描述:

硬件资源:

 模块和端口信号划分:

2、波形图绘制

 3、代码编写

创建工程

创建代码文件

编写代码

 4、代码编译

​ 5、逻辑仿真

 testbench的原理

Testbench过程及步骤

Testbench仿真文件的建立

 Testbench仿真代码的编写

 逻辑仿真

运行结果:

6、波形图对比

7、绑定管脚

方式一:界面设置创建(约束文件)

 方式二:直接创建并编写约束文件

8、分析综合布局布线

9、上板验证(目前还没有购买开发板故此部分直接复制野火文档)

 下载到开发板

程序的固化


前言

学习说明:是根据野火FPGA视频教程的学习笔记

【野火】FPGA系列Xilinx Artix7教学视频,真正的手把手教学,“波形图”教学法,现场画波形图写代码,硬件基于野火FPGA-升腾系列开发板,更新中_哔哩哔哩_bilibili【野火】FPGA系列Xilinx Artix7教学视频,真正的手把手教学,“波形图”教学法,现场画波形图写代码,硬件基于野火FPGA-升腾系列开发板1、配套硬件:https://detail.tmall.com/item.htm?id=6451534419752、硬件介绍:核心板3款,XC7A-35T/100T/200T,底板2款Pro和Mini,3款核心板可分别接到2款底板上3、配套资料:https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3

一、开发设计流程

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、上板验证(目前还没有购买开发板故此部分直接复制野火文档)

 下载到开发板

bit 文件生成之后我们就可以进行下板验证了,如图 8-76 所示,开发板连接 12V 直 流电源,Xilinx 下载器 JTAG 端连接开发板 JTAG 接口,另一端连接电脑 USB 接口。线路正确连接后,按下电源开关为板卡上电。
如图 8-77 所示,点击“ Open Hardware Manager ”进入下载配置界面。

如图 8-78 ,点击箭头所指图标,与开发板取得连接。

如图 8-79 所示吗,连接成功后,点击“ Program device ”添加 bit 文件。

 如图 8-80 所示,方框中是我们 bit 文件所在的位置,确认无误后点击“program”进行下载。

注意:尽量不要带电插拔 JTAG 口,否则容易烧坏 FPGA JTAG 口。如果用万用表测到 JTAG TDI TDO TMS TCK 任意一个与地短路了,那你的 FPGA 可能已经被烧坏了。并不是每次热插拔 JTAG 口都一定会烧坏,但是至少会有一定烧坏的可能性,为了能让开发板陪伴我们学习完本教程,所以最好谨慎行事!

程序的固化

        为什么网表下载后还要再进行固化呢?当你把下载网表的开发板断电后再重新上电发现之前的功能已经不存在了,也就是说下载后的网表消失了。为什么会这样子呢,很多人不禁问道,其实 我们使用的这款 FPGA 芯片是基于 SRAM 的结构 ,即下载后的网表存储在FPGA 内部的 SRAM 中,我们也知道 SRAM 有掉电易失的特性,这也就是我们为什么掉电后功能就消失的原因。所以我们要想使网表重新上电后仍然存在就需要将网表存储到片外的 flash 中, flash 芯片型号为 N25Q256 ,存储容量为 256Mbit 32M 字节),采用 SPI 协议和 FPGA 进行通信,可做为 FPGA 的配置芯片,以保证 FPGA 在重新上电后仍能继续工作。具体操作如下:
在固化前我们需要在 xdc 约束文件中加几条约束语句,如图 8-81 所示,添加这几条语句的目的是使用 spi 4 线读写模式,这样可以大大提高重上电程序的配置速度。添加之后重新生成一下 bit 流文件。

1、生成MCS文件

 

需要设置的参数:

 生成成功

生成文件的位置

2. BIN 文件的生成
设置BIN文件的生成
重新生成bit流文件

已经生成.bin文件 

3. 下载固化文件( 目前还没有购买开发板故此部分直接复制野火文档
        下载固化之前我们与下载 bit 文件一样,先连接后下载器,电源线,然后为开发板上 电。进入下载界面后如图 8-86 所示,点击“ Add Configuration Memory Device…

 接下来如图 8-89 所示,在“Configuration file”一栏中点击搜索添加我们前面生成的MCS 文件或 BIN 文件,其余选项按默认设置即可,点击“OK

    等待一小段时间后固化完成,如图 8-90 所示,点击“ OK ”完成固化,固化成功后, 开发板断电后再上电,开发板仍然会运行我们烧录的程序。

文档说明:

       本文档仅仅是学习FPGA的笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

追逐者-桥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值