当前位置: 代码迷 >> 综合 >> vivado SPI bootloader引导程序创建
  详细解决方案

vivado SPI bootloader引导程序创建

热度:74   发布时间:2023-12-07 20:55:42.0

引言

一般而言,Xilinx Microblaze会被用来在系统中做一些控制类和简单接口的辅助性工作,比如运行IIC、SPI、UART之类的低速接口驱动,对FPGA逻辑功能模块初始化配置及做些辅助计算等等。类程序的代码量普遍不大,常常在十几KB到几时KB之间,因此对存储的需求通常也不是太高,使用FPGA内部RAM资源便已经够用。那么,当Microblaze需要运行文件系统、USBHCD、网络协议栈甚至是操作系统时,代码量可能会高达几MB甚至是几十MB的规模,此时程序就必须在外部存储器运行了,这就需要一个小的初始化程序,将程序搬移到外设中,然后启动主程序,这个程序就是bootloader;

Microblaze Bootloader

Microblaze的工作原理和所有的通用处理器一样。我们一般情况下会将.elf代码、FPGA bit文件和.imm RAM初始化文件合成一个download.bit文件烧写到外部Flash中去。这里.elf的可执行代码就变成了FPGA Block RAM的初始化值,复位释放后即可执行,在有限空间的BlockRAM里面执行一小段代码,负责初始化必要的外设并将Flash里面的其他代码搬运到外部存储器中执行。这种原理和所有的通用处理器是类似的,这里的Block RAM就相当于是ARM之类通用处理器的片上RAM(OCM)资源,执行的这一小段代码就相当于第一季BootLoader(FSBL)。

硬件搭建

·原理图:

·需要的功能模块

Microblaze

DDR Mig

Cache RAM

中断控制器

QSPI Flash IP核

总线相关的AXIInterconnec

以及验证模块VGA LED自定义IP

·Flash相关:

注意需要选择STARTUP 原语;

  1. 创建bootloader程序

·创建基于SPI Flash的serc SPI Bootloader,如下图2所示。

 

 ·修改xilisf库,serial_flash_family=5选择Spansion 系列QSPI Flash, serial_flash_interface=1选择AXI 接口,如下所示。

·修改存储应用程序的Flash偏移量,如下所示

当前示例选用的FPGA bit文件约为10.5MB,因此偏移量选择12MB,需要根据实际FPGA容量进行调整。

·确认serc spi bootloader链接脚本均在内部RAM空间,应用app工程的链接脚本都指向外部DDR

到此为止serc spi bootloader工程创建完毕

  1. 烧写bootloader

·生成boot程序

选择Frogram Fpga,然后选择bootloader程序,如下,点击Program,然后在hw目录生成一个download.bit,这个就是包含硬件配置程序和boot程序的二进制文件:

·烧写boot程序

打开Frogram Flash,选择download.bit,偏移地址为0x00;烧录到flash中,如下图:

·烧写主程序

·断电重启即可;

  相关解决方案