引言
一般而言,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 原语;
- 创建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工程创建完毕
- 烧写bootloader
·生成boot程序
选择Frogram Fpga,然后选择bootloader程序,如下,点击Program,然后在hw目录生成一个download.bit,这个就是包含硬件配置程序和boot程序的二进制文件:
·烧写boot程序
打开Frogram Flash,选择download.bit,偏移地址为0x00;烧录到flash中,如下图:
·烧写主程序
·断电重启即可;