ZYNQ-BOOT介绍与程序固化(一)

简介: ZYNQ-BOOT介绍与程序固化

学习内容


本文把程序存储在非易失性存储器中, 在上电或者复位时让程序自动运行,这个过程需要启动引导程序( Boot Loader) 的参与。 Boot Loader 会加载 FPGA 配置文件, 以及运行在 ARM 中的软件应用。

开发环境


vivado 18.3&SDK

PYNQ-Z2开发板

Boot和配置简介


在 ZYNQ的启动和配置时, 既需要 PS 的配置信息,又需要 PL 的配置信息。ZYNQ无法纯FPGA像xilinx那样只进行FPGA端口的配置。在 ZYNQ 中, 我们可以理解为PS作为主器件, PL 端口可以看作是 PS 的一个外设,因此需要由 PS 来配置 PL。这个配置顺序的优势是它允许对 PS 单独上电的时候, 此时 PL 不上电,以减小功耗。

在配置文件内FPGA BIT 文件用来定义 PL 的配置信息和操作;而 ELF 文件用于配置运行在 PS 中的程序。

启动流程图


在进行配置时的主要流程,如下图所示。

image.png

上图中的Mode_Pins是boot模式的设置引脚,是几个MIO引脚,通过给这几个引脚配置不同的高低电平,进而选择不同的启动模式。完成启动后,这几个IO可以作为ARM的GPIO进行使用。

STAGE0阶段是BootROM执行阶段,就是将一些的外设和寄存器进行初始化,从FSBL中读取代码,读取到OCM中进行运行,比如我们从Flash读取后续代码那就需要将flash进行初始化。

STAGE1中,FSBL(用户也可修改,由SDK自动生成模板)执行阶段,FSBL、用户代码执行,就是对更多外设的初始化,比如DDR等。初始化完毕后会从启动镜像中读取bit流来配置PL,加载裸机应用程序到DDR中去运行。

STAGE2为裸机运行阶段。然后运行用户编写好的程序。

BootROM and Header Parameters


ZYNQ SoC 的启动由片上的 BootROM 开始。片上 BootROM 是 ZYNQ 芯片上的一块非易失性存储器,它包含了 ZYNQ 所支持的配置器件的驱动, 而且里面的代码是不可修改的。 BootROM 中的代码首先会在片外的非易失性存储器中寻找一个头文件, 头文件里定义了一些启动信息, 用于配置 BootROM 的运行。 这些启动信息包括是程序是否就地执行( excute in place) , FSBL 的偏移地址以及是否为安全模式等。头文件的存在确保 BootROM 能够按照配置器件被格式化后的方式操作。

image.png

FSBL阶段


BootROM 执行之后,下一个配置阶段被称为 First-Stage Boot Loader( FSBL), 它是由设计者所创建的。FSBL 可以配置 DDR 存储器和硬件设计过程中所定义的一些外设。这些器件需要在加载软件应用及配置 PL之前就初始化完毕。

FSBL 的工作内容:

1、 初始化 PS;

2、 如果提供了 BIT 文件,则配置 PL;

3、 加载裸机应用程序到 DDR 中,或者加载 Second-Stage Boot Loader( SSBL);

4、 开始执行裸机应用程序,或者 SSBL。PL 的配置是通过处理器配置访问接口( Processor Configuration Access Port, PCAP) 进行的,它允许对PL 进行部分配置或者完全配置。有关 PL 的部分配置我们会在其他章节予以介绍。 一旦 PS 启动运行之后,PL 可以在任意时刻被配置, FSBL 和应用程序可以清除、 配置以及使能 PL。

BOOT模式引脚


ZYNQ SoC 使用多个模式引脚来决定配置器件的类型, 软件的存储位置以及其他的系统设置, 这些引脚共享 PS 端的 MIO 引脚。 总共有 7 个模式引脚, 分别为 MIO[8:2]。

其中,前四个引脚定义启动模式,第五个引脚定义是否使用 PLL, 第六个和第七个引脚定义上电过程中 MIO bank0 和 bank1 的 bank 电压。

image.png

