chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

解析Zynq的加載方式

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-05-09 10:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

FPGA - Zynq - 加載 - BootROM

題外話

BootROM

BootROM Header Definition

BootROM Header Searching and Loading

總結(jié)

題外話

第一次使用Markdown編寫(xiě)博客,之前都是直接用word或者onenote寫(xiě)好之后復(fù)制到博客上,發(fā)現(xiàn)文字編排效果很差,不忍翻閱下去。所以轉(zhuǎn)投markdown懷抱。

這里將會(huì)新開(kāi)一個(gè)章節(jié),專(zhuān)門(mén)更新關(guān)于Zynq的一些心得,我希望能夠完成以下幾個(gè)方面:

6c20d514-cf2b-11ec-bce3-dac502259ad0.png

因此,我希望能夠通過(guò)Zynq片上強(qiáng)大的FPGA資源和ARM資源,來(lái)完成FPGA工程師和ARM工程師的協(xié)同工作,一般來(lái)說(shuō)FPGA部分來(lái)完成所有高速接口驅(qū)動(dòng)以及一些高速算法(并行獨(dú)立或者串行復(fù)用),然后ARM部分來(lái)完成通信協(xié)議的實(shí)現(xiàn),不管是私有的(如用戶(hù)自定義的串口協(xié)議的封包和解包)或者標(biāo)準(zhǔn)的(如TCP/IP或者USB等),以及FPGA的流程控制,錯(cuò)誤狀態(tài)控制還有遠(yuǎn)程更新控制等。

為了完成上述化學(xué)反應(yīng),一個(gè)很重要的方面就是如何協(xié)調(diào)ARM和FPGA(都是Zynq片上的資源),這個(gè)其實(shí)很多開(kāi)發(fā)板的學(xué)習(xí)手冊(cè)都已經(jīng)給出了答案,那就是應(yīng)用AXI4總線。那剩下的問(wèn)題就是,如何實(shí)現(xiàn)Multiboot以及fallback。

因?yàn)樵赟6或者其他7系列的FPGA中,是有一套非常成熟的FPGA加載機(jī)制(Xilinx有很詳細(xì)的指導(dǎo)手冊(cè)),但是來(lái)到Zynq時(shí)代,這個(gè)方式變了。為什么呢?因?yàn)楝F(xiàn)在zynq上有ARM了,所有的加載工作實(shí)際上可以借由ARM來(lái)實(shí)現(xiàn),這無(wú)疑也給用戶(hù)帶來(lái)了靈活的操作空間,即用戶(hù)可以自己整一套屬于自己的,滿(mǎn)足要求的加載方式,這也是本文研究的重點(diǎn):解析Zynq的加載方式。

這里將通過(guò)對(duì)比Zynq的TRM和FSBL源碼,來(lái)一步一步解析Zynq的加載流程,如下所示

6c3affb6-cf2b-11ec-bce3-dac502259ad0.png

運(yùn)行流程簡(jiǎn)單的說(shuō)就是:

觸發(fā)條件 POR或者non-POR

ARM加載BootROM,這個(gè)程序停留在Zynq內(nèi)部ROM,用戶(hù)無(wú)法修改,用于實(shí)現(xiàn)搜索FLASH中的BootROM header,然后根據(jù)Header(這個(gè)header在整個(gè)FLASH中至少需要一個(gè),Xilinx的軟件會(huì)自動(dòng)整合出來(lái)這哦頭文件)信息,將FSBL加載到OCM(on chip memory)

開(kāi)始運(yùn)行FSBL,進(jìn)一步加載Bitstream(PL用,如果有bit文件在FLASH中的話)或者其他鏡像(PS用,裸機(jī)或者帶系統(tǒng))

run 上述的其他鏡像,裸機(jī)或者RTOS的話直接run,linux的話需要先運(yùn)行u-boot

BootROM

永遠(yuǎn)問(wèn)自己,我們的芯片(在這里是Zynq)在POR復(fù)位或者non-POR 復(fù)位后,ARM是怎么樣一步一步最終來(lái)到用戶(hù)的main.c,對(duì)FPGA工程師而言,就是FPGA是怎么完成初始化任務(wù)的。

這里我們不妨寫(xiě)的詳細(xì)一點(diǎn),將所有的技術(shù)細(xì)節(jié)都呈現(xiàn)出來(lái)。這就需要我們打開(kāi)Zynq的TRM:

