Zynq系列FPGA如何固化bit文件到QSPI_Flash
最近由于项目需要,要将bit文件固化到zedboard的flash中,使程序上电自启,断电不丢失。
我们知道,一般板级调试的时候都是直接下载bit流到FPGA就行,固化到Flash的话,也是先生成.mcs文件,然后下载到Flash即可。
但是在经过反复尝试之后,发现对zynq系列好像行不通。
why?这得从zynq的启动流程说起。
一、ZYNQ的启动流程
ZYNQ7000 SOC 芯片可以从 FLASH 启动,也可以从 SD 卡里启动, 本节介绍程序 FLASH 启动的方法。Zynq7000 SOC 芯片上电后,最先运行的是ARM端系统(PS)。然后再通过ARM系统软件部分加载FPGA的比特流文件.bit至FPGA(PL),配置FPGA PL端的逻辑功能。ZYNQ 系统的启劢流程如下:
ZYNQ启动分为两个阶段
- 第一阶段是 BOOT ROM(ZYNQ厂家固化代码)
- 第二阶段是 FSBL (First Stage Bootloader)SDK工具来制作。
经过以上两个阶段,PL端配置程序及应用程序才开始运行。
1.1 第一阶段 (BOOT ROM)
- 上电后,Zynq7000 SOC 会首先执行片内 Boot ROM 代码,Boot ROM 代码读取 Boot mode 寄存器来判断是哪一种启动方式(SD card/QSPI Flash/JTAG)。
- 确定好哪种启劢方式后,Boot ROM 从相应的启动设备(SD Card/QSPI Flash)加载 First Stage Bootloader (FSBL) 到On Chip Memory(OCM) RAM,并且将执行权交付给 FSBL。
1.2 第二阶段 FSBL (First Stage Bootloader)
使用SDK 工具一步步生成 FSBL 代码和可执行文件,结合代码可知 FSBL 主要做了如下工作:
- 初始化 CPU,初始化串口;
- Processor System (PS) 一些控制器的初始化,如 MIO, PLL, CLK and DDR;
- 禁止 L1 Data Cache;
- 注册 ARM 中断向量;
- 通过 Boot mode 寄存器,判断是哪种启动方式。
1.2.1 QSPI Flash 启动方式:
- 初始化 QSPI Flash 控刢器;
- 从 Flash 拷贝 system.bit 到 FPGA (如果 Flash 中存有 system.bit);
- 从 QSPI Flash 拷贝应用程序的代码到DDR3;
- 调转到应用程序执行;
1.2.2 SD Card 启动方式:
- 初始化 SD 控刢器;
- 从 SD Card 拷贝 system.bit 到 FPGA (如果 BOOT.BIN 中存有 system.bit);
- 从 SD card 拷贝应用程序的代码到 DDR3;
- 跳转到应用程序执行;
1.2.3 JTAG 启动方式,直接退出。
因此,对于Zynq系列的FPGA芯片来说,固化到Flash中的bit文件需要一个引导程序(也就是FSBL),才能被用来配置PL。实际上,FSBL会作为BootLoader和bit文件一起合成一个.bin或者.mcs文件,然后下载到Flash中,过程如下:

二、生成BOOT.bin或者BOOT.mcs
2.1 VIVADO操作
你应该已经有了一个完整的工程,接下来你需要添加并配置PS端,生成新的bit文件:
(1)建立一个新的块设计(Create Block Design)

(2)添加ZYNQ7 Processing System

(3)双击所添加的zynq7,配置peripheral I/O,我们只保留Quad SPI Flash

(4)在 Diagram 界面里点击"Run Block Automation"完成对 ZYNQ7 Processing System IP核的配置,生成外部 ZYNQ 系统的外部链接 IO 管脚。

(5)在 Source 窗口中选中 design_1.bd,右键并先后选择Generate Output Projects 和 Create HDL Wrapper 选项,生成顶层文件design_1_wrapper。
(6)在顶层文件中例化我们原来的工程;(特别注意:要将原来工程的外部引脚也例化为现在顶层工程的I/O,并配置好约束)。
(7)重新生成bit流。
(8)Export to Hardware(包含bitstram 文件),Launch SDK,暂时告别VIVADO,进入SDK进行操作。
2.1 SDK操作
(1)进入SDK 开发环境后,点击菜单 File -> New -> Application Project。

(2)点击next,选择Zynq FSBL

(3)接下去我们要把 FSBL 可执行文件,FPGA PL的bit比特流文件和PS应用程序结合成一个 Bin 文件或Mcs文件。
选择菜单 Xilinx Tools->Create Boot Image:

选择output.bif的存放地址,选择生成bin文件还是mcs文件,然后依次添加zynq_fsbl.elf(BootLoader)、bit文件、应用程序elf文件(这个如果没有可以省略),最终生成用于固化的bin或者mcs文件。

(4)将生成的bin或者mcs文件下载到Flash(经过验证,这两种类型的文件都可以)
开发板上电,选择菜单 Xilinx Tools->Program Flash:

加载文件:

(5)点击Program,出现如下信息,则成功。然后断电,切换板子的启动方式,然后重新上电就会发现板子自动配置完成的灯亮了,搞定!

