在一些工業(yè)應(yīng)用中不管出于成本還是功耗又或者集成難度可能不需要DDR,這些系統(tǒng)只需要很小的內(nèi)存空間來存儲和執(zhí)行其應(yīng)用程序,對于這些系統(tǒng)OCM可以滿足其與存儲器相關(guān)的需求。用戶只需要從OCM執(zhí)行引導(dǎo)程序和應(yīng)用程序。如果OCM大小也不足以存儲和執(zhí)行應(yīng)用程序,用戶也可以從QSPI Flash來執(zhí)行應(yīng)用程序代碼,但是從flash中獲取指令會比從OCM中執(zhí)行要慢,那本文主要介紹在OCM空間不足時從flash執(zhí)行應(yīng)用程序時如何提高性能。
1.參考設(shè)計(jì)主要包含以下幾點(diǎn):
- FSBL XIP 模式execution。
- 提供示例例程以在 FSBL 中將數(shù)據(jù)/代碼預(yù)加載到 L2 緩存。
- 顯示 Zynq-7000 SOC 中的 L2 緩存鎖定功能。
- PL 中 AXI 定時器的參考設(shè)計(jì)。
- 顯示中斷工作概念。
- C 和 C++ 應(yīng)用程序在 L2 緩存鎖定模式下運(yùn)行。
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代碼比較大時需要做一個循環(huán)分塊讀FPGA代碼再通過PCAP進(jìn)行加載,不然會出現(xiàn)data abort的異常

5.移植到新的Vitis版本
Xilinx官方示例工程最新 的版本是基于SDK的2019.1,目前IDE已經(jīng)升級到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工具進(jìn)行打包,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的屬性
審核編輯 黃昊宇
評論