使用SDK固化FLASH代码固化(含工程源码)
——基于 ZYNQ MINI开发板
一、文档实现功能介绍
本文档实现对设计生成的bit流,固化到FPGA启动配置的FLASH内。固化后,上电即可自动配置bit文 件,掉电不丢失。本文档针对只有FPGA代码的工程,如果涉及到ARM软件代码固化下载,后面的教程会 有专门章节进行补充学习。针对SD卡启动,方法类似。后面教程单独详细说明。工程新建方法请参考 文档《开发软件安装和介绍/VIVADO简介及软件下新建ZYNQ工程教程》。
二、ZYNQ 工程建立
起始页(或file->Project->New) | 创建新工程(CreateNew Project) |
向导起始页面 | 点击 Next- > |
ProjectName(工程名) | 工程名:fpga_03_fpga_flash_dowload工程路径: (自己选择,尽量不要有中文路径) 勾选Create ProjectSubdirectory,点击Next- > |
AddSource(添加设计源文件) | 点击 Next- > |
AddExsixtingIP(添加已有的 IP) | 点击 Next- > |
AddConstraints(添加已有约束文件) | 点击 Next- > |
DefaultPart(默认配置,芯片选型) | Family->Zynq-7000Package- >clg400Speed->7010选-1,7020选-27010版本选择目标器件:xc7z010clg400-17020版本选择目标器件:xc7z020clg400-2 点击 Next- > |
NewProjectSummary(新建工程概况) | 确认工程信息,选型等,点击 Finish 完成 |
三、固化前准备工作-ZYNQ处理器调用
我们知道,zynq芯片内部有ARM处理器。在上电的时候,由ARM运行一段启动代码,协助配置FPGA,并且,如果有软件代码,同时配置完成可运行软件代码。所以,我们需要用到 ZYNQ芯片内的ARM处理器的模块。在ZYNQ芯片上,有一个处理器部分的模块叫做ZYNQ7 Prosessing System的模块。此模块即为ZYNQ的处理器核心。跟DSP,门电路,加法器那些 模块一样,可通过IP直接调用这个硬件。通过这个硬件的调用,我们就可以方便的使用这个处 理器,然后用XILINX的软件开发环境( SDK)新建处理器的软件引导代码即可完成ZYNQ的FPGA配置,引导代码可通过新建工程模板实现,无需自己编写代码。最后将引导代码编译之后的可执行文件和BIT文件一起打包烧写到FLASH即可完成我们需要的功能。
首先,我们在新建完成的fpga_03_fpga_flash_dowload工程,新建一个bd文件。我们在工程管 理栏的IP INTEGRATOR下的Create Block Design 点击创建bd文件。 Bd文件可对FPGA进行图表原理图方式进行开发,更加直观方便。

默认bd文件名不变。点击OK:

新建之后我们可以看到在sources里面看到我们新建的bd文件。

默认新建之后会出现Diagram窗口。如果没有出现,请双击bd文件即可打开。我们在打 开的Diagram点击+号:

点击完+之后,弹出的IP核选项内,我们在Serach输入ZYNQ,即可看到我们需要用到的 ZYNQ片上系统:

然后我们双击它,即可添加到bd文件里面。

然后我们双击ZYNQ 模块,打开IP配置。配置界面可以看到,这个IP很复杂,有很多东西 需要设置。这里我们不详细讲解配置功能。我们只需要将其配置成一个处理器最小系统,并且对芯片的FLASH引脚存储进行设置即可,其他不需要的一律关掉。在后面我们又更详细的讲解这个ZYNQ IP核的配置及其使用。

首先,PS-PL configration的general,下拉找到enable clock resets,展开,将第一个勾选掉,并且AXI Non Secure Enablement下的GP Master AXI Interface的M AXI GP0 interface勾掉:


然后,在peripheral I/O Pins,选中Quad SPI Flash 勾选第一项:

MIO Configuration ,展开Memory interfaces->Quad SPI Flash->Signle SS 4-bit IO,将speed改成fast:

然后,Clock Configuration 勾掉PL Fabric Clocks下的 FCLK_CLK0:

