booting and running without external memory-9479威尼斯

booting and running without external memory-ddrles

      在一些工业应用中不管出于成本还是功耗又或者集成难度可能不需要ddr,这些系统只需要很小的内存空间来存储和执行其应用程序,对于这些系统ocm可以满足其与存储器相关的需求。用户只需要从ocm执行引导程序和应用程序。如果ocm大小也不足以存储和执行应用程序,用户也可以从qspi flash来执行应用程序代码,但是从flash中获取指令会比从ocm中执行要慢,那本文主要介绍在ocm空间不足时从flash执行应用程序时如何提高性能。

在xilinx官方也是有这部分的详细介绍,详情可以参考如下链接:

https://xilinx-wiki.atlassian.net/wiki/spaces/a/pages/18842377/zynq-7000 ap soc boot - booting and running without external memory tech ti


1.参考设计主要包含以下几点:

  • fsbl xip 模式execution。

  • 提供示例例程以在 fsbl 中将数据/代码预加载到 l2 缓存。

  • 显示 zynq-7000 soc 中的 l2 缓存锁定功能。

  • pl 中 axi 定时器的参考设计。

  • 显示中断工作概念。

  • c 和 c 应用程序在 l2 缓存锁定模式下运行。



2.ocm memory map

blob.png


3.主要修改的部分

main.c - disable ddr checking

blob.png


xil_exception.c - add attribute xvtable

blob.png

lscript.ld

blob.png

image_mover.c-usel2 cache to lock code

blob.png


4.fpga代码量较大处理

如果fpga代码比较大时需要做一个循环分块读fpga代码再通过pcap进行加载,不然会出现data abort的异常

blob.png


5.移植到新的vitis版本

xilinx官方示例工程最新 的版本是基于sdk的2019.1,目前ide已经升级到vitis版本,下面介绍一下升级到最新vitis版本的大概步骤:


a.新建一个fsbl application project

blob.png


b.拷贝参考工程中的文件替换新建工程中文件,列表如下:

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

注:sdk和vitis的bsp目录稍有不同,更新xil_exception.c的时候需要注意,

vitis的目录在zynq_fsbl_bsp/ps7_cortexa9_0/libsrc/standalone_v7_2/src/下

6.打包boot.bin

使用bootgen工具进行打包,bif配置文件如下:


//arch = zynq; split = false; format = bin

the_rom_image:

{

[bootloader,xip_mode,offset = 0x1700]fsbl_xip.elf

[offset = 0x200000]system.bit

[offset = 0x700000]application.elf

}

注:bootloader需要加上xip_mode的属性



如果您有ddrless方面问题,欢迎联系:

simonyang@comtech.com.cn

charlesxu@comtech.com.cn 


公司地址:深圳市南山区高新南九道55号微软科通大厦10楼    客服电话:( 86)755-26743210    邮箱:cs@comtech.com.cn

© 9479威尼斯 copyright 2018 www.comtech.com.cn | |

网站地图