目录
一、启动原理
二、烧写文件集
三、烧写文件制作
四、烧写
五、FLASH分区
一般而言,Xilinx Microblaze会被用来在系统中做一些控制类和简单接口的辅助性工作,比如运行IIC、SPI、UART之类的低速接口驱动,对FPGA逻辑功能模块初始化配置及做些辅助计算等等。类程序的代码量普遍不大,常常在十几KB到几时KB之间,因此对存储的需求通常也不是太高,使用FPGA内部RAM资源便已经够用。那么,当Microblaze需要运行文件系统、网络协议栈甚至是操作系统时,代码量可能会高达几MB甚至是几十MB的规模,此时程序就必须在外部存储器运行了。本文以将外部QSPIFlash中存储的镜像加载到外部DDR为例,讲一讲Microblaze Bootloader的实现方法。
一、启动原理
FPGA RAM资源非常稀缺,如果FPGA本身加载完Xilinx Microblaze硬件之后,本身所剩的RAM资源就不是很多了,就算高端的FPGA也是如此的,对于高端的应用或者操作系统相关的应用是不够的,所以需要QSPI和DDR3的配合完成大应用程序或者操作系统的加载及正常运行。
(1)FPGA上电的时候会把QSPI的FPGA逻辑(QSPI前12M,可以指定更大)加载到FPGA芯片,本节课所讲的FPGA逻辑代码就是BootLoader代码(此代码数据会被烧录到FPGA BRAM里面)和Microblaze硬件(硬件网表);
(2)BRAM映射给MicroBlaze的地址为从0x0000_0000开始,加载FPGA逻辑代码到FPGA芯片完毕后,MicroBlaze处理器会从BRAM 0x0000_0000地址处开始执行BootLoader代码;
(3)BootLoader的功能就是从指定的地方加载应用程序或者操作系统到DDR3内存里面(指定的地方:就是在制作BootLoader的时候指定的应用程序偏移地址);
(4)加载完应用程序或者操作系统到DDR3之后,MicroBlaze PC指针直接开始从DDR3开始运行应用程序;
(5)整个过程加载完毕。
因此可以看出,BootLoader其实存储在BRAM内部的数据,这个数据是在上电加载FPGA逻辑资源的时候加载到BRAM的。、
二、烧写文件集
(1)fpga.bit(Vivado生成的FPGA bit文件,也就是Microblaze硬件bit流)
(2)serc_spi_bootloader.elf(BRAM中要初始化的BootLoader代码数据,此elf要和fpga.bit合而为一为download.bit,download.bit在FPGA上电的时候,加载到FPGA电路中)
(3)app.elf(应用程序,需要存储在Flash的另一段区域,在Microblaze运行起来BRAM内部BootLoader代码之后,BootLoader会从FLASH加载app.elf到DDR,开始运行应用)
三、烧写文件制作
(1)fpga.bit:Vivado直接生成;
(2)app.elf:Vitis C IDE直接生成;
(3)BootLoader制作;
以下介绍如何在SDK中创建Microblaze Bootloader的方法。
第一步:创建基于SPI Flash的serc SPI Bootloader,如下图所示,创建serc spi bootloader。
第二步:修改xilisf库,serial_flash_family=5选择Spansion 系列QSPI Flash, serial_flash_interface=1选择AXI 接口,如图所示,修改xilisf库参数。
第三步:修改存储应用程序的Flash偏移量,如图所示,修改存储应用程序的Flash偏移量。
当前示例选用的FPGA bit文件约为10.5MB,因此偏移量选择12MB,需要根据实际FPGA容量进行调整。到此为止serc spi bootloader工程创建完毕。
四、烧写
烧写Flash分成两个部分,一个是bit文件,一个是应用程序的serc文件。
(1)烧写bit文件, 烧写bit文件
第一步需要将fpga bit和serc spi bootloader的elf文件先合成,如图5所示,点击编程,默认合成的文件命名为download.bit。如果擅长使用命令行,也可以用updatemem命令手动生成。
第二步是烧写生成的download.bit文件到flash,这里不再多说,注意flash的偏移地址为0x00即可。
(2)烧写应用程序serc,实际上应用程序烧进flash的是serc文件,该文件可以烧写到特殊的偏移位置。如图6所示,如果需要用其它工具烧写,也可使用命令mb-objcopy手动转换.elf文件为serc文件,烧写应用程序到特定偏移地址。
五、FLASH分区
???????