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相关推荐
- 详细教程:vivado2019.2 vitis2019.2下,zynq7000系列FPGA固化PL程序到外挂flash和SD卡
详细教程:vivado2019.2 & vitis2019.2下,zynq7000系列FPGA固化PL程序到外挂flash和SD卡 实际上经过多次下载发现,vitis下的固化已经很大程度上帮我 ...
- ZYNQ系列之-----SD卡中BMP图片读取+ddr读写验证
1.前提: sd卡挂载在ps测,并且使用的ZYNQ系统.和前文是一样的. ZYNQ系列之-----SD卡读写文件_hhh_fpga的博客-CSDN博客 2.设备与软件 软件: vivado 2021. ...
- FPGA固化MCS文件失败
2.01 FPGA固化MCS文件失败 2.1.1 本节目录 第一,章节目录: 第二,前言: 第三,FPGA简介: 第四,FPGA固化MCS文件失败: 第五,结束语: 2.1.2 本节引言 给FPGA一 ...
- zynq中mgtx应用_Xilinx 7系列FPGA 高速收发器GTX/GTH的一些基本概念
本来写了一篇关于高速收发器的初步调试方案的介绍,给出一些遇到问题时初步的调试建议.但是发现其中涉及到很多概念.逐一解释会导致文章过于冗长.所以单独写一篇基本概念的介绍,基于Xilinx 7系列的GTX ...
- vivado生成ltx文件命令_Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册.pdf
Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册 Xilinx Artix-7 系列FPGA 高速采集卡开发例程使用手册 Revision History Draft Date R ...
- Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...
- Altera FPGA程序固化
转载自CSDN博客: https://blog.csdn.net/yuan_hust/article/details/75269111 Altera FPGA程序固化 对MCU进行烧写程序,程序固件被 ...
- 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- Zynq和FPGA区别——快速认识Zynq开发
Zynq和FPGA区别--快速认识Zynq开发 ZYNQ包含了2个部分,双核的ARM和FPGA.根据Xilinx提供的手册,用ARM实现的模块被称为PS,而用FPGA实现的模块被称为PL.简单的说FP ...
最新文章
- java dayofweek_Java DayOfWeek getDisplayName()用法及代碼示例
- 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.2. Torvalds的Linux发展)
- @FunctionalInterface
- .+filename的作用
- html制作选择题题库,HTML与网页制作测试题库
- 命令点无效怎么处理_怎么更好处理闲置包包,买包卖包都要记住这5点
- Linux内核启动去掉企鹅,修改linux内核kernel开机logo(小企鹅)
- android根据中心裁剪图片,拍照,选择照片并进行裁剪,适配Android 7.0
- WIN7下运行hadoop程序报:Failed to locate the winutils binary in the hadoop binary path
- C# 线程间互相通信
- 2021-09-02AUC
- 上海计算机一级和四六级,大学英语六级比四级难多少?985学长含泪告诉你!
- ssh: connect to host master port 22: No route to host
- 程序员必备网络基础知识清单,简单易懂
- 《数据驱动 从方法到实践》之 数据驱动的环节 学习总结
- 百度搜索 屏蔽百家号
- TFN频谱仪为什么好用以150为例
- steps()的学习
- 开启Windows的文件大小写区分功能
- 陈都灵现身海南国际电影节,新片《关索岭》票房有望超《阿凡达》
热门文章
- (九)redis如何存储海量数据
- java poi 合并两个word
- 产品外观设计的特点和优点
- 创建excel,xls转换为xlsx
- Android Query managedQuery
- println输入和toString方法的重写
- Java调用tostring方法分析_Java对象toString()方法
- QT环境中 _TCHAR 和 QString 互相转换
- http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法
- Unity3D 开发工具系列 UI框架:定义设置Defines