6c518506-cf2b-11ec-bce3-dac502259ad0.png

可以看到,在non-POR或者POR以后,Zynq會(huì)完成:

鎖存配置引腳,如下圖所示,

6c8fcdb6-cf2b-11ec-bce3-dac502259ad0.png

2 初始化PLL(根據(jù)復(fù)位時(shí)鎖存的進(jìn)行選擇初始化或者不初始化)

3 初始化APU(由兩個(gè)ARM CPU構(gòu)成)

4 ROM CRC check

5 初始化boot用的引腳(Q-spi,NOR,SD,NAND等等),根據(jù)上一步鎖 存的配置引腳進(jìn)行選擇。

6 出發(fā)并等待PL完成初始化,前提是PL部分上電已經(jīng)完成的話。如果此時(shí)PL8 上電沒(méi)有完成,這這一步直接跳過(guò)

7 開(kāi)始搜索BootROM Header,如果搜索到了一個(gè)合法的header,就會(huì)基于這個(gè)header加載FSBL(加密或不加密)

8 被加載的FSBL可能是XIP(execute in place,在存儲(chǔ)器里直接運(yùn)行)或者是被加載到了DDR中,加載完畢后BootROM完成任務(wù),將控制權(quán)交給了FSBL。

通過(guò)上面的流程描述,我們可以獲得一個(gè)表觀的理解,原來(lái)Zynq加載蠻復(fù)雜的。因?yàn)閆ynq里面包含了PS(APU,即兩個(gè)ARM Cortex-A9 cpu)和PL(根據(jù)系列的不同,可能是A7系列,也可能是K7系列)兩個(gè)部分。

這兩個(gè)部分的加載,會(huì)根據(jù)用戶(hù)選擇的不同而不同,如下所示:

6ca34f26-cf2b-11ec-bce3-dac502259ad0.png

從上面可以知道,PS的加載和PL的加載并不是完全獨(dú)立的,如下圖所示

6cbaa8ec-cf2b-11ec-bce3-dac502259ad0.png

6cd4d0be-cf2b-11ec-bce3-dac502259ad0.png

Note 1: if PL was power-up(needed for JTAG or secure mode), BootROM will initial PL then wait until PL complete initialization

如上流程,就是整個(gè)PS和PL加載的過(guò)程,基本上我們只需要保證合適的文件被正確的燒寫(xiě)到FLASH中,那么整個(gè)加載就會(huì)正確的跑下去,這個(gè)所謂的合適的文件包括:

1 BootROM Header, Xilinx的工具自動(dòng)生成

2 FSBL,Xilinx由范例工程

3 BitStream,用戶(hù)根據(jù)項(xiàng)目自定義的PL固件,即ARM固件

4 Application.elf,用戶(hù)根據(jù)項(xiàng)目自定義的PS固件,即FPGA固件

整個(gè)BootROM是寫(xiě)死在Zynq的片上ROM中,其中最重要,同時(shí)也會(huì)影響后面FSBL執(zhí)行的,就是BootROM Header的searching 和 loading。

BootROM Header Definition

類(lèi)似于A7或者S6系列的multiboot過(guò)程需要一個(gè)header文件,它用于實(shí)現(xiàn):

1 同步,F(xiàn)LASH位數(shù)自動(dòng)檢測(cè)

2 指定 Golden所需的Bin在FLASH中的Offset

3 指定Function所需的Bin在FLASH中的Offset

4 發(fā)送PROGRAM-B指令,讓FPGA開(kāi)始加載Bin

在Zynq系列中,這個(gè)Header的功能被進(jìn)一步的擴(kuò)大,下面我們來(lái)看一下這個(gè)Header的定義吧:

6ced9ca2-cf2b-11ec-bce3-dac502259ad0.png

6d06a1ac-cf2b-11ec-bce3-dac502259ad0.png

接下來(lái)逐條來(lái)解釋其作用,同時(shí)留下一點(diǎn)伏筆,因?yàn)檫@些最終都會(huì)被FSBL所引用。

1 Interrupt Table for Execution-in-Place — 0x000 to 0x01C

這些數(shù)據(jù)用于XIP,這里不討論

2 Width Detection — 0x020

