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

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

3天内不再提示

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

454398 来源:博客园 作者:HankFu 2020-10-09 10:09 次阅读

有些应用中,单板没有DDR,OCM又不够存储所有数据和指令。这种情况下,Xilinx提供了参考设计Zynq-7000 AP SoC Boot - Booting and Running Without External Memory,把代码和只读数据放在QSPI Flash中运行程序,这就是execute in place (XIP)。

上述XIP参考设计工作正常,但是只更新到了Vivado/SDK 2017.3,不匹配当前大部分应用中的工具版本。另外,上述XIP参考设计难于理解,也难于移植到其它单板。旧版本XIP参考设计的缺点。

1. XIP参考设计工具版本旧。
2. XIP参考设计改动的文件很多。
3. XIP的相关代码没有单独标示出来。
4. 有些改动还在BSP工程里,重新生成BSP工程,会被覆盖。

为了便于使用,我把XIP参考设计更新到Vivado/SDK 2018.3,并减少特殊文件,使用宏DDRLESS_XIP_SYSTEM包含所有XIP代码。改动后,所有与XIP相关的文件在FSBL或者Application的工程src目录下。所以SDK 2018.3版XIP参考设计具有以下优点。

1. XIP参考设计工具版本新。
2. XIP参考设计改动的文件更少。
3. XIP的相关代码单独标示。
4. 便于移植2018.3版XIP参考设计到其它单板。
5. 便于移植2018.3版XIP参考设计到其它工具版本。

1. Vivado 工程
Zynq-7000 AP SoC Boot - Booting and Running Without External Memory提供了TCL脚本project.tcl、system_top.tcl,用于恢复硬件工程。
把其中的版本号,从2017.3改为2018.3后,可以使用Vivado 2018.3执行project.tcl创建工程。

但是恢复出来的硬件工程,仍然使能了DDR控制器。建议在Vivado工程里禁止DDR控制器后,再编译硬件工程,导出HDF文件。

2. FSBL

FSBL 更改的文件如下:

fsbl.h
fsbl_handoff.S
fsbl_hooks.c
fsbl_hooks.h
image_mover.c
image_mover.h
lscript.ld
main.c
pcap.c
pcap.h
qspi.c
qspi.h
translation_table.S
xil_exception.c

上述文件都放在FSBL工程的src目录下。引用的BSP工程,是普通FSBL工程的BSP工程。

请在FSBL工程里设置里,定义宏FSBL_DEBUG_INFO,DDRLESS_XIP_SYSTEM 。

3. C语言Application

C语言Application更改的文件如下:

Application.c
lscript.ld
startup.s
TimerApp.c
xil_exception.c
上述文件都放在C语言Application工程的src目录下。
引用的BSP工程,是普通Application工程的BSP工程。

4. C++语言Application

C++语言Application更改的文件如下:

app.cc
copyRO.cc
cpu_init.S
lscript.ld
startup.s
xil_exception.c
上述文件都放在C++语言Application工程的src目录下。
引用的BSP工程,是普通Application工程的BSP工程。

5. 启动文件

制作启动文件时,必须声明FSBL在Flash里执行,也就是xip_mode;也必须指定各个部分在Flash的地址,它对应软件的链接脚本一致。

FSBL的链接脚本指定了FSBL占用Flash的位置从0x2000开始,所以启动文件的bootgen.bif也指定FSBL从Flash的0x2000开始。
应用程序的链接脚本指定了FSBL占用Flash的位置从0x700000开始,所以启动文件的bootgen.bif也指定应用程序从Flash的0x700000开始。

5.1. 启动文件的bootgen.bif

//arch = zynq; split = false; format = BIN
the_ROM_image:
{
[bootloader, xip_mode, offset = 0x2000]C:/prj/fsbl_xip_v183.elf
[offset = 0x200000]C:/prj/design_noddr_wrapper.bit
[offset = 0x700000]C:/prj//Application.elf
}

6. 常见错误

在SDK里,重新指定文件名后,xip_mode会被删除。即使指定Application的ELF文件,FSBL的xip_mode属性也会被删除。如果在FSBL没有xip_mode属性的情况下直接制作启动文件,烧写后FSBL无法启动,即使定义了FSBL_DEBUG_INFO,也不会有任何打印。在重新指定文件名后,用文本编辑器打开对应的.bif文件,添加xip_mode属性,再创建启动文件,才能正常启动。

7. 已知问题

7.1. 调试

XIP模式的代码,无法单步调试。
调试器下载代码时,会按ELF中的地址下载。调试器假设代码使用的存储器是DDR。因为指令和只读数据在Flash里,所以无法下载。单步调试时,会修改指令,由于指令在Flash里,也无法修改。

7.2. FSBL编译错误

编译FSBL出现下列错误,可以忽略:

ld.exe: FSBL_XIP.elf: section `.data' can't be allocated in segment 0

7.3. C++语言Application编译错误

编译C++语言Application出现下列错误,可以忽略:

ld.exe: Application_Cpp.elf: section `.data' can't be allocated in segment 0

