有些应用中,单板没有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。
安创主办2020世界半导体大会·自动驾驶分论坛在南京顺利召开
单片机中晶振的作用
网状网络的智能家居无线设计解决方案
ADIS16355芯片MEMS陀螺仪数据采集硬件设计
苹果承认iPhone12存在“绿屏”问题
基于Vivado/SDK 2018.3的XIP参考设计
应用笔记 | TSMaster核心功能之标定数据的管理
手机拍照为啥需要图像算法?
小米电视第二季度全球销量同比增长350%,市场表现远远超乎人们的认知
红米Note 7s跑分数据曝光单核性能为1637分多核性能为5384分
小米年度旗舰来袭:小米电视4国内发布时间曝光 锁定5月18日
R15星云特别版再现OPPO极致工艺_夏最“火”时尚配色手机现已开售
听诺基亚负责人Jane Ryggard,谈5G时代将有哪些杀手级应用
PathPartner利用4D成像雷达和摄像头融合技术开发出一款DMS的扩展系统
iOS11Beta5值得升级吗?iOS11 Beta5评测:系统流畅性大幅提升,修复BUG
聚焦 | 新技术“红”不过十年?半监督学习却成例外?
腾讯红魔游戏手机6即将正式发布 拥有独创TC补帧技术2.0
湖北移动部署的约7万个4G基站有效地降低了网络能耗
一加5?不将就?够不够一加范?
电容的基础知识和分类说明