用于檢測(cè)Qspi的位寬到底是X1,X2,還是X4,如果是X8,還需要下面那個(gè) Image Identification 寄存器

3 Image Identification — 0x024

固定為0x584C4E58,‘XLNX’,還可用于X8檢測(cè)

4 Encryption Status — 0x028

配置FSBL/User code到底是加密還是不加密

5 FSBL/User Defined — 0x02C

用于保存Header的版本,應(yīng)該也是xilinx自動(dòng)生成的

6 Source Offset — 0x030

用于保存FSLB/User code image被保存的offset地址,這個(gè)Offset是相對(duì)于Header的起始位置而言的,這個(gè)在FSBL中會(huì)有體現(xiàn),這留個(gè)記號(hào)

7 Length of Image — 0x034

用于保存被加載的FSLB/User code image的大小,<=192KB。該數(shù)據(jù)=0時(shí)意味著不需要copy,是XIP。

8 FSB Load Address— 0x038

FSLB/User code image copy的目標(biāo)地址,因?yàn)樵搃mage是存在FLASH中的,需要被復(fù)制到其他OCM中去。

9 Start of Execution — 0x03C

copy完以后,cpu需要從哪里開(kāi)始執(zhí)行第一條代碼,<= 0x30000,也即是192KB。這個(gè)很重要,會(huì)在介紹FSBL源碼的時(shí)候重新在驗(yàn)證并確認(rèn)這個(gè)功能。然而這樣地址,或者長(zhǎng)度之類(lèi)的,都是通過(guò)配置Xilinx提供的工具自動(dòng)打包生成的。

10 Total Image Length — 0x040

load進(jìn)OCM的總長(zhǎng)度,這個(gè)長(zhǎng)度會(huì)大于等于Length of Image — 0x034,因?yàn)樵诩用苣J较?,還會(huì)包含HMAC頭文件之類(lèi)的。

11 QSPI Config Word — 0x044

固定為0x01

12 Header Checksum — 0x048

0x020 to 0x044的checksum,用于驗(yàn)證Header是否完整,F(xiàn)SBL會(huì)應(yīng)用到

13 FSBL/User Defined— 0x04C to 0x097

自定義數(shù)據(jù)

14 ???Boot Header Table Offset???— 0x098

TRM中這個(gè)數(shù)據(jù)的命名好像有問(wèn)題

15 QSPI Config Word — 0x09C

指向Image Header Table,這個(gè)Table里面會(huì)記錄整個(gè)FLASH里面除了FSBL以外,還有幾個(gè)image,包括Bitstream,elf等等。每一個(gè)image會(huì)有一個(gè)Header(不是這里的BootROM Header,而是專(zhuān)門(mén)的Header,F(xiàn)SBL里面在介紹),所有的Header組成一個(gè)Table。

16 Register Initialization Parameters — 0x0A0 to 0x89C

利用Add+Data的方式,直接對(duì)某個(gè)地址進(jìn)行數(shù)據(jù)寫(xiě)操作,應(yīng)該非常高效,估計(jì)也是xilinx工具自動(dòng)生成的。

17 FSBL/User Defined — 0x8A0 - 0x8BF

18 FSBL Image or User Code Start Address — 0x8C0

FSBL Image or User Code 實(shí)際可以放置的起始地址,也就是上面的Source Offset — 0x030 >= 0x8C0

介紹了這么多,估計(jì)一時(shí)也不好消化,沒(méi)有關(guān)系,上面黃色標(biāo)記了的數(shù)據(jù),會(huì)在FSBL中隆重的重新介紹。

BootROM Header Searching and Loading

回到老話題,BootROM會(huì)利用上述BootROM Header把FSBL拷貝到OCM中,然后讓FSBL接管CPU開(kāi)始run。而實(shí)際上FSBL也會(huì)應(yīng)用上面的BootROM Header文件去尋找下一步所需的image,包括BitStream等,這個(gè)以后再說(shuō)。

那么BootROM 是如何找到BootROM Header的呢?

6d28fee6-cf2b-11ec-bce3-dac502259ad0.png

1 BootROM會(huì)首先在FLASH的0x00處尋找Header,依據(jù)就是Image Identification parameter – 0x024 是否等于 ‘XLNX’ . 其次就是檢查Header Checksum — 0x048

2 如果都沒(méi)有問(wèn)題,就按照Header內(nèi)容將FSBL的code加載到OCM的指定位置,然后run。

