0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Vivado通过AXI Quad SPI实现XIP功能

Hack电子 来源:AMD开发者社区 2024-10-29 14:23 次阅读

作者:Longley Zhang,AMD工程师;来源:AMD开发者社区

就地执行(eXecute In Place,下面简称XIP),即芯片内执行,是指应用程序可以直接在非易失存储器或闪存中取指然后译码、执行,不必再把代码读到系统RAM中。它是使用共享内存的扩展,以减少所需的总内存量。AMD的软核处理器Microblaze可以通过AXI Quad SPI IP实现XIP的功能。AMD提供参考设计XAPP1176(见Ref 1,Ref 2),介绍使用 Vivado 通过 AXI Quad SPI 进行就地执行(XIP)。用户可以通过这个参考设计了解Microblaze实现XIP功能的基本概念和设计思路。然而这篇文档使用的Vivado版本是2013.2,这个版本已经很旧了,文档里面提到的一些工具(如:IMPACT) 以及命令(XMCSUTIL)在新版本的Vivado都已经不支持了,并且XAPP1176里提供的bootloader比较复杂。

本博客提供了基于2023.2 Vivado的参考工程,展示如何使用Microblaze就地执行(XIP)程序,并提供一个简单的bootloader。

下面是工程创建流程和程序运行步骤:

1. 修改2023.2 AC701 Petalinux BSP里自带的Vivado工程,使能AXI Quad SPI IP里的XIP模式。

或者创建一个基于AC701的Vivado工程运行,然后运行附件的tcl文件。

8a50db4e-95a6-11ef-a511-92fbcf53809c.png

2. 构建Vivado工程,生成bit文件并导出包含bitstream的xsa文件。

3. 在Vitis里,基于导出的xsa文件创建platform工程,创建两个工程,一个是bootloader,另外一个是XIP的用户程序。

这个bootloader只是一个运行在BRAM里的简单程序,作用是把PC跳转到XIP程序的起始位置。

XIP程序可以是任何用户程序,用户需要在linker script里把.text等只读的section放到QSPI flash的地址段,把.data/.bss等读写的section放到BRAM。

如果.data section里有已经初始化的变量,用户需要在用户程序里把.data section复制到BRAM里。

4. 分别右键点击bootloader工程和XIP工程里的src文件夹,导入附件的工程文件。(在本博客的工程里,bootloader工程文件在bootloader_ar的文件夹里,XIP工程文件在dhry_0文件夹里。)

5. 在XSCT里运行mb-objcopy把xip工程的elf文件转换成bin文件(下面命令把dhry_0.elf转换成dhry_0.b)。

mb-objcopy -O binary -R .vectors.reset -R .vectors.sw_exception -R .vectors.interrupt -R .vectors.debug_sw_break -R .vectors.hw_exception dhry_0.elf dhry_0.b

6. 在Vitis里,通过菜单Vitis -> Program Device把bootloader.elf更新到bit文件里,生成新的download.bit。

8a732bd6-95a6-11ef-a511-92fbcf53809c.png

7. 在Vivado里,通过菜单Tools -> Generate Write Memory Configuration File把download.bit和XIP工程的bin文件合并成一个mcs文件(这里相当于XAPP1176里的Merging Two MCS Files)。

8aa52ff0-95a6-11ef-a511-92fbcf53809c.png

8. 把生成的mcs文件烧写到AC701的QSIP flash里,连接UART线,把AC701设置为QSPI flash启动模式并上电启动。这样就能看到串口的打印输出了,输出内容是DHRYSTONE测试的结果。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 闪存
    +关注

    关注

    16

    文章

    1775

    浏览量

    114801
  • 存储器
    +关注

    关注

    38

    文章

    7447

    浏览量

    163579
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80830
  • MicroBlaze
    +关注

    关注

    3

    文章

    68

    浏览量

    21530

