上一节我们只使用ZYNQ的PL端资源,单独控制PL端的LED实现流水灯:blog.csdn.net/fengyuwuzu0…。但是掉电后程序会丢失,那么如何固化代码到FLASH呢?就是本节的目的了。
一、ZYNQ的启动流程
ZYNQ7000 SOC 芯片可以从 FLASH 启动,也可以从 SD 卡里启动, 本节介绍程序 FLASH 启动的方法。Zynq7000 SOC 芯片上电后,最先运行的是ARM端系统(PS)。然后再通过ARM系统软件部分加载FPGA的比特流文件.bit至FPGA(PL),配置FPGA PL端的逻辑功能。ZYNQ 系统的启劢流程如下:
1.1 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 启动方式:初始化 SD 控刢器;
从 SD Card 拷贝 system.bit 到 FPGA (如果 BOOT.BIN 中存有 system.bit);
从 SD card 拷贝应用程序的代码到 DDR3;
跳转到应用程序执行;
1.2.3 JTAG 启动方式,直接退出。
2 制作BOOT.bin
2.1 新建项目
2.2 配置PS端资源、启动SDK、生成BOOT.bin
(1)ZYNQ 的PS开发一般有原理框图的形式来设计,这样硬件的连接看起来会更加直观。点击 Create Block Design 按钮来添加原理图设计文件。
在弹出的对话框里输入原理图设计文件的名字,返里我们取名为"system"。
(2)出现 Diagram 的空白对话框,点击 图标+添加 ARM 处理器内核到这个空白的原理图里。