最后我们配置DDR3内存控制器,型号我们选择MT41J256M16 HA-125 ,位宽16位, 一定要检查位宽是16!如果是32无法运行,我们物理DDR3是16位:

最后,我们点击OK退出IP配置。我们可以看到, Diagram内的ZYNQ接口少了很多,只剩下DDR和FIXED_IO。然后,我们点击途中Diagram文件筐最上面的蓝色字体 Run Block Automation:

弹出的对话框默认点击OK:

最后,生成的模块图表内IP变成了将DDR和FIXED_IO引出状态。


我们点击Diagram的右上角中间的最大化,将图标窗口最大化(上面一图右上角上有标 注) ,然后点击图表文档上面的符号工具的小方框带勾的符号,进行图表检查:

最后弹出检查结果对话框 ,说明设计无误,我们点击OK关闭:

然后,我们找到文件管理栏。点击Diagram图标左边最上方的Sources:

然后在bd文件右键Generate Output Products生成输出相关文件。输出文件包括 ZYNQ的IP生成的硬件描述语言。

弹出生成IP输出文件对话框。我们默认,点击generate后等待生成完成:


我们再次回到文件管理器,在bd文件右键,点击Create HDL Wrapper,生成顶层接 口的HDL文件,这个文件是我们的顶层模块HDL文件。

点击之后弹出的对话框默认,点击OK:

由于在ZYNQ处理器调用是直接调用模块,我们还需要在工程中自动生成的HDL顶层文件 中例化我们的FPGA代码。我们将fpga_02_breath_led例程中的breath_led.v添加到工程中。 我们在Sources栏的Design Sources右键Add Sources添加我们的breath_led.v文件。添加的 时候,可以选择拷贝到工程中:

最后点击Finish完成添加。我们看到,文件导航栏的源文件如图所示:

我么将breath_led.v里面的模块例化到design_1 _wrapper。首先,顶层信号接口添加 breath_led的三个信号,clk,rstn,led,然后在添加信号的类型声明。最后,在模块最后添加 breath_led模块的例化:

模块理化完成之后需要先综合!记得先综合 ,记得先综合!!否则不能再管脚绑定找到新 添加的接口信号!!请一定要注意!!重要的事情说三遍!!
综合第一遍之后,接着需要绑定管脚。绑定管脚在工程管理栏RTL ANALYSIS下面的Open elaborated design,进去之后切换视图为I/O planing .绑定管脚约束详细操作请参考 01 _fpga开发之led流水灯教程。管脚也保持一致,电平标准均为LVCMOS3.3。我们只需要约 束例化进来的breath_led.v的信号对外接口,其余信号,关于zynq的接口我们都不用管。

保存管脚约束文件:

综合 ,布局布线 ,生成bit文件,等待完成。完成之后点击 Cancel:

完成之后我们导出硬件描述文件。

弹出的对话框,勾选上包含bit文件。

四、新建FSBL的SDK工程及FPGA的固化
上一节我们导出一个硬件描述。这个导出的硬件描述是描述一个处理器的相关配置的 文件。接着,我们开始使用导出的硬件进行下一步。我们回到软件主界面,最上面的工具栏点 击File->Launch SDK启动VIVADO的SDK开发软件。启动之后SDK会自动导入我们刚才定制的处理器硬件描述工程代码。我们不用管它,等待SDK启动导入完成。

点击了启动SDK之后弹出的对话框默认点击OK:

启动SDK界面弹出:

启动之后我们可以看到一个硬件描述的代码工程。我们不用对这个工程做任何改动。硬件的描 述文件在左边的目录下,system.hdf。

我们在SDK新建一个启动引导工程:SDK最上方工具栏File->New->Application Project:

弹出的界面,我们填入工程名为fsbl,然后默认其他不改动,点击NEXT:

接着,我们选则Zynq FSBL工程模板,最后点击Finish完成。

最后,我们可以看到SDK左边工程目录出现了三个工程,分别是硬件描述工程,fsbl启动引导 代码工程,和fsbl的板级支持包工程。

