软件版本:VIVADO2017.4

操作系统:WIN10 64bit

硬件平台:适用米联客 ZYNQ系列开发板

米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!!

5.1概述

在前面一节做了流水灯实验,但是对于FPGA bit程序断电后就丢失了,所以本课讲解把上一课的流水灯程序可以实现固化到FLASH或者SD卡的方法。

5.2什么是固化

前面章节内容,都是通过JTAG先下载bit流文件,再下载elf文件,最后点击Run As来运行程序。JTAG的方法是通过TCL脚本来初始化PS,然后用JTAG收发信息,用于在线调试。但是这样只要一断电,程序就会丢失,掉电不保存。

如果需要板卡中程序掉电不消失,则需要对程序进行固化。ZYNQ7000 SOC 芯片可以从 FLASH 启动,也可以从 SD 卡启动。本章详细介绍如何制作镜像文件,以及SD和FLASH的固化方法。

SD固化:将镜像文件拷贝到SD卡,设置拨码开关,使系统从SD模式启动。那么每次断电重启后,系统都会从SD启动。

QSPI FLASH 固化:设置拨码开关,将镜像文件烧写进FLASH,使系统从QSPI-FLASH模式启动。那么每次断电重启后,系统都会从FLASH启动。

5.3固化的流程

5.4固化准备

如果我们要固化一个ZYNQ的程序,以及为这个程序做一个镜像文件,那么该如何做呢?

首先,想到的两个文件就是PL部分需要的bit文件,以及PS需要的elf文件。但是仅有这两个文件不够的。我们还需要一段代码把bit文件以及elf文件安置好。这段代码就是大名鼎鼎的FSBL.elf。

因此要制作一个镜像文件需要三个文件:

1、FSBL.elf

2、.bit

3、.elf。

最后得到一个等式就是:BOOT.bin = FSBL.elf+该工程.bit+该工程.elf。在工程编译后,会产生该工程的bit文件和elf文件。关键是这个FSBL.elf怎么生成?不用担心,FSBL.elf文件xilinx早就为我们准备好了。我们可以利用SDK生成它。在此之前,我们先简单了解一下zynq的启动的过程。

5.5 zynq的从SD卡的启动的过程

zynq和大多数arm启动过程一样,启动过程也分为3个阶段,这三个阶段分别称之为阶段0、阶段1和阶段2。

阶段 0:即传统的BootROM过程。ZYNQ芯片ROM里面固化了一段不可修改的程序,只要ZYNQ一上电,这段程序就会执行。它将对ZYNQ的NAND、NOR、SD等基本外设控制器进行初始化。把SD卡这类易失的存储器件初始化后,就会把其中的程序拷贝到ZYNQ的OCM(On-chip memory)。这个被拷贝到片上RAM执行的程序就是我们今天要制作的文件——BOOT.bin。

阶段 1:BOOT.bin加载到OCM上开始执行。 BOOT.bin由FSBL.elf+该工程.bit+该工程.elf构成。阶段1要做的就是:首先配置PS部分,PS完成初始化后,会去配置PL部分,最后去加载阶段2的代码。

阶段 2:这一阶段是可选的,主要是为了完成Linux系统启动过程。本次实验暂时不需要。

5.6 zynq启动模式位的选择

这里有个疑问,众所周知ZYNQ具有多种启动方式:NOR, NAND, Quad-SPI, SD Card 以及JTAG 。ZYNQ如何判断到底从哪里启动呢?实际上,当上电后,ZYNQ会根据模式管脚的设定,选用boot的方式。

米联客ZYNQ开发板有两种启动模式,一种是SD启动,另外一种是QSPI  FLASH启动。开发板通过拨码开关对管脚进行设置,改变启动模式。

注意:请将开发板或核心板电源关闭后,对拨码开关操作,否则会对板卡造成损害。

开发板启动模式及拨码开关状态如下所示,默认拨码是SD启动:

核心板模式开关:

表1. 开发板启动模式

5.7 BOOT.bin制作过程详解

5.7.1 创建工程

Step1:在前面流水灯实验基础基础上增加Block Design。

Step2:新建一个BD文件。单击 Create Block Design,命名为system 之后单击OK。

 

Step3: 单击下图中添加IP按钮

Step4:搜索单词ZYNQ选择ZYNQ7 Processing System,然后双击