7.4. 烧写Flash

烧写Flash的时候必须指定一个FSBL文件。为了初始化单板,烧写Flash前必须运行这个FSBL,它要初始化QSPI等。因此必须修改FSBL的main.c,使其在没有DDR基地址情况下,只是不执行DDR相关操作,继续初始化devcfg、QSPI等模块。具体请参考SDK 2018.3烧写没有DDR的单板的Flash。
编辑:hfy

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

    关注

    10

    文章

    1633

    浏览量

    147951
  • DDR
    DDR
    +关注

    关注

    11

    文章

    712

    浏览量

    65318
  • Xilinx
    +关注

    关注

    71

    文章

    2167

    浏览量

    121314
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136710
收藏 人收藏

    评论

    相关推荐

    Vivado SDK软件

    请问有谁用过Xilinx公司的软件Vivado,请问做软件驱动设计的时候如何不使用它的SDK软件而成功的转用keil之类的软件
    发表于 11-12 09:38

    vivado lanuch SDK 时的问题

    vivado lanuch SDK 时的问题
    发表于 02-02 15:24

    SDK无法从Vivado 2016.1启动

    我在Ubuntu 16.04上安装了Vivado 2016.1,并在安装时包含了SDK。当我执行文件 - >启动SDK时,没有任何反应。 Tcl控制台显示:信息:[Vivado 12-
    发表于 12-20 11:11

    vivado gui启动时找不到show sdk

    嗨朋友们,已安装SDK,但是从vivado gui启动时,找不到show sdk。我有疑虑。1)当我点击launch_sdk fron vivado
    发表于 01-02 14:54

    Vivado SDK BSP命令行怎么构建

    我有一个Vivado SDK生成的BSP,我试图为基于命令行的构建设置,但SDK生成的Makefile似乎缺少实际复制必要的IP源和头文件的预暂存步骤。在EDK世界中,这是通过从Makefile调用
    发表于 03-12 10:44

    Vivado运行良好,但无法打开SDK是怎么回事

    了2016.2。 Vivado运行良好,但我们似乎无法打开SDK。我们尝试从Vivado内部启动,当它没有工作时,我们尝试从命令行。在终端内它似乎运行成功,但SDK永远不会打开。不确定
    发表于 05-26 12:32

    为什么不用2017.4或者2018.3呢?最稳定的vivado版本是哪一种?

    很多开发人员都经历过使用不稳定开发环境导致奇怪问题的经历,为了避免大家重走冤枉路,集众多开发工程师智慧,寻找最稳定的vivado版本,为什么不用2017.4,或者2018.3呢?
    发表于 06-24 09:31

    求分享vivado2018.3破解版

    请问,哪位朋友有vivado2018.3破解版,谢谢!
    发表于 08-24 09:01

    从任何SDK示例生成完全非xip应用程序的步骤是什么?

    从任何 SDK 示例生成完全非 xip 应用程序的步骤是什么?我需要将它与 NAND 闪存一起使用。到目前为止我所拥有的:
    发表于 03-28 08:20

    Vivado 2018.3 report_qor_suggestions怎么用

    Constraint Set里(Vivado支持.tcl文件作为约束文件,添加时将文件类型切换为.tcl即可,如图6所示)。
    的头像 发表于 01-15 16:48 5757次阅读
    <b class='flag-5'>Vivado</b> <b class='flag-5'>2018.3</b> report_qor_suggestions怎么用

    关于Vivado 2019.1的Dashboard功能详解

    关于Vivado Dashboard的功能可阅读这篇文章(Vivado 2018.3这个Gadget你用了吗)Vivado 2019.1的Dashboard功能进一步增强。
    的头像 发表于 06-12 14:49 8367次阅读
    关于<b class='flag-5'>Vivado</b> 2019.1的Dashboard功能详解

    结合vivadosdk开发工具记录

    vivado搭建一个简单PS 的工程(记得勾选uart),生成bit,导出硬件,启动sdk,新建helloworld的工程就行。然后跑一下,看串口是否能打印helloworld。如果可以,这就成功搭建工程了。
    的头像 发表于 07-05 10:10 2721次阅读

    如何建立Vivado工程以及硬件配置

    注意:目前这个是Micrium官网的最新版本,该版本支持Vivado2019.1。但测试使用的是Vivado2018.3
    的头像 发表于 08-01 11:53 2911次阅读

    XIP是什么?XIP运行有什么要求?XIP的优缺点

    XIP是什么?XIP运行有什么要求?XIP的优缺点  XIP是指可执行代码在存储器运行的一项威廉希尔官方网站 ,其全称为eXecute In Place。XIP
    的头像 发表于 10-29 16:28 4583次阅读

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

    本博客提供了基于2023.2 Vivado的参考工程,展示如何使用Microblaze 地执行(XIP)程序,并提供一个简单的bootloader。
    的头像 发表于 10-29 14:23 315次阅读
    使用<b class='flag-5'>Vivado</b>通过AXI Quad SPI实现<b class='flag-5'>XIP</b>功能