作者: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. Nginx 使用总结

    一.使用 nginx 实现 灰度发布 灰度发布,现在是很多大项目的一个标配运维特性,我们可以将一个“新的版本代码”发布到集群中的少数几台(组)机器上,以便引入线上少量真实用 户进行测试,用于验证产品改 ...

  2. 102-advanced-代码分割

    1.Bundling 大多数React应用程序将使用Webpack或Browserify等工具“捆绑”文件.捆绑是跟踪导入的文件并将它们合并到单个文件中的过程:“捆绑”.然后,该包可以包含在网页中以一 ...

  3. hdfs HA原理

    早期的hadoop版本,NN是HDFS集群的单点故障点,每一个集群只有一个NN,如果这个机器或进程不可用,整个集群就无法使用.为了解决这个问题,出现了一堆针对HDFS HA的解决方案(如:Linux ...

  4. 如何确定selenium ID元素是否查找正确

    编写脚本时,如何确定通过id查找的id是否真实存在,点击css,然后输入#(代表id)id名,如#kd,回车之后,能返回结果,便代表存在.

  5. 005-matlab2018a安装破解

    1.下载地址: 百度云下载链接:https://pan.baidu.com/s/1uTYAxVX1_Hx6nbsgf4W4kA 密码:asrw 官网下载地址: 2.解压. 3.双击setup.exe后 ...

  6. 004-notepad++安装。

    1.下载地址. 官网:https://notepad-plus-plus.org/ 2.安装.

  7. onsubmit不起作用的原因

    使用form表单,添加onsubmit="return check()",来实现提交前进行相关验证功能时,有时会出现js函数不起作用的情况, 此时可以检查相应的js函数check( ...

  8. 33Sql数据删除与遍历

    数据库的创建.添加.修改.查询.删除都是利用SQL语句和类QSqlQuery的结合. QSqlDatabase::database().可返回当前正在打开的数据库对象. 数据库的删除 //获取删除的名 ...

  9. MySql如何安装?

    官方网址:https://www.mysql.com/downloads/ Community——>MySqlCommunity Server->GA->64位: GA:正式版: C ...

  10. Mysql优化_ORDER BY和GROUP BY 的优化讲解(单路排序和双路排序)

    ORDER BY 子句尽量使用Index方式排序,避免使用FileSort方式排序,尽可能在索引列上外城排序操作,遵照索引键的最佳左前缀.如果不在索引列上,FileSort有两种算法,Mysql就要启 ...