作者: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. http和socket之长连接和短连接区别

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...

  2. Mirror--镜像断开的解决办法

    如果镜像在搭建一段时候后出现问题,可能存在以下原因: 1. 因为主库或镜像库存在内存压力,导致无法完成镜像日志传送和重做 解决办法:设置数据库最小内存,保证数据库有足够内存完成镜像操作 2. 因为主库 ...

  3. Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  4. Teigha.net读写dwg文件显示

    官网:http://www.opendesign.com/ http://www.cnblogs.com/zhanglibo0626/archive/2011/11/04/2236238.html 下 ...

  5. MySQL创建索引命令

    MySQL索引类型 普通索引 创建索引的方式 -- 直接新建索引 CREATE INDEX indexName ON mytable(username(length)) -- 修改表结构新建索引 AL ...

  6. Spark的RDD原理以及2.0特性的介绍

    转载自:http://www.tuicool.com/articles/7VNfyif 王联辉,曾在腾讯,Intel 等公司从事大数据相关的工作.2013 年 - 2016 年先后负责腾讯 Yarn ...

  7. HDU5086:Revenge of Segment Tree(规律题)

    http://acm.hdu.edu.cn/showproblem.php?pid=5086 #include <iostream> #include <stdio.h> #i ...

  8. windows下和linux下libcurl安装

    下载源代码,在winbuild里面有个说明文件: Building with Visual C++, prerequisites==================================== ...

  9. HDU - 2844 Coins(多重背包+完全背包)

    题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...

  10. 去掉每行最后n个字符

    awk '{sub(/.{n}$/,"")}1' nation.tbl > nation.tbl2 把n替换成具体长度