原文标题:如何使用Microblaze 就地执行(XIP)程序

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何将AXI VIP添加到Vivado工程中

    在这篇新博文中,我们来聊一聊如何将 AXI VIP 添加到 Vivado 工程中,并对 AXI4-Lite 接口进行仿真。随后,我们将在仿真波形窗口中讲解用于AXI4-Lite 传输事
    发表于 07-08 09:27 1978次阅读

    请问CYW20829能否通过Quad SPI连接固件、用户数据和Quad SPI SRAM?

    我计划在下图所示的配置中使用 CYW20829。 是否可以使用 Quad SPI 连接固件、用户数据和 Quad SPI SRAM?
    发表于 07-03 06:25

    AXI QUAD SPI的综合放置中遇到错误

    我在AXI QUAD SPI的综合/放置中遇到以下错误我为ext_spi_clk创建了外部端口,为SPI_O创建了接口端口。[放置30-57
    发表于 10-18 14:37

    Vivado无法放置任何时钟资源

    )无法通过放置阶段,会产生大量的放置错误,如下所示。基本上,Vivado不能放置与时钟相关的任何原语 -BUFG,BUFH,PLLE2_ADV,GTHE2_COMMON等。设计针对xc7vx690t
    发表于 11-02 11:32

    [放置30-73]SPI接口IP,如何解决这个严重警告?

    - 工具:VIVADO 2017.1 -IP名称:AXI Quad SPI - 目标设备:Artix 7 - 消息:[放置30-73]寄存器'dsp / Load_Database
    发表于 11-02 11:34

    [放置30-73] axi_quad_spi版本3.2的寄存器'IO1_I_REG'的约束无效

    你好,我们正在收到执行重要警告w.r.t. axi_quad_spi核心的MISO或Io1_i引脚。问题出现是因为核心期望输入端口被放置在IOB中。这也在支持产品文档中说明。不幸的是,我们无法将输入
    发表于 11-12 14:41

    怎么使用AXI Quad SPI IP Core对带有PROM文件的SPI Flash进行编程

    AXI总线,由AXI主机(PCIe)控制,从主机PC接收其事务。我的想法是能够通过PCIe链路发送PROM bistream到使用新PROM文件对SPI闪存进行编程的
    发表于 03-14 13:53

    Axi quad spi怎么作为从属设备?

    大家好。当我在zynq-7000中使用axi quad spi ip core作为从设备时,我遇到了一个问题。我将slave axi quad
    发表于 04-17 10:13

    vivado hls axi接口问题

    你好!如果我想使用vivado hls来合成具有axi流接口的代码,是否有必须遵循的标准编码风格?
    发表于 04-21 10:23

    如何使用Vivado功能创建AXI外设

    了解如何使用Vivado的创建和封装IP功能创建可添加自定义逻辑的AXI外设,以创建自定义IP。
    的头像 发表于 11-29 06:48 7097次阅读
    如何使用<b class='flag-5'>Vivado</b><b class='flag-5'>功能</b>创建<b class='flag-5'>AXI</b>外设

    如何使用Vivado Design Suite IP Integrator的调试AXI接口

    了解如何使用Vivado Design Suite IP Integrator有效地调试AXI接口。 本视频介绍了如何使用该工具的好处,所需的调试步骤和演示。
    的头像 发表于 11-29 06:00 3981次阅读

    基于Vivado/SDK 2018.3的XIP参考设计

    Without External Memory,把代码和只读数据放在QSPI Flash中运行程序,这就是execute in place (XIP)。 上述XIP参考设计工作正常,但是只更新到了Vivado
    的头像 发表于 10-09 10:09 3269次阅读

    怎么样利用AXI Quad SPI快速打通Linux至PL端SPI从设备?

    [导读] 前面写过篇介绍ZYNQ基本情况的文章,今天来肝一篇实战文章介绍AXI quad SPI 使用方法,如果你正使用ZYNQ的这个IP,希望对你有所帮助。 初识AXI
    的头像 发表于 04-09 17:45 7791次阅读
    怎么样利用<b class='flag-5'>AXI</b> <b class='flag-5'>Quad</b> <b class='flag-5'>SPI</b>快速打通Linux至PL端<b class='flag-5'>SPI</b>从设备?

    【ZYNQ实战】利用AXI Quad SPI快速打通Linux至PL端SPI从设备

    [导读] 前面写过篇介绍ZYNQ基本情况的文章,今天来肝一篇实战文章介绍AXI quad SPI 使用方法,如果你正使用ZYNQ的这个IP,希望对你有所...
    发表于 01-26 17:01 7次下载
    【ZYNQ实战】利用<b class='flag-5'>AXI</b> <b class='flag-5'>Quad</b> <b class='flag-5'>SPI</b>快速打通Linux至PL端<b class='flag-5'>SPI</b>从设备

    AMD MicroBlaze中通过AXI Timer获取时间戳

    硬件的Vivado Block design设计中,添加AXI Timer
    的头像 发表于 06-08 09:21 649次阅读