最近由于项目需要,要将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 启动方式:

  1. 初始化 SD 控刢器;

  2. 从 SD Card 拷贝 system.bit 到 FPGA (如果 BOOT.BIN 中存有 system.bit);

  3. 从 SD card 拷贝应用程序的代码到 DDR3;

  4. 跳转到应用程序执行;

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相关推荐

  1. 详细教程:vivado2019.2 vitis2019.2下,zynq7000系列FPGA固化PL程序到外挂flash和SD卡

    详细教程:vivado2019.2 & vitis2019.2下,zynq7000系列FPGA固化PL程序到外挂flash和SD卡 实际上经过多次下载发现,vitis下的固化已经很大程度上帮我 ...

  2. ZYNQ系列之-----SD卡中BMP图片读取+ddr读写验证

    1.前提: sd卡挂载在ps测,并且使用的ZYNQ系统.和前文是一样的. ZYNQ系列之-----SD卡读写文件_hhh_fpga的博客-CSDN博客 2.设备与软件 软件: vivado 2021. ...

  3. FPGA固化MCS文件失败

    2.01 FPGA固化MCS文件失败 2.1.1 本节目录 第一,章节目录: 第二,前言: 第三,FPGA简介: 第四,FPGA固化MCS文件失败: 第五,结束语: 2.1.2 本节引言 给FPGA一 ...

  4. zynq中mgtx应用_Xilinx 7系列FPGA 高速收发器GTX/GTH的一些基本概念

    本来写了一篇关于高速收发器的初步调试方案的介绍,给出一些遇到问题时初步的调试建议.但是发现其中涉及到很多概念.逐一解释会导致文章过于冗长.所以单独写一篇基本概念的介绍,基于Xilinx 7系列的GTX ...

  5. vivado生成ltx文件命令_Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册.pdf

    Xilinx Artix-7系列FPGA 高速采集卡开发例程使用手册 Xilinx Artix-7 系列FPGA 高速采集卡开发例程使用手册 Revision History Draft Date R ...

  6. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

    Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...

  7. Altera FPGA程序固化

    转载自CSDN博客: https://blog.csdn.net/yuan_hust/article/details/75269111 Altera FPGA程序固化 对MCU进行烧写程序,程序固件被 ...

  8. 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  9. Zynq和FPGA区别——快速认识Zynq开发

    Zynq和FPGA区别--快速认识Zynq开发 ZYNQ包含了2个部分,双核的ARM和FPGA.根据Xilinx提供的手册,用ARM实现的模块被称为PS,而用FPGA实现的模块被称为PL.简单的说FP ...

最新文章

  1. java dayofweek_Java DayOfWeek getDisplayName()用法及代碼示例
  2. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.2. Torvalds的Linux发展)
  3. @FunctionalInterface
  4. .+filename的作用
  5. html制作选择题题库,HTML与网页制作测试题库
  6. 命令点无效怎么处理_怎么更好处理闲置包包,买包卖包都要记住这5点
  7. Linux内核启动去掉企鹅,修改linux内核kernel开机logo(小企鹅)
  8. android根据中心裁剪图片,拍照,选择照片并进行裁剪,适配Android 7.0
  9. WIN7下运行hadoop程序报:Failed to locate the winutils binary in the hadoop binary path
  10. C# 线程间互相通信
  11. 2021-09-02AUC
  12. 上海计算机一级和四六级,大学英语六级比四级难多少?985学长含泪告诉你!
  13. ssh: connect to host master port 22: No route to host
  14. 程序员必备网络基础知识清单,简单易懂
  15. 《数据驱动 从方法到实践》之 数据驱动的环节 学习总结
  16. 百度搜索 屏蔽百家号
  17. TFN频谱仪为什么好用以150为例
  18. steps()的学习
  19. 开启Windows的文件大小写区分功能
  20. 陈都灵现身海南国际电影节,新片《关索岭》票房有望超《阿凡达》

热门文章

  1. (九)redis如何存储海量数据
  2. java poi 合并两个word
  3. 产品外观设计的特点和优点
  4. 创建excel,xls转换为xlsx
  5. Android Query managedQuery
  6. println输入和toString方法的重写
  7. Java调用tostring方法分析_Java对象toString()方法
  8. QT环境中 _TCHAR 和 QString 互相转换
  9. http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法
  10. Unity3D 开发工具系列 UI框架:定义设置Defines