3 如果有問(wèn)題,將Multiboot reg 加 1 ,然后自動(dòng)發(fā)送non-POR,下一次運(yùn)行的BootROM下一個(gè)32KB來(lái)尋找Header ,并重新檢查是否滿(mǎn)足條件。

4 Multiboot reg在這個(gè)寄存器不會(huì)被non-POR清除,會(huì)被保留到下一次的Boot中去

因此,BootROM Header 必須放置在32KB的整數(shù)倍位置,這個(gè)應(yīng)該是Xilinx的工具自動(dòng)完成的

這個(gè)檢查checksum的操作也同樣的在FSBL中被執(zhí)行,以后在介紹

總結(jié)

介紹了這么多,總結(jié)一下:

重啟后自動(dòng)執(zhí)行BootROM

BootROM會(huì)自動(dòng)尋找 BootROM Header

找到Header后,會(huì)將FSBL加載到OCM中

然后將CPU的PC指針指向目標(biāo)地址,同時(shí)FSBL開(kāi)始run

審核編輯 :李倩

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

    關(guān)注

    1655

    文章

    22286

    瀏覽量

    630297
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    625

    瀏覽量

    49239
  • bootrom
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    3941

原文標(biāo)題:FPGA - Zynq - 加載 - BootRom

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    圖撲軟件 3D 場(chǎng)景預(yù)加載應(yīng)用實(shí)現(xiàn)

    預(yù)加載是在進(jìn)入正式場(chǎng)景之前提前加載所需模型、材質(zhì)、圖片等資源的技術(shù)手段,其核心價(jià)值在于消除資源加載等待,確保場(chǎng)景首次渲染即可完整呈現(xiàn),從而提供無(wú)縫、流暢的用戶(hù)體驗(yàn)。在復(fù)雜的 Web 3D 可視化
    的頭像 發(fā)表于 12-01 16:04 ?79次閱讀
    圖撲軟件 3D 場(chǎng)景預(yù)<b class='flag-5'>加載</b>應(yīng)用實(shí)現(xiàn)

    Linux內(nèi)核模塊的加載機(jī)制

    ,比如當(dāng)插入一個(gè)新設(shè)備時(shí),udev會(huì)根據(jù)設(shè)備信息自動(dòng)加載對(duì)應(yīng)的驅(qū)動(dòng)模塊。這是通過(guò)uevent事件和用戶(hù)空間的工具配合實(shí)現(xiàn)的,提高了設(shè)備的即插即用能力。 3、解析加載.ko文件 .ko文件為標(biāo)準(zhǔn)ELF對(duì)象
    發(fā)表于 11-25 06:59

    ZYNQ PS與PL數(shù)據(jù)交互方式

    ZYNQ SoC 的 PS (Processing System) 和 PL (Programmable Logic) 之間的數(shù)據(jù)交互是系統(tǒng)設(shè)計(jì)的核心。
    的頭像 發(fā)表于 10-15 10:33 ?535次閱讀
    <b class='flag-5'>ZYNQ</b> PS與PL數(shù)據(jù)交互<b class='flag-5'>方式</b>

    RTthread怎么加載zynq的支持包?

    RTthread有xilinx zynq的芯片支持包了么,SDK管理器里面怎么下載ZYNQ的支持包呢?求助
    發(fā)表于 09-23 06:05

    ZYNQ UltraScalePlus RFSOC QSPI Flash固化常見(jiàn)問(wèn)題說(shuō)明

    璞致 ZYNQ UltraScalePlus RFSOC QSPI Flash 固化常見(jiàn)問(wèn)題說(shuō)明
    發(fā)表于 08-08 15:49 ?0次下載

    CH367連接zynq問(wèn)題

    通過(guò)四線SPI連接CH367和zynq時(shí),CH367使用CH367StreamSPI函數(shù)設(shè)置為四線模式,然后設(shè)置SDI為MISO,SDX為MOSI,SCS和SCL為片選和時(shí)鐘
    發(fā)表于 07-03 10:10

    鴻蒙5開(kāi)發(fā)寶藏案例分享---Web加載時(shí)延優(yōu)化解析

    : Network泳道 :查看資源加載時(shí)序 Main泳道 :監(jiān)控JS/CSS解析阻塞 Performance面板 :定位長(zhǎng)任務(wù)(Long Tasks) ??** 四大優(yōu)化方向 + 代碼實(shí)戰(zhàn)** 以下
    發(fā)表于 06-12 17:11

    炭紙及雙極板電阻儀力值加載系統(tǒng)的工作原理與關(guān)鍵技術(shù)?

    工作原理? 在炭紙及雙極板電阻儀中,力值加載系統(tǒng)承擔(dān)著向炭紙或雙極板樣品施加特定壓力的重要任務(wù)。其核心工作原理基于力的傳遞與控制機(jī)制。常見(jiàn)的力值加載系統(tǒng)采用電機(jī)驅(qū)動(dòng)絲杠的方式。電機(jī)運(yùn)轉(zhuǎn)時(shí),將電能轉(zhuǎn)化
    的頭像 發(fā)表于 03-25 09:17 ?500次閱讀
    炭紙及雙極板電阻儀力值<b class='flag-5'>加載</b>系統(tǒng)的工作原理與關(guān)鍵技術(shù)?

    從零開(kāi)始馴服Linux(一):ZYNQ-Linux啟動(dòng)文件構(gòu)建全解析

    本帖最后由 jf_85110202 于 2025-3-20 17:42 編輯 從零開(kāi)始馴服Linux(一):ZYNQ-Linux啟動(dòng)文件構(gòu)建全解析 ZYNQ系列芯片集成了ARM處理器
    發(fā)表于 03-20 16:48

    zynq通過(guò)什么接口去控制DLP?

    我是用ZYNQ控制DLP,DLP的投影,給sensor采集。我的問(wèn)題是zynq通過(guò)什么接口去控制DLP。DLP和sensor沒(méi)有物理連接,sensor會(huì)直接拍DLP的投影
    發(fā)表于 02-21 06:56

    DLP4710LC開(kāi)發(fā)模塊數(shù)據(jù)的加載方式是怎樣的?

    您好,最近購(gòu)買(mǎi)了貴司的DLP4710LC開(kāi)發(fā)模塊,我了解到其有32位輸入數(shù)據(jù)總線,我想知道數(shù)據(jù)的加載方式是怎樣的,就是這32位數(shù)據(jù)總線是如何控制1920×1080個(gè)像素的,他的工作流程是怎樣的,相關(guān)資料有嗎,謝謝。
    發(fā)表于 02-20 06:51

    ZYNQ基礎(chǔ)---AXI DMA使用

    前言 在ZYNQ中進(jìn)行PL-PS數(shù)據(jù)交互的時(shí)候,經(jīng)常會(huì)使用到DMA,其實(shí)在前面的ZYNQ學(xué)習(xí)當(dāng)中,也有學(xué)習(xí)過(guò)DMA的使用,那就是通過(guò)使用自定義的IP,完成HP接口向內(nèi)存寫(xiě)入和讀取數(shù)據(jù)的方式。同樣
    的頭像 發(fā)表于 01-06 11:13 ?3584次閱讀
    <b class='flag-5'>ZYNQ</b>基礎(chǔ)---AXI DMA使用

    Zynq UltraScale+ MPSoC數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 12-30 14:37 ?3次下載

    Stellaris引導(dǎo)加載程序用戶(hù)指南

    電子發(fā)燒友網(wǎng)站提供《Stellaris引導(dǎo)加載程序用戶(hù)指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-23 16:24 ?0次下載
    Stellaris引導(dǎo)<b class='flag-5'>加載</b>程序用戶(hù)指南

    solidworks正版軟件:永久版權(quán)和訂閱許可 兩種購(gòu)買(mǎi)方式解析和選擇

    SOLIDWORKS軟件分從購(gòu)買(mǎi)方式上劃分為永久版權(quán)的形式和訂閱即年付費(fèi)兩種方式,代理商碩迪科技向您詳細(xì)解析 SOLIDWORKS 的永久版權(quán)和訂閱許可的區(qū)別,各自的優(yōu)劣勢(shì)以及適合的應(yīng)用場(chǎng)景。以幫助您做出適合的決策。
    的頭像 發(fā)表于 12-16 16:45 ?2996次閱讀
    solidworks正版軟件:永久版權(quán)和訂閱許可 兩種購(gòu)買(mǎi)<b class='flag-5'>方式</b><b class='flag-5'>解析</b>和選擇