0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于Vivado/SDK 2018.3的XIP參考設計

454398 ? 來源:博客園 ? 作者:HankFu ? 2020-10-09 10:09 ? 次閱讀

有些應用中,單板沒有DDR,OCM又不夠存儲所有數(shù)據(jù)和指令。這種情況下,Xilinx提供了參考設計Zynq-7000 AP SoC Boot - Booting and Running Without External Memory,把代碼和只讀數(shù)據(jù)放在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參考設計具有以下優(yōu)點。

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執(zhí)行project.tcl創(chuàng)建工程。

但是恢復出來的硬件工程,仍然使能了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里執(zhí)行,也就是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文件,F(xiàn)SBL的xip_mode屬性也會被刪除。如果在FSBL沒有xip_mode屬性的情況下直接制作啟動文件,燒寫后FSBL無法啟動,即使定義了FSBL_DEBUG_INFO,也不會有任何打印。在重新指定文件名后,用文本編輯器打開對應的.bif文件,添加xip_mode屬性,再創(chuàng)建啟動文件,才能正常啟動。

7. 已知問題

7.1. 調(diào)試

XIP模式的代碼,無法單步調(diào)試。
調(diào)試器下載代碼時,會按ELF中的地址下載。調(diào)試器假設代碼使用的存儲器是DDR。因為指令和只讀數(shù)據(jù)在Flash里,所以無法下載。單步調(diào)試時,會修改指令,由于指令在Flash里,也無法修改。

7.2. FSBL編譯錯誤

編譯FSBL出現(xiàn)下列錯誤,可以忽略:

ld.exe: FSBL_XIP.elf: section `.data' can't be allocated in segment 0

7.3. C++語言Application編譯錯誤

編譯C++語言Application出現(xiàn)下列錯誤,可以忽略:

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基地址情況下,只是不執(zhí)行DDR相關操作,繼續(xù)初始化devcfg、QSPI等模塊。具體請參考SDK 2018.3燒寫沒有DDR的單板的Flash。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FlaSh
    +關注

    關注

    10

    文章

    1635

    瀏覽量

    148089
  • DDR
    DDR
    +關注

    關注

    11

    文章

    712

    瀏覽量

    65363
  • Xilinx
    +關注

    關注

    71

    文章

    2167

    瀏覽量

    121513
  • C語言
    +關注

    關注

    180

    文章

    7605

    瀏覽量

    136934
收藏 人收藏

    評論

    相關推薦

    Vivado SDK軟件

    請問有誰用過Xilinx公司的軟件Vivado,請問做軟件驅(qū)動設計的時候如何不使用它的SDK軟件而成功的轉(zhuǎn)用keil之類的軟件
    發(fā)表于 11-12 09:38

    vivado lanuch SDK 時的問題

    vivado lanuch SDK 時的問題
    發(fā)表于 02-02 15:24

    SDK無法從Vivado 2016.1啟動

    我在Ubuntu 16.04上安裝了Vivado 2016.1,并在安裝時包含了SDK。當我執(zhí)行文件 - >啟動SDK時,沒有任何反應。 Tcl控制臺顯示:信息:[Vivado 12-
    發(fā)表于 12-20 11:11

    vivado gui啟動時找不到show sdk

    嗨朋友們,已安裝SDK,但是從vivado gui啟動時,找不到show sdk。我有疑慮。1)當我點擊launch_sdk fron vivado
    發(fā)表于 01-02 14:54

    Vivado SDK BSP命令行怎么構建

    我有一個Vivado SDK生成的BSP,我試圖為基于命令行的構建設置,但SDK生成的Makefile似乎缺少實際復制必要的IP源和頭文件的預暫存步驟。在EDK世界中,這是通過從Makefile調(diào)用
    發(fā)表于 03-12 10:44

    Vivado運行良好,但無法打開SDK是怎么回事

    了2016.2。 Vivado運行良好,但我們似乎無法打開SDK。我們嘗試從Vivado內(nèi)部啟動,當它沒有工作時,我們嘗試從命令行。在終端內(nèi)它似乎運行成功,但SDK永遠不會打開。不確定
    發(fā)表于 05-26 12:32

    為什么不用2017.4或者2018.3呢?最穩(wěn)定的vivado版本是哪一種?

    很多開發(fā)人員都經(jīng)歷過使用不穩(wěn)定開發(fā)環(huán)境導致奇怪問題的經(jīng)歷,為了避免大家重走冤枉路,集眾多開發(fā)工程師智慧,尋找最穩(wěn)定的vivado版本,為什么不用2017.4,或者2018.3呢?
    發(fā)表于 06-24 09:31

    求分享vivado2018.3破解版

    請問,哪位朋友有vivado2018.3破解版,謝謝!
    發(fā)表于 08-24 09:01

    從任何SDK示例生成完全非xip應用程序的步驟是什么?

    從任何 SDK 示例生成完全非 xip 應用程序的步驟是什么?我需要將它與 NAND 閃存一起使用。到目前為止我所擁有的:
    發(fā)表于 03-28 08:20

    Vivado 2018.3 report_qor_suggestions怎么用

    Constraint Set里(Vivado支持.tcl文件作為約束文件,添加時將文件類型切換為.tcl即可,如圖6所示)。
    的頭像 發(fā)表于 01-15 16:48 ?5769次閱讀
    <b class='flag-5'>Vivado</b> <b class='flag-5'>2018.3</b> report_qor_suggestions怎么用

    關于Vivado 2019.1的Dashboard功能詳解

    關于Vivado Dashboard的功能可閱讀這篇文章(Vivado 2018.3這個Gadget你用了嗎)Vivado 2019.1的Dashboard功能進一步增強。
    的頭像 發(fā)表于 06-12 14:49 ?8383次閱讀
    關于<b class='flag-5'>Vivado</b> 2019.1的Dashboard功能詳解

    結合vivadosdk開發(fā)工具記錄

    vivado搭建一個簡單PS 的工程(記得勾選uart),生成bit,導出硬件,啟動sdk,新建helloworld的工程就行。然后跑一下,看串口是否能打印helloworld。如果可以,這就成功搭建工程了。
    的頭像 發(fā)表于 07-05 10:10 ?2736次閱讀

    如何建立Vivado工程以及硬件配置

    注意:目前這個是Micrium官網(wǎng)的最新版本,該版本支持Vivado2019.1。但測試使用的是Vivado2018.3。
    的頭像 發(fā)表于 08-01 11:53 ?2936次閱讀

    XIP是什么?XIP運行有什么要求?XIP的優(yōu)缺點

    XIP是什么?XIP運行有什么要求?XIP的優(yōu)缺點? XIP是指可執(zhí)行代碼在存儲器運行的一項技術,其全稱為eXecute In Place。XIP
    的頭像 發(fā)表于 10-29 16:28 ?4674次閱讀

    使用Vivado通過AXI Quad SPI實現(xiàn)XIP功能

    本博客提供了基于2023.2 Vivado的參考工程,展示如何使用Microblaze 地執(zhí)行(XIP)程序,并提供一個簡單的bootloader。
    的頭像 發(fā)表于 10-29 14:23 ?364次閱讀
    使用<b class='flag-5'>Vivado</b>通過AXI Quad SPI實現(xiàn)<b class='flag-5'>XIP</b>功能