在一些工業應用中不管出于成本還是功耗又或者集成難度可能不需要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
3.主要修改的部分
Main.c - Disable DDR checking
Xil_exception.c - Add attribute XVtable
Lscript.ld
Image_mover.c-UseL2 cache to lock code
4.FPGA代碼量較大處理
如果FPGA代碼比較大時需要做一個循環分塊讀FPGA代碼再通過PCAP進行加載,不然會出現data abort的異常
5.移植到新的Vitis版本
Xilinx官方示例工程最新 的版本是基于SDK的2019.1,目前IDE已經升級到VITIS版本,下面介紹一下升級到最新Vitis版本的大概步驟:
a.新建一個fsbl application project
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