注意:若出现以下信息,排除掉Jtag线缆的问题之后,可能的原因是之前同时连接过多个开发板,导致识别出来的芯片型号有不止一个,然后它就检测到JTAG断开(我就是这个问题)。

解决方法很简单:关掉SDK,重新打开,重新Program Flash即可。
参考连接:1.https://blog.csdn.net/taowei1314520/article/details/78595482
2.https://blog.csdn.net/fengyuwuzu0519/article/details/80411894
Zynq系列FPGA如何固化bit文件到QSPI_Flash的更多相关文章
- Zynq系列程序逻辑固化方法
1.创建一个BOOT镜像 该小节主要讲述zynq平台利用软件套件SDK创建一个可固化BOOT镜像. 1.1 选择Ad9361_Eque1工程,选择Xilinx Tools → Create Boot ...
- Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...
- Lattice系列FPGA入门相关0(Lattice与Altera、Xilinx对比及入门)
需求说明:Lattice系统FPGA入门 内容 :Lattice与Altera.Xilinx对比 来自 :时间的诗 1.Lattice与Altera.Xilinx对比 latt ...
- Xilinx 7系列FPGA部分重配置【2】
在之前的“Xilinx 7系列FPGA部分重配置[1]”中已经较为详细地记录了分别在工程模式(Project Mode)和非工程模式(Non-Project Mode)下.使用7系列的Xilinx F ...
- 关于zynq系列板卡设计VREFP_0参考电压的疑问及解答
使用板卡:Z-turn Board 芯片:Xilinx Zynq-7010/7020处理器 有工程师在试用zynq系列Z-turn Board时提出:在原理图P3页 Bank0上VREFP_0端接地的 ...
- ZYNQ系列
赛灵思公司(Xilinx)推出的行业第一个可扩展处理平台Zynq系列.旨在为视频监视.汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平. 中文名 ZYNQ系列 开发商 赛灵 ...
- (qsf文件 、 tcl文件 和 csv(txt)文件的区别) FPGA管脚分配文件保存、导入导出方法
FPGA管脚分配文件保存方法 使用别人的工程时,有时找不到他的管脚文件,但可以把他已经绑定好的管脚保存下来,输出到文件里. 方法一: 查看引脚绑定情况,quartus -> assignment ...
- webpack4 系列教程(十一):字体文件处理
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十一):字体文件处理>原文地址.或者来我的小站看更多内容:godbmw.com 0. 课程介 ...
- 7系列FPGA远程更新方案-QuickBoot(转)
reference: http://xilinx.eetrend.com/d6-xilinx/article/2014-04/7009.html reference : quickboot meth ...
随机推荐
- C# 微信开发-----微信会员卡(一)
这是微信的官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283,能看懂的朋友就请不要往下看了,我是看不懂 ...
- git官网和安装使用教程链接
git官网 https://git-scm.com/download/win git安装教程 https://www.cnblogs.com/wj-1314/p/7993819.html
- 一分30秒 kali 开机显示 a start job is running for dev-disk 处理
在给kali虚拟机扩容后,使用fdisk /dev/sda 更改新建分区后,重启系统出现一分30秒等待. 解决方案: (root 权限) 第一步:sudo blkid (查看当前系统的真实的 ...
- JavaScript我学之八善变的this---函数执行上下文
本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘. 函数执行上下文 当函数运行时,通过this,函数可以获取它运行所需的外界环境的相关信息(比如某变量的值,另一个对象的引用等). this引用 ...
- 枚举特性FlagsAttribute的用法
先看官方的解释:指示可以将枚举作为位域(即一组标志)处理. 看起来并不好理解,到底什么是作为位域处理? 其实说的通俗点就是用二进制的表示方式来处理数学集合概念中关于集合的或与非等运算方法. 有什么用 ...
- 在vue里添加好看的lottie动画 (^_^)
为什么用lottie ★~★ 1.能让你的程序不那么单调 2.能让一些有审美强迫症的同学好受一点 3.网上有丰富的资源 点我进入lottie资源网站 引入lottie库 (>.<) 在vu ...
- 服务器资源监控插件(jmeter)
零.引言 我们对被测应用进行性能测试时,除了关注吞吐量.响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过 实时监控,可以准确的把握不同测试场景下服务器资源消 ...
- KaliLinuxNetHunter教程实施刷机解锁Bootloader
KaliLinuxNetHunter教程实施刷机解锁Bootloader 当用户将前面的工作都准备完成后,即可开始刷机.其中,整个刷机过程分为三个步骤,分别是解锁Bootloader.刷入第三方Rec ...
- Jquery中事件的重复绑定
问题:事件的绑定具有叠加效果,已有绑定的函数时,再次绑定,执行时会出现绑定多少次,触发多少次的情况 解决:1.on();绑定事件,提供了绑定事件处理程序所需的所有功能,用于统一取代以前的bind(). ...
- Petrozavodsk Winter-2018. Carnegie Mellon U Contest
A. Mines 每个点能爆炸到的是个区间,线段树优化建图,并求出SCC进行缩点. 剔除所有不含任何$n$个点的SCC之后,最小代价为每个入度为$0$的SCC中最小点权之和,用set维护即可. 时间复 ...