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

软件版本: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固化的流程

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第1张图片

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. 开发板启动模式

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第2张图片

 

5.7 BOOT.bin制作过程详解

5.7.1 创建工程

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

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

 米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第3张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第4张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第5张图片

Step5:添加进来了ZYNQ CPU IP

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第6张图片

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接口

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第7张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第8张图片

3、配置串口

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第9张图片

Step7:修改时钟

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

2、DDR时钟也采用默认

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

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第10张图片

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内存型号配置如下:

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第11张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第12张图片

Step9:点击OK完成配置。

Step10:点击Run Block  Automation

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第13张图片

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第14张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第15张图片

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

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第16张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第17张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第18张图片

Step13:生成bit文件。

5.7.1 导入SDK

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

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

Step2:勾选Include bitstream 直接单击OK

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第19张图片

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

 米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第20张图片

Step4:导出完成后如下图

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第21张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第22张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第23张图片 米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第24张图片

Step7:新建的Helloworld工程。

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第25张图片

Step8:新建一个应用工程。

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第26张图片 米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第27张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第28张图片

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

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第29张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第30张图片

 

5.8 SD-TF卡启动

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

测试结果:

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第31张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第32张图片

注意:放到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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第33张图片

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第34张图片

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

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第35张图片 米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第36张图片

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第37张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第38张图片

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

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第39张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第40张图片

Step5:下载过程,输出情况

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第41张图片

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

测试结果:

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第42张图片

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

米联客 ZYNQ/SOC精品教程 S01-CH05 FPGA程序的固化和下载_第43张图片

你可能感兴趣的:(XILINX,ZYNQ,米联客)