构建一个 ZYNQ 的启动镜像我们需要以下的文件:

  1. Boot ROM 头文件:控制 Boot ROM 设置,比如就地执行、 加密、 FSBL 偏移量、镜像文件大小等;
  2. First-Stage Boot Loader;
  3. PL 配置文件, 即 BIT 文件;
  4. 运行在 PS 上的软件应用程序ELF;

PS软件复位阶段


PS软件复位阶段有三个,stage0:BootRom,stage1:FSBL,stage2:运行系统或者裸机代码。

image.png

image.png

PL硬件复位阶段


PL硬件复位阶段,首先通过PS的端口进行启动模式的设置,设置完成后进行PLL的配置初始化。

image.png

安全启动模式流程图


image.png

在安全模式下,启动镜像总是由CPU写入OCM内存。 从那里,它被送 (使用DMA)进、送出AES(Advanced Encryption Standard)/HMAC(密钥相关的哈希运算消息认证码)单元进行解密和身份验证。 解密的引导映像被写入OCM内存,并在引导完成后执行。 也就是每个ZYNQ都有一条解密算法专门这对自己的FLASH进行解密,flash中的代码就只能被本zynq使用。

硬件平台搭建


我们随便打开一个工程,因为我们这里要通过使用SD卡和JTAG模式进行下载,所以我们在硬件平台的构建下要进行,勾选SD和 SPI FLASH

image.png

然后我们进行generate output product 然后生成HDL封装,完成约束后进行综合布局布线,等待生成bit流文件。bit文件生成后在FILE处,点击导出硬件资源(包含bit流文件),接着launch SDK。

目录
相关文章
|
24天前
|
存储 芯片 SoC
|
19天前
|
Linux 开发工具 异构计算
【ZYNQ】QSPI Flash 固化程序全攻略
【ZYNQ】QSPI Flash 固化程序全攻略
|
5月前
|
Shell Linux 芯片
嵌入式系统中u-boot和bootloader到底有什么区别
嵌入式系统中u-boot和bootloader到底有什么区别
111 1
嵌入式系统中u-boot和bootloader到底有什么区别
|
缓存 芯片
ARM裸板开发——UART通信方式及使用(二)
ARM裸板开发——UART通信方式及使用
166 0
|
传感器 定位技术 数据处理
ARM裸板开发——UART通信方式及使用(一)
ARM裸板开发——UART通信方式及使用
217 0
ARM裸板开发——UART通信方式及使用(一)
|
算法 C语言
嵌入式ARM设计编程(四) ARM启动过程控制
嵌入式ARM设计编程(四) ARM启动过程控制
128 0
嵌入式ARM设计编程(四) ARM启动过程控制
|
存储 安全 开发工具
ZYNQ裸板:程序固化篇
一般的调试中我们都是通过 JTAG 接口将 FPGA 配置文件和应用程序下载到 ZYNQ 器件中。同样的,我们也可以将尝试把程序存储在非易失性存储器中,在上电或者复位时让程序自动运行,这个过程需要启动引导程序( Boot Loader) 的参与
322 0
ZYNQ裸板:程序固化篇
|
开发工具 内存技术
zynq程序固化补充篇: 不切换启动模式强制烧写
使用SDK2018.2第一次进行烧写 Flash,在qspi模式下会报错,只有切换至jtag模式下才可以进行烧录,后续的再次烧录不会出现类似问题。但是调试的时候必须切回jtag模式(将BOOT MODE 5拉低才可以调试)
1476 1
zynq程序固化补充篇: 不切换启动模式强制烧写
|
存储 缓存 网络协议
ZYNQ裸板:AXIDMA篇(简单模式)
DMA(Direct Memory Access,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器( CPU)介入处理。 DMA 是一种快速的数据传送方式, 通常用来传送数据量较多的数据块
761 0
ZYNQ裸板:AXIDMA篇(简单模式)
|
存储 缓存 异构计算
ZYNQ裸板:BRAM篇
在 ZYNQ SOC 开发过程中, PL 和 PS 之间经常需要做数据交互。对于传输速度要求较高、数据量大、地址连续的场合,可以通过 AXI DMA 来完成。而对于数据量较少、地址不连续、长度不规则的情况,此时 AXIDMA 便不再适用了。针对这种情况,可以通过 BRAM 来进行数据的交互。
616 0