MicroBlaze

MicroBlaze软核处理器简介

MicroBlaze™ 是 Xilinx 嵌入式产品系列的重要组件。MicroBlaze 是功能齐全的、更少指令集的 FPGA 优化型 32 位计算机 (RISC) 软处理器,可充分满足各种应用需求,如工业、医疗、汽车、消费类以及通信基础设施市场等。MicroBlaze 是一款高度可配置的易用型处理器,可在 FPGA 以及全可编程 (AP) SoC 产品系列中使用。它免费配套提供 Vivado® 设计与系统版以及 Vivado Webpack 版。此外,它还可作为原有 IDS 嵌入式版本的一部分提供,用于 Spartan®-6 和 Virtex®-6 等较早的 FPGA 器件系列。

MicroBlaze 是高度可配置的 IP 核,支持 70 多种配置选项。一些重要的配置选项为指令/数据高速缓存、浮点单元和存储器管理单元等。用户可使用高度灵活的可配置内核,实现几乎任何处理器使用案例,从极小型状态机或微控制器到运行 Linux 的高性能计算密集型微处理器系统,无所不能。该 IP 既可配置为在三级管线模式下工作(针对尺寸进行优化),也可配置为在五级管线模式下工作(针对速度进行优化),因而可提供比其它任何 FPGA 软处理解决方案更快的 DMIP 性能。

使用MicroBlaze调用AXI IP核

作者: 浅搁,来源:FPGA2嵌入式

在一个项目中,当你使用microblaze作为控制器来进行系统调度的时候,一般是建议将所有模块封装成AXI形式的IP核,这样好管理,也容易调试。不过在初期的时候是不建议这样做的,因为你的模块并没有完全被验证是没问题的,所以还是使用.v文件,等后面这一功能验证通过,再把它封装成IP核形式。

1. AXI IP核简介

用过Microblaze或者看例程的人肯定都知道,Xilinx提供了很多AXI形式的IP核,像常用的UART、IIC、SPI等IP核。我们只要把他们在画布里调出来,然后使用自动连接形式,便能把对应接口连接起来,接着在软件上调用其相应的函数便可以工作了。

但是当我们自己封装了一个AXI形式的IP核后,又该怎么去使用呢?这不是官方IP,没有相应的函数呀?不知道大家是否有印象,上一篇文章介绍IP封装的时候说过,封装成AXI形式的IP核,会生成一些东西,如下图所示,这个可千万别去删,大有用处的。

在诸多关于MicroBlaze软核处理器的例程中,往往都是使用JTAG下载然后借助SDK执行程序代码。然而无论是在项目展示还是实际应用中,我们都希望我们的设计可以即插即用,免去重复烧写的麻烦和必须使用SDK运行程序的限制。

事实上,为了部署一个真实的系统,需要在没有任何人为操作的情况下从非易失性存储器中启动MicroBlaze处理器并加载程序代码。

本篇文章,我们就围绕这个话题,以Digilent Arty Artix-7开发板为例,教你如何在板载的QSPI Flash中存储比特流配置文件和应用程序。

