有些應(yīng)用中,單板沒(méi)有DDR,OCM又不夠存儲(chǔ)所有數(shù)據(jù)和指令。這種情況下,Xilinx提供了參考設(shè)計(jì)Zynq-7000 AP SoC Boot - Booting and Running Without External Memory,把代碼和只讀數(shù)據(jù)放在QSPI Flash中運(yùn)行程序,這就是execute in place (XIP)。
上述XIP參考設(shè)計(jì)工作正常,但是只更新到了Vivado/SDK 2017.3,不匹配當(dāng)前大部分應(yīng)用中的工具版本。另外,上述XIP參考設(shè)計(jì)難于理解,也難于移植到其它單板。舊版本XIP參考設(shè)計(jì)的缺點(diǎn)。
1. XIP參考設(shè)計(jì)工具版本舊。
2. XIP參考設(shè)計(jì)改動(dòng)的文件很多。
3. XIP的相關(guān)代碼沒(méi)有單獨(dú)標(biāo)示出來(lái)。
4. 有些改動(dòng)還在BSP工程里,重新生成BSP工程,會(huì)被覆蓋。
為了便于使用,我把XIP參考設(shè)計(jì)更新到Vivado/SDK 2018.3,并減少特殊文件,使用宏DDRLESS_XIP_SYSTEM包含所有XIP代碼。改動(dòng)后,所有與XIP相關(guān)的文件在FSBL或者Application的工程src目錄下。所以SDK 2018.3版XIP參考設(shè)計(jì)具有以下優(yōu)點(diǎn)。
1. XIP參考設(shè)計(jì)工具版本新。
2. XIP參考設(shè)計(jì)改動(dòng)的文件更少。
3. XIP的相關(guān)代碼單獨(dú)標(biāo)示。
4. 便于移植2018.3版XIP參考設(shè)計(jì)到其它單板。
5. 便于移植2018.3版XIP參考設(shè)計(jì)到其它工具版本。
1. Vivado 工程
Zynq-7000 AP SoC Boot - Booting and Running Without External Memory提供了TCL腳本project.tcl、system_top.tcl,用于恢復(fù)硬件工程。
把其中的版本號(hào),從2017.3改為2018.3后,可以使用Vivado 2018.3執(zhí)行project.tcl創(chuàng)建工程。
但是恢復(fù)出來(lái)的硬件工程,仍然使能了DDR控制器。建議在Vivado工程里禁止DDR控制器后,再編譯硬件工程,導(dǎo)出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工程。
請(qǐng)?jiān)贔SBL工程里設(shè)置里,定義宏FSBL_DEBUG_INFO,DDRLESS_XIP_SYSTEM 。
3. C語(yǔ)言Application
C語(yǔ)言Application更改的文件如下:
Application.c
lscript.ld
startup.s
TimerApp.c
xil_exception.c
上述文件都放在C語(yǔ)言Application工程的src目錄下。
引用的BSP工程,是普通Application工程的BSP工程。
4. C++語(yǔ)言Application
C++語(yǔ)言Application更改的文件如下:
app.cc
copyRO.cc
cpu_init.S
lscript.ld
startup.s
xil_exception.c
上述文件都放在C++語(yǔ)言Application工程的src目錄下。
引用的BSP工程,是普通Application工程的BSP工程。
5. 啟動(dòng)文件
制作啟動(dòng)文件時(shí),必須聲明FSBL在Flash里執(zhí)行,也就是xip_mode;也必須指定各個(gè)部分在Flash的地址,它對(duì)應(yīng)軟件的鏈接腳本一致。
FSBL的鏈接腳本指定了FSBL占用Flash的位置從0x2000開(kāi)始,所以啟動(dòng)文件的bootgen.bif也指定FSBL從Flash的0x2000開(kāi)始。
應(yīng)用程序的鏈接腳本指定了FSBL占用Flash的位置從0x700000開(kāi)始,所以啟動(dòng)文件的bootgen.bif也指定應(yīng)用程序從Flash的0x700000開(kāi)始。
5.1. 啟動(dòng)文件的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. 常見(jiàn)錯(cuò)誤
在SDK里,重新指定文件名后,xip_mode會(huì)被刪除。即使指定Application的ELF文件,F(xiàn)SBL的xip_mode屬性也會(huì)被刪除。如果在FSBL沒(méi)有xip_mode屬性的情況下直接制作啟動(dòng)文件,燒寫(xiě)后FSBL無(wú)法啟動(dòng),即使定義了FSBL_DEBUG_INFO,也不會(huì)有任何打印。在重新指定文件名后,用文本編輯器打開(kāi)對(duì)應(yīng)的.bif文件,添加xip_mode屬性,再創(chuàng)建啟動(dòng)文件,才能正常啟動(dòng)。
7. 已知問(wèn)題
7.1. 調(diào)試
XIP模式的代碼,無(wú)法單步調(diào)試。
調(diào)試器下載代碼時(shí),會(huì)按ELF中的地址下載。調(diào)試器假設(shè)代碼使用的存儲(chǔ)器是DDR。因?yàn)橹噶詈椭蛔x數(shù)據(jù)在Flash里,所以無(wú)法下載。單步調(diào)試時(shí),會(huì)修改指令,由于指令在Flash里,也無(wú)法修改。
7.2. FSBL編譯錯(cuò)誤
編譯FSBL出現(xiàn)下列錯(cuò)誤,可以忽略:
ld.exe: FSBL_XIP.elf: section `.data' can't be allocated in segment 0
7.3. C++語(yǔ)言Application編譯錯(cuò)誤
編譯C++語(yǔ)言Application出現(xiàn)下列錯(cuò)誤,可以忽略:
ld.exe: Application_Cpp.elf: section `.data' can't be allocated in segment 0
7.4. 燒寫(xiě)Flash
燒寫(xiě)Flash的時(shí)候必須指定一個(gè)FSBL文件。為了初始化單板,燒寫(xiě)Flash前必須運(yùn)行這個(gè)FSBL,它要初始化QSPI等。因此必須修改FSBL的main.c,使其在沒(méi)有DDR基地址情況下,只是不執(zhí)行DDR相關(guān)操作,繼續(xù)初始化devcfg、QSPI等模塊。具體請(qǐng)參考SDK 2018.3燒寫(xiě)沒(méi)有DDR的單板的Flash。
編輯:hfy
-
FlaSh
+關(guān)注
關(guān)注
10文章
1644瀏覽量
148738 -
DDR
+關(guān)注
關(guān)注
11文章
715瀏覽量
65556 -
Xilinx
+關(guān)注
關(guān)注
71文章
2171瀏覽量
122205 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137801
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Vivado SDK軟件
SDK無(wú)法從Vivado 2016.1啟動(dòng)
從vivado gui啟動(dòng)時(shí)找不到show sdk
Vivado SDK BSP命令行怎么構(gòu)建
Vivado運(yùn)行良好,但無(wú)法打開(kāi)SDK是怎么回事
為什么不用2017.4或者2018.3呢?最穩(wěn)定的vivado版本是哪一種?
從任何SDK示例生成完全非xip應(yīng)用程序的步驟是什么?
Vivado 2018.3 report_qor_suggestions怎么用
![<b class='flag-5'>Vivado</b> <b class='flag-5'>2018.3</b> report_qor_suggestions怎么用](https://file.elecfans.com/web1/M00/82/C0/pIYBAFw9nuGADes3AABA21PUgNA221.png)
關(guān)于Vivado 2019.1的Dashboard功能詳解
![關(guān)于<b class='flag-5'>Vivado</b> 2019.1的Dashboard功能詳解](https://file.elecfans.com/web1/M00/95/BF/pIYBAF0AoWmAJyj2AAAU3BNbyB4224.png)
結(jié)合vivado的sdk開(kāi)發(fā)工具記錄
如何建立Vivado工程以及硬件配置
XIP是什么?XIP運(yùn)行有什么要求?XIP的優(yōu)缺點(diǎn)
使用Vivado通過(guò)AXI Quad SPI實(shí)現(xiàn)XIP功能
![使用<b class='flag-5'>Vivado</b>通過(guò)AXI Quad SPI實(shí)現(xiàn)<b class='flag-5'>XIP</b>功能](https://file1.elecfans.com/web1/M00/F3/E2/wKgZoWcggI2Ady3sAAAcY8ufVo8103.png)
評(píng)論