Step5:添加进来了ZYNQ CPU IP

Step6:修改MIO接口配置

修改MIO配置如下,如果不是配套的开发板,读者如何不确定IO设置请阅读原理图查看这部分配置

1、首先修改BANK1的IO电压为1.8V(对应原理图是BANK501)个人感觉XILINX ZYNQ ARM上的BANK分类有点混乱,因为软件里面的BANK1(UG585也是BANK1)是对应原理图中的BANK501,大家不用纠结,反正ARM的IO是固定死的,这些IO又不能当作FPGA的IO自由定义。

1、Qspi FLASH接口

2、配置SDIO 接口,也就是TF卡接口

3、配置串口

Step7:修改时钟

1、对于CPU的时钟,开发板输入33.333333M 所以默认设置

2、DDR时钟也采用默认

3、CPU运行主频设置为默认的667M,对于不同速度等级的CPU, ARM支持的最高频率也不一样,根据情况而定。

4、QSPI 的时钟改到125M,否则可能无法加载FLASH

Step8:修改内存型号

PS内存配置:

开发板内存型号配置:

DDR ConfigurationàMemory PartàMT41K256M16  RE-125或MT41K128M16 JT-125

其中:MIZ701A-MINI的DDR型号:MT41K128M16 JT-125

MZ701A、MZ702A、MZ7XB的DDR型号:MT41K256M16  RE-125。

MZ7XA-mini7010内存型号配置如下:

MZ7XA-7010、MZ7XA-7020、MZ7XB内存型号配置如下:

Step9:由于用不到GP接口,所以去掉默认的GP接口

Step9:点击OK完成配置。

Step10:点击Run Block  Automation

Step11:搭建好的BD 工程一下就是配置好的ZYNQ IP。

Step12:修改run_led程序,增加 ZYNQ IP接口部分定义实现run_led调用BD 模块

首先,右击BD让软件自动创建一个顶层文件

然后,利用自动产生的system_wrapper.v中对BD 调用的接口代码复制到run_led.v中,这样,run_Led.v就能调用BD文件了。

最后, run_led.v的模块接口,主要修改标点符号

Step13:生成bit文件。

5.7.1 导入SDK

生成bit文件后,需要到处硬件,新建SDK工程,启动ZYNQ 7 Processing System  IP。

Step1: File->Export->Export Hardware,导出硬件。

Step2:勾选Include bitstream 直接单击OK

Step3:File->Launch SDK加载到SDK,单击OK

 

Step4:导出完成后如下图

Step5:选择File->New->Application Project

Step6:工程命名为HelloWorld,然后单击NEXT,选择自带的Helloworld程序做测试,单击Finish。

 

Step7:新建的Helloworld工程。

Step8:新建一个应用工程。

填写工程名FSBL,点击Next,工程类型选择Zynq FSBL。

 

Step9: 选中helloworld工程(要做固化的工程),然后右单击,选择Creat Boot Image。

Step10:在新窗口中,一共出现三个文件,分别是FSBL.elf、.bit、.elf文件,如图所示。制作镜像文件需要这三个文件。

直接单击Create Image即可完成Boot.bin的创建,此文件可作为SD卡启动文件和SPI启动文件。

完成后,可以看到在helloworld工程(要做固化的工程)的文件夹中出现bootimage文件夹,展开后可以看到生成的BOOT.bin文件。这个BOOT.bin文件用于SD或QSPI固化。

5.8 SD-TF卡启动

将生成的BOOT.bin文件,复制到SD卡,再将SD卡插到开发板,最后打开电源。则开机后系统从SD卡启动,程序掉电不消失。

测试结果:

测试前,连接串口线,在SDK中打开串口。

开发板通电后,流水灯亮起,串口打印出数据。

注意:放到SD卡的bin文件,文件名必须是BOOT.bin,否则不识别。

5.9 QSPI-FLASH启动 (VIVADO 2017.4)

从VIVADO 2017.3版本开始,Xilinx官方为了使Zynq-7000和Zynq UltraScale +实现流程相同,在QSPI FLASH使用上做了变化,即Zynq-7000编程flash需要“指定的fsbl”。这个fsbl用于初始化系统(主要是运行ps7_init()函数)。XILINX官网中Xilinx Answer 70548和Xilinx Answer 70148提供了VIVADIO 2017.3版本QSPI FLASH下载方法。

