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。

目录
相关文章
|
Linux 开发工具 内存技术
国产之路:复旦微zynq调试笔记2--PL网口
PL侧的网口需求相较于PS部分还是有一定区别的,主要需要添加axi ethernet 的移植
3670 0
|
Linux 开发工具 异构计算
【ZYNQ】QSPI Flash 固化程序全攻略
【ZYNQ】QSPI Flash 固化程序全攻略
4025 0
|
开发工具 内存技术
zynq程序固化补充篇: 不切换启动模式强制烧写
使用SDK2018.2第一次进行烧写 Flash,在qspi模式下会报错,只有切换至jtag模式下才可以进行烧录,后续的再次烧录不会出现类似问题。但是调试的时候必须切回jtag模式(将BOOT MODE 5拉低才可以调试)
3807 1
zynq程序固化补充篇: 不切换启动模式强制烧写
|
存储 芯片 SoC
ZYNQ程序固化
ZYNQ程序固化
|
开发工具 芯片 Perl
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
【ZYNQ】裸机 PS + PL 双网口实现之 ZYNQ 配置
3441 0
|
算法 异构计算
m基于FPGA的OFDM调制解调系统verilog实现,包括IFFT,FFT以及成型滤波器,包含testbench
m基于FPGA的OFDM调制解调系统verilog实现,包括IFFT,FFT以及成型滤波器,包含testbench
600 3
|
存储 Linux 数据安全/隐私保护
ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析
ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析
2148 0
ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析
|
存储 安全 存储控制器
ZYNQ裸板:中断篇
中断对于单片机过来的我们来说,相对也算比较熟悉了,还是严谨一点从头开始说吧。中断是什么?是一种当满足要求的突发事件发生时通知处理器进行处理的信号。中断可以由硬件处理单元和外部设备产生,也可以由软件本身产生。对硬件来说,中断信号是一个由某个处理单元产生的异步信号,用来引起处理器的注意。对软件来说,中断还是一种异步事件,用来通知处理器需要改变代码的执行,当然,轮询所产生的中断的过程是同步的。
1975 0
ZYNQ裸板:中断篇
|
缓存 开发工具 芯片
ZYNQ-AXI GPIO使用(一)
ZYNQ-AXI GPIO使用
2005 1
ZYNQ-AXI GPIO使用(一)
|
传感器 Linux 网络安全
zynq操作系统: Linux驱动开发串口篇
串口( UART)是一种非常常见的外设, 串口在嵌入式开发领域当中一般作为一种调试手段,通过串口将调试信息打印出来,或者通过串口发送指令给主机端进行处理;当然除了作为基本的调试手段之外,还可以通过串口与其他设备或传感器进行通信, 譬如有些 sensor 就使用了串口通信的方式与主机端进行数据交互。
2089 0
zynq操作系统: Linux驱动开发串口篇