到此,我们开始准备制作FPGA启动配置文件和固化到FLASH。
我们点击SDK上方的工具栏中的XILINX->Create Boot Image,我们开始制作ZYNQ启 动的BIN文件(其中制作好的BIN文件包含我们的FPGA所需要固化的BIT文件)

然后,弹出的界面,我们如图配置所示,Output BIF file path配置输出生成的bif文件路径。 我们点击Browse,默认保存到工程的debug路径下面:

保存路径结束之后,Output path也默认在这个路径下面。 Output path即为输出的 FPGA启动配置BIN文件路径。

接着,我们添加文件。首先,我们添加fsbl启动引导代码生成的可执行文件,也就是我们 SDK新建的FSBL工程自动生成的arm可执行文件。

点击弹出对话框中的browse进行选择注意Partition type默认是bootloader:

选择fsbl.elf文件,点击打开:

然后回到的局面我们已经把fsbl文件路径添加进来了。点击OK:

然后相同的办法,再添加我们的比特文件。路径在本工程的:
fpga_flash_dowload_project\fpga_flash_dowload_project.runs\impl_1

确认文件类型为datafile。然后点击OK。

一般情况下,制作启动的BIN文件,都是先添加fsbl.elf文件( bootloader) ,然后添加 bit文件( datafile) ,如果有软件arm的代码app应用程序 ,再添加一个app.elf( datafile)。 本工程只有FPGA开发的FLASH固化,没有应用程序,所以只需要这两个文件。可以看到列表 里面有两个文件然后点击Create Image:

到此,启动用于固化的FPGA的BIN文件就制作好了。我们接下来设置拨码开关。开发板 可以设置的有三种BOOT模式,分别对应如下:

开发板背面有BOOT设置表 ,提供了SD和QSPI两种参考。实际上还有NAND存储器的设 置,但是我们板子没有NAND,就不写出来了 ,JTAG模式也不常用,更详细的拨码设置可参 考原理图的PS部分。
我们开始固化。设置拨码开关都为00,也就是JTAG模式。注意 ,断电状态下进行设置! 设置完BOOT拨码开关制后再连接电脑通电。开发板插上DEBUG接口USB线到电脑 ,等待大 概十几秒 ,因为下载线连接电脑需要一段时间识别。 回到SDK,我们点击工具栏,点击XILINX- >Program Flash烧写。

Image 文件即刚才我们生成的BIN文件,FSBL即刚才选的FSBL.elf。然后等待FLASH操作完成。


注意 ,烧写完成之后,一定要断电重新设置BOOT拨码开关,也就是如下模式:

然后我们开发板重新通电。如果带电操作,也可以按下复位按钮。有时候JTAG连接了电 脑VIVADO软件或者SDK软件,可能导致启动失败。 大家拔下DEBUG口的数据线 ,换到其他 两个USB口供电,就可以正常复位启动了。
另外,sdk烧写很慢 ,而且不好用。大家可以参考《ZYNQ几个调试技巧扩展教程》 ,学 习使用VIVADO进行烧写。
五、可能存在的问题及解决方案
1、烧写无法成功。解决方法:检查拨码开关,全部置00,也就是ON状态;然后 再断电重新打开开关连接电脑。还是烧写不了 ,检查ZYNQ的PS的配置,关键部分是 QSPI引脚配置,以及DDR3的型号和位宽 ,必须和教程保持一致。
2、烧写后无法运行:请检查烧写完是否设置成QSPI之后断电重启。
3、烧写进度条停止不动。这种情况下如果没有输出烧写错误信息,即正常。由于FLASH擦除可能需要几分钟。 与下载器速度无关。请耐心等待。
4、烧写也可以使用TF启动。设置ZYNQ处理器的SD0接口,制作BIN文件,最后 直接拷贝到格式化为FAT32的内存卡,设置BOOT拨码为11(TF卡启动模式)。推荐 16G优质卡。不要使用劣质或者山寨卡 ,否则会出现无法启动现象。
"愿我的文字能带给您一丝美好"
分享海报

使用SDK固化FLASH代码固化(含工程源码)
——基于 ZYNQMINI开发板一、文档实现功能介绍本文档实现对设计生成的bit流…
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
FPGA在线学习平台
评论
A 为本文作者,G 为游客总数:0