QSPI有两个主要作用:

  • 配置Artix FPGA
  • 存储应用软件
  • 对于第一个功能,我们在Vivado设计中不需要包含QSPI接口。我们只需要在Vivado配置中更新对QSPI的设置,提供QSPI Flash存储器与FPGA配置管脚的连接。然而,一旦FPGA配置完成并调用MicroBlaze软核处理器,我们则需要在设计中引入与QSPI Flash通信的接口。这个新添加的接口允许引导程序(bootloader)从QSPI Flash存储器中复制应用程序到Arty实际执行的DDR SDRAM存储介质中。

    当然,这会引起一个问题,即MicroBlaze bootloader(引导程序)从何而来?

    该视频讲解了如何使用mig为Xilinx的fpga进行扩容,CPU为microblaze,编程平台为vivado

    Xilinx推出自己版本的QEMU——快速的开源即时功能仿真器——支持Zynq SoCZynq UltraScale+ MPSoC系列ARM处理器以及Xilinx MicroBlaze软核处理器。在没有硬件设备之前,QEMU给嵌入式软件开发人员提供了增强的执行环境加速工程代码开发,即使有了硬件设备依然可以继续使用QEMU作为软件开发平台(因为相对于给每个开发人员分配硬件设备,搭建QEMU仿真环境更加容易)。

    Artix-7-50T EVM 试用日志(三)——MicroBlaze测试DDR3

    我们在平常的调试过程中尤其在进行大批量数据处理时,经常需要缓存大量的数据,虽然较高级别的FPGA都用于大量的片内BlockRAM,但是在算法较为复杂时,BlockRAM依然显得捉襟见肘,外置的SDRAM容量大成本低,为FPGA扩容提供了良好的平台。Xilinx系列FPGA随软件拥有免费的SDRAM控制器,可以很方便的让用户对FPGA进行缓存扩容,而不用费神于如何控制SDRAM的读写时序和自刷新等繁杂的操作。

    我们手中这块A7-50T的开发板上便集成了位宽为16bit,容量位256MB的DDR3-SDRAM。这次我们就着手测试一下开发板的DDR3存储。

    测试内容为将DDR3扩展为MicroBlaze软核的存储空间。这样不但省掉我们用HDL语言去编辑整个用户时序,还可以在生成MicroBlaze软核时配置较小的片上缓存,而将较大的程序空间分配如DDR3内,从而可以节省出有限的片上缓存空间用于数据接口的缓存。

    测试步骤:
    1. 新建一个工程,在其内部新建一个Block Design,将我们需要的IP核加入到Block Design中,分别为UART核和MIG,新建完工程如图1。

    安富利陈志勇博士出的试用题目:
    通过以太网口,PC把一幅图片传给FPGA,FPGA做处理后再回传给PC做显示。这样可以实现算法验证,并且可以比较基于PC纯软件处理,和FPGA硬加速处理的时间。图像处理?比如:滤波,旋转,识别分析等。

    实验内容:搭建基于Microblaze的嵌入式系统,添加以太网口、串口、DDR3等外设驱动,通过建立TFTP使得PC与FPGA嵌入式系统实现文件互传。至于图像处理,下回细说。
    软件环境:VIVADO/SDK 2015.2
    硬件平台:Artix-7 50T FPGA 开发套件

    (一)硬件平台/Microblaze设计
    根据安富利开发套件提供的demo/7A50T_EthernetLite_LwIP_VIV2014_2来搭建自己的硬件平台。
    先将 IPI_solution.zip解压出VIVADO 2014.2的工程文件,并用笔者的VIVADO 2015.2打开。该工程文件可以直接使用,用VIVADO 2015.2打开之后相关IP需要进行升级。

    前言:之前笔者的试用博文提到安富利这块板子非常适合MicroBlaze开发,同时网上关于MicroBlaze的资料非常少(或含糊不清),没有一篇能完整介绍VIVADO SDK的设计流程,所以笔者带来这篇博文以供参考。

    实验平台:Avnet-Artix-7 50T 开发套件/其它硬件也可以
    EDK:Vivado 2015.2
    SDK:Xilinx SDK 2015.2

    实验内容:创建一个简单的MicroBlaze,实现板上LED流水灯和串口功能。

    实验步骤:
    (一) EDK部分
    1. VIVADO下创建一个空工程。
    2. IP Integrater -> Create Block Design
    3. 框图内添加IP,such as MicroBlaze IP。使用Avnet-Artix-7 50T 开发套件双击Board
    中器件即可。非该套件使用者,需要右击Diagram->ADD IP ->AXI Uartlite |AXI GPIO。需要双击IP设置对应波特率和GPIO_LED的位数。

    SDK– 如何减小Microblaze的代码体积

    作者:圆宵 来源:FPGA那点事儿公众号

    在FPGA中使用软核做嵌入式开发,有时我们会非常在意其编译后的代码体积大小,毕竟通常情况下,Microblaze都不是直接运行在DDR当中,而是运行在FPGA内部的LocalBRAM里面的,而BRAM通常是FPGA里面比较宝贵的资源,我们不希望在这上面有太多的浪费。

    那么有没有什么手段,可以在不改变c代码的前提下,减小编译后的体积呢?下面就给大家教几招,如果大家碰到这类问题,可以尝试一下。

    1. 确保build configuration里面,你选择的是release,而不是debug

    Debug会加入额外的很多调试相关代码,而增大最终elf的体积,Release就不会这么做。

    硬件环境:7A50T
    软件环境VIVADO2014.04
    项目内容: 7A50t LWIP应用测试

    备注:在跑第二个例子的时候,遇到问题“XMD既不是内部命令也不是外部命令”,此问题纠结了一周多,最后在重新安装软件之后问题成功解决,下面是LWIP应用程序的详细测试步骤。

    一. 下载程序:
    1 . 开启串口,设置波特率,8位uu,1位停止为何无奇偶校验和流控制,在demo文件夹下打开命令提示符窗口,输入“demo_raw_apps.bat", uxiatu所示:

    2. 如下图所示,程序下载成功

    同步内容