Xilinx Microblaze Bootloader
作者:Hello,Panda
一般而言,Xilinx Microblaze会被用来在系统中做一些控制类和简单接口的辅助性工作,比如运行IIC、SPI、UART之类的低速接口驱动,对FPGA逻辑功能模块初始化配置及做些辅助计算等等。类程序的代码量普遍不大,常常在十几KB到几时KB之间,因此对存储的需求通常也不是太高,使用FPGA内部RAM资源便已经够用。那么,当Microblaze需要运行文件系统、USBHCD、网络协议栈甚至是操作系统时,代码量可能会高达几MB甚至是几十MB的规模,此时程序就必须在外部存储器运行了。本文以将外部QSPIFlash中存储的镜像加载到外部DDR为例,讲一讲Microblaze Bootloader的实现方法。
1.Microblaze Bootloader
Microblaze的工作原理和所有的通用处理器一样,这里不用赘述。我们一般情况下会将.elf代码、FPGA bit文件和.imm RAM初始化文件合成一个download.bit文件烧写到外部Flash中去。这里.elf的可执行代码就变成了FPGA Block RAM的初始化值,复位释放后即可执行。想必聊到这里大家就已经明白Microblaze Bootloader该如何实现了:在有限空间的BlockRAM里面执行一小段代码,负责初始化必要的外设并将Flash里面的其他代码搬运到外部存储器中执行。这种原理和所有的通用处理器是类似的,这里的Block RAM就相当于是ARM之类通用处理器的片上RAM(OCM)资源,执行的这一小段代码就相当于第一季BootLoader(FSBL)。
以下所有的示例都是在Xilinx XC7K325 FPGA上进行验证。开发环境为Vivado2015.2。硬件平台包含一片256Mbit(32M字节)的Spansion QSPI Flash,一片海力士16bit位宽的容量为512MB的DDR3。
2.搭建FPGA硬件
要验证这个系统,必须要有①Microblaze②DDR Mig③Cache RAM④中断控制器⑤QSPI Flash IP核⑥总线相关的AXIInterconnect⑦串口输出调试信息等协同工作才行(工程顶层结构见附件)。
这里需要特别说明的是QSPI Flash的配置,如图1所示.AXI接口的XIP模式和Performace模式采用AXI Full接口,可以获得更高的带宽和方便使用DMA,这里使用最基本的AXI Lite接口。
图1 QSPI IP核参数配置
需要注意的地方有两点:
① ext_spi_clk:在QSPI模式下这个时钟的两分频就是给SPI Flash的访问时钟,因此这个时钟要根据QSPI Flash的参数设置到合理值;
② STARTUPE2原语:如果外部的Flash挂在FPGA的专用配置管脚上就要使能该原语,使用普通IO则不能使能。
3. 创建Microblaze Bootloader
以下介绍如何在SDK中创建Microblaze Bootloader的方法。
第一步:创建基于SPI Flash的serc SPI Bootloader,如下图2所示。
图2 创建serc spi bootloader
第二步:修改xilisf库,serial_flash_family=5选择Spansion 系列QSPI Flash, serial_flash_interface=1选择AXI 接口,如图3所示。
图3 修改xilisf库参数
第三步:修改存储应用程序的Flash偏移量,如图4所示。
图4 修改存储应用程序的Flash偏移量
当前示例选用的FPGA bit文件约为10.5MB,因此偏移量选择12MB,需要根据实际FPGA容量进行调整。
第四步:确认serc spi bootloader链接脚本均在内部RAM空间,应用app工程的链接脚本都指向外部DDR。
到此为止serc spi bootloader工程创建完毕。
4. 烧写Flash
烧写Flash分成两个部分,一个是bit文件,一个是应用程序的serc文件。
4.1 烧写bit文件
烧写bit文件,第一步需要将fpga bit和serc spi bootloader的elf文件先合成,如图5所示,点击编程,默认合成的文件命名为download.bit。如果擅长使用命令行,也可以用updatemem命令手动生成。
图5 编程生成bit文件
第二步是烧写生成的download.bit文件到flash,这里不再多说,注意flash的偏移地址为0x00即可。
4.2 烧写应用程序serc
实际上应用程序烧进flash的是serc文件,该文件可以烧写到特殊的偏移位置。如图6所示,如果需要用其它工具烧写,也可使用命令mb-objcopy手动转换.elf文件为serc文件。
图6 烧写应用程序到特定偏移地址
5. 总结
Microblaze Bootloader在Microblaze运行大中型软件的系统中是必须的,希望本文能起到抛砖引玉的作用。如有任何问题或心得都可加入QQ讨论群300148644交流。
转载请注明作者和出处。
最新文章
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
- PHP---Mysql常用语法(增删改查)
- 硬件抽象层:HAL
- 把图标改成web字体
- JVM的堆分配
- paper 41:正交变换
- 关于tomcat8在windows2008下高并发下问题的解决方案
- MongoDB 3 + Windows 7 X64安装及配置
- Volly的使用及图片错位优化
- SC命令---安装、开启、配置、关闭 cmd命令行和bat批处理操作windows服务
- HDOJ --- 1159 Common Subsequence
- Java添加自定义注解
- android蓝牙(二)——接收数据
- hadoop编程小技巧(7)---自己定义输出文件格式以及输出到不同文件夹
- 转载 Deep learning:一(基础知识_1)
- HttpServletRequest.getServletContext()一直提示找不到,而引出的问题
- APP中的 H5和原生页面如何分辨、何时使用
- js转换字符串为数值的方法
- nodejs里的module.exports和exports
- 随机切换IP和UA
热门文章
- sql server 碎片整理——DBCC SHOWCONTIG
- mysql 数据操作 多表查询 子查询 带EXISTS关键字的子查询
- centos Linux下磁盘管理 parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpfs ,nr_inodes, LVM,传统方式扩容文件系统 第七节课
- 001-Spring的设计理念和整体架构
- Controller中返回数据总结(ResponseEntity,@ResponseBody,@ResponseStatus)
- 《Clean Code》一书回顾
- WordPress配置
- hdu 5068 线段树加+dp
- 892. Surface Area of 3D Shapes
- Flask 使用富文本输入框