作者: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 烧写应用程序到特定偏移地址

 

       需要特别注意的是,Bootloader会Check Flash的ID,因此需要确保将您的Flash芯片对应的ID添加到支持型号列表里(如果默认没有)。

5. 总结

Microblaze  Bootloader在Microblaze运行大中型软件的系统中是必须的,希望本文能起到抛砖引玉的作用。如有任何问题或心得都可加入QQ讨论群300148644交流。

转载请注明作者和出处。

转载:http://blog.csdn.net/haoxingheng/article/details/51295659

Xilinx Microblaze Bootloader的更多相关文章

  1. 创芯Xilinx Microblaze 学习系列第一集

    创芯Xilinx Microblaze 学习系列第一集 Xilinx ISE Design Suite 13.2 The MicroBlaze™ embedded processor soft cor ...

  2. 关于Xilinx MicroBlaze应用modelsim se仿真问题(EDK:3593 - Unable to locate the precompiled library microblaze_v8_50_c)

    ERROR:EDK:3593 - Unable to locate the precompiled library microblaze_v8_50_c. The file D:\Xilinx\14. ...

  3. 在嵌入式设计中使用MicroBlaze(Vivado版本)(转)

    原文Xilinx官方文档<ug898-vivado-embedded-design>第三章 一.MicroBlaze处理器设计介绍(略) 二.创建带有MicroBlaze处理器的IP设计 ...

  4. μC/OS-II在Microblaze上的移植与使用专题--“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品

    reference:http://xilinx.eetrend.com/d6-xilinx/blog/2010-05/682.html   随着集成电路设计与制造技术的发展,FPGA芯片的容量越来越大 ...

  5. Xilinx DMA的几种方式与架构

    DMA是direct memory access,在FPGA系统中,常用的几种DMA需求: 1. 在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AXI,AXI与 ...

  6. GNU libc (Glibc) 2.18 发布

    标准C库Glibc发布2.18正式版.2013-08-12 上一个版本是2012-12-25的2.17. 详细改进:Version 2.18 * The following bugs are reso ...

  7. 关于C51中“大小端存储”问题的详解

    1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之. 2. 小端存储称为Intel模式,大端存储称为Motorola模式. 3. C51 ...

  8. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  9. [原创]Zynq AXI-CDMA的使用

    Xilinx 提供了3种DMA AXI-DMA AXI-CDMA AXI-VDMA 使用CDMA能够满足项目需求(MM-MM),DS文档介绍如下: The Xilinx LogiCORE™ IP AX ...

随机推荐

  1. 7.如何将python脚本打包为exe形式

    先安装pyinstaller,pip install pyinstaller 然后 pyinstaller -F combine.py打包即可

  2. Redis持久化磁盘IO方式及其带来的问题

    有Redis线上运维经验的人会发现Redis在物理内存使用比较多,但还没有超过实际物理内存总容量时就会发生不稳定甚至崩溃的问题 一.对Redis持久化的探讨与理解 redis是一个支持持久化的内存数据 ...

  3. MySQL server has gone away With statement: INSERT INTO `students`......

    mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了. 首选分析给出可能出现的 ...

  4. cocos代码研究(19)Widget子类ImageView学习笔记

    理论基础 显示图片的小控件,继承自 Widget . 代码实践 static ImageView * create()创建一个空的ImageView static ImageView * create ...

  5. 手把手教你学node.js之一个简单的express应用

    一个简单的express应用 目标 建立一个 lesson1 项目,在其中编写代码.当在浏览器中访问 http://localhost:3000/ 时,输出 Hello World. 挑战 访问 ht ...

  6. EditPlus 4.3.2487 中文版已经发布(11月12日更新)

    新的版本修复了粘贴多重选择文本的问题,以及增加了横向扩展列选模式选择范围的快捷键(Ctrl+Alt+→/←).

  7. Spring 整合Mybatis 出现了Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create Poola

    我出现的 报错信息如下: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionExc ...

  8. poj3071 Football(概率dp)

    poj3071 Football 题意:有2^n支球队比赛,每次和相邻的球队踢,两两淘汰,给定任意两支球队相互踢赢的概率,求最后哪只球队最可能夺冠. 我们可以十分显然(大雾)地列出转移方程(设$f[ ...

  9. Python3 pandas用法大全

    Python3 pandas用法大全 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as ...

  10. 20145303 刘俊谦《网络对抗》逆向及BOF基础实践

    20145303 刘俊谦<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...