读者需要注意,如果不修改引导用的fsbl,下载uboot.bin到FLASH会失败,以下就是下载FLASH的具体办法。

本教程提供VIVADO 2017.4  QSPI-FLASH下载方法如下:

Step1: 新建环境变量

计算机à属性à高级系统设置à高级à环境变量à新建系统变量

变量名:XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ

变量值:10000000

Step2: 生成加载QSPI  FLASH的fsbl文件

新建一个新的FSBL文件,命名为zynq_fsbl。FileàNewàApplication Project,输入zynq_fsbl,点击Next。选择Zynq  FSBL,单击Finish。

 

Step3: 打开zynq_fsbl的main.c文件,在此处增加“BootModeRegister = JTAG_MODE; ”保存并编译。

Step4: 模式开关切换到QSPI启动模式(1-ON ,2-OFF),开发板通电。选择Xilinx Tools > Program Flash或单击 Program Flash Memory。

加载刚才生成的BOOT.BIN文件和zynq_fsbl文件,单击Program。

下载过程,需要几分钟时间

Step5:下载过程,输出情况

Step6:下载完成后断电,重新打开电源,就能看到从QSPI FLASH加载。

测试结果:

测试前,连接串口线,在SDK中打开串口。

开发板通电后,流水灯亮起,串口打印出数据。

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载相关推荐

  1. 基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH05 PS 千兆 UDP 加速

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  2. 米联客 ZYNQ/SOC精品教程 S02-CH13 CAN总线通信实验

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  3. fast角点检测 java_米联客 ZYNQ/SOC 精品教程 S04-CH11 快速角点检测之硬件实现

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  4. 米联客 ZYNQ/SOC精品教程 S01-CH04 VIVADO创建工程之流水灯

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  5. 米联客 ZYNQ/SOC 精品教程 S02-CH15 AXI_Lite 总线详解

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  6. 米联客 ZYNQ/SOC 精品教程 S02-CH24 利用AXI VDMA 实现MT9V034摄像头采集

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  7. 米联客 ZYNQ/SOC精品教程 S01-CH06 FPGA按钮去抖实验

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  8. 米联客 ZYNQ/SOC 精品教程 S02-CH25 利用OSD实现双目摄像头字幕叠加

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  9. 米联客 ZYNQ/SOC精品教程 S01-CH07 FPGA多路分频器实验

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

最新文章

  1. swift实现ios类似微信输入框跟随键盘弹出的效果
  2. 偶然发现静态函数与性能一例
  3. [YTU]_2499( 处理成绩(c++类训练))
  4. css3小球坠落,CSS3 圆球体内的小球碰撞运动
  5. 【Pix4d精品教程】大疆精灵4A无人机航空摄影测量外业数据采集完整操作流程
  6. 平台框架_从框架到平台
  7. python位置参数ppt_如何在Python中使用一个或多个相同的位置参数?
  8. Objective-C 2.0 with Cocoa Foundation--- 8,类方法以及私有方法
  9. 关于量子计算机的科学论文,量子计算机论文,关于科学家尝试用量子计算机创造时间旅行论文范文-毕业论文网...
  10. nginx系列11:负载均衡哈希算法ip_hash与hash模块
  11. c# 系列 - 基本知识
  12. python之scipy
  13. 凯撒密码中有数字怎么办_古典密码
  14. html游戏音乐,背景音乐的html标签
  15. 读书笔记:《超越需求 敏捷思维模式下的分析》
  16. namp常规扫描命令(超详细!推荐)
  17. 英语“就近原则”和“就远原则”
  18. linux系统下的打印机驱动下载,用于UNIXLinux系统的打印机驱动程序-Lexmark.PDF
  19. 使用Oracle的sshUserSetup.sh脚本配置SSH互信
  20. 解决Xcode真机测试时ineligible devices的问题

热门文章

  1. LIST FOR MM2
  2. mysql+curdate+昨天_MySQL内置时间curdate查询用法
  3. java线程治理法宝一:线程池
  4. hadoop+hive+hbase的大数据行业应用-交通轨迹分析
  5. mac 使用常用快捷键
  6. centos7 安装Netdata
  7. JavaScript 递归的3个小应用
  8. 麒麟周刊 | 诉说最精彩的麒麟瞬间!
  9. Python中的时间格式的读取与转换(time模块)
  10. 软件的内聚性和耦合性