RM新时代网站-首页

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

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

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

一文搞懂軟核的固化、啟動和MultiBoot實(shí)現(xiàn)

FPGA技術(shù)江湖 ? 來源:FPGA技術(shù)江湖 ? 2024-12-07 11:23 ? 次閱讀

這也是《FPGA實(shí)現(xiàn)串口升級及MultiBoot》系列中的一篇文章,作為一個(gè)專題單獨(dú)出來說明。

本篇文章分為三個(gè)主題:固化、啟動和MultiBoot實(shí)現(xiàn)。

7708ccd2-b431-11ef-93f3-92fbcf53809c.png

固化分為SPI和BPI FLASH兩種情況;啟動分為SREC解析及加快啟動模式的ELF直讀;最后就是MultiBoot實(shí)現(xiàn)的時(shí)候應(yīng)該注意什么。

固化

軟核的固化和外部FLASH及應(yīng)用程序大小有很大關(guān)系。小應(yīng)用程序,使用BRAM即可運(yùn)行,固化的時(shí)候和邏輯一起固化即可運(yùn)行,這時(shí)候不管外部是什么類型FLASH,和邏輯固化一樣。大應(yīng)用程序,需要用到外部DDR,就需要兩個(gè)啟動程序,一個(gè)小的Bootloader,和邏輯一起啟動,起來后從外部FLASH讀取相應(yīng)的應(yīng)用程序放到DDR里運(yùn)行,這時(shí)候就要根據(jù)不同的FLASH,設(shè)計(jì)相應(yīng)的讀取邏輯及應(yīng)用。下面我們根據(jù)不同的FLASH類型進(jìn)行相應(yīng)的說明。

SPI FLASH

小應(yīng)用程序

小應(yīng)用程序,比如串口通信,IIC、SPI等配置通信,不占用多少STACK_SIZE和HEAP_SIZE,用內(nèi)部BRAM就可運(yùn)行,這時(shí)候?qū)?yīng)用程序的LD設(shè)置為運(yùn)行到BRAM即可,生成elf后就可以將其和邏輯的BIT融合在一起生成新的BIT,正常生成MCS即可燒寫。

771b8700-b431-11ef-93f3-92fbcf53809c.png

elf和bit融合成新的BIT,有兩種方式,下面詳細(xì)介紹:

調(diào)試階段

調(diào)試階段通過Vitis或者SDK一步即可生成新的BIT:

7727998c-b431-11ef-93f3-92fbcf53809c.png

即在vitis工作目錄-->應(yīng)用程序目錄-->_ide-->bitstream-->download.bit

77545e9a-b431-11ef-93f3-92fbcf53809c.png

該bit就是融合后的BIT,接下來可以使用Vitis/SDK或者Vivado進(jìn)行下載。

776585e4-b431-11ef-93f3-92fbcf53809c.png

穩(wěn)定階段

應(yīng)用程序一般比較簡單,所以調(diào)試穩(wěn)定后,就可以將elf交給邏輯端,讓他們繼續(xù)折騰。

Vivado中在生成bit前,通過下面步驟將elf和軟核關(guān)聯(lián)起來,后面Vivado生成bit后,就是包含了軟核程序的BIT,繼續(xù)后續(xù)的固化工作即可。

7780bc1a-b431-11ef-93f3-92fbcf53809c.png

778b11e2-b431-11ef-93f3-92fbcf53809c.png

大應(yīng)用程序

大應(yīng)用程序就會復(fù)雜很多,主要是建立軟核讀取外部FLASH的通道。

大的應(yīng)用程序需要運(yùn)行到SDRAM中,節(jié)省內(nèi)部BRAM,這里的“大”并不是我們說的elf文件大,而是需要的運(yùn)行空間大。

其實(shí)可以完全不需要內(nèi)部BRAM也可以運(yùn)行大應(yīng)用程序程序,不過制作過程比較復(fù)雜,我們這次還是需要一點(diǎn)內(nèi)部BRAM啟動bootloader。

整個(gè)流程框圖如下:

77a5ee2c-b431-11ef-93f3-92fbcf53809c.png

首先這種方式需要三個(gè)文件:1、FPGA的bit文件(需要包含F(xiàn)LASH的讀寫控制器);2、bootloader 生成的elf文件;3、大應(yīng)用應(yīng)用程序的ELF文件。

這里要用到比較重要的IP-axi_quad_spi(可以自己按照需求寫IP),將IP按照下面設(shè)置進(jìn)行設(shè)置:

77c0a7a8-b431-11ef-93f3-92fbcf53809c.png

主要是使能STARTUP原語。

PS:7系列的在IP內(nèi)部使能STARTUP即可,對于U+系列由于FLASH的IO位于BANK0,需要在頂層再使用STARTUP3原語進(jìn)行IO引出(IP內(nèi)部雖然也使用了原語,但是我調(diào)試的時(shí)候只有在頂層添加STARTUP3原語才能進(jìn)行通信,不清楚是BUG還是沒設(shè)置好,按照官方說明使用方式也是要在頂層再添加原語)。

邏輯端添加上訴IP即可,接下來是應(yīng)用程序設(shè)計(jì)。

在SDK或者Vitis中添加下面BootLoader程序:

77cbe99c-b431-11ef-93f3-92fbcf53809c.png

接下來要修改第一個(gè)地方:

77e4b42c-b431-11ef-93f3-92fbcf53809c.png

就是這個(gè)起始地址,其中0x44A00000就是Vivado中IP的基地址,0x80000是從FLASH讀取的地址,即應(yīng)用存放在FLASH中的地址,該地址要和生成MCS時(shí)候地址相匹配。

第二個(gè)需要注意的地方就是BootLoader要放到BRAM里運(yùn)行,查看以下LD:

77f5da9a-b431-11ef-93f3-92fbcf53809c.png

這樣就可以和上面小應(yīng)用程序一樣,隨著邏輯端一起啟動。

接下來就是固化,固化也是分為兩個(gè)階段。

調(diào)試階段

調(diào)試階段首先將大應(yīng)用程序放到FLASH相應(yīng)的偏移地址上,通過以下工具可以直接燒寫:

78113ac4-b431-11ef-93f3-92fbcf53809c.png

這里先選擇大應(yīng)用程序生成的elf,然后選擇燒寫的偏移地址(按照BootLoader里設(shè)置的偏移地址進(jìn)行設(shè)置),然后選擇對應(yīng)的FLASH,最后一定要勾選Convert ELF to bootloadable SREC format and program,這是目前官方驅(qū)動程序能讀取的二進(jìn)制結(jié)構(gòu)-SREC。

關(guān)于怎么減少啟動時(shí)間我們后面會單獨(dú)討論。

注意點(diǎn)1:修改驅(qū)動

如果不能讀取FLASH,那么需要修改驅(qū)動文件。Board support Package setting,修改xilisf,設(shè)置serial_flash_family(根據(jù)FLASH廠家修改)serial_flash_interface根據(jù)需求修改。

注意點(diǎn)2:讀取超時(shí)

增加等待flash初始化時(shí)間:

原位置:

7828c7ac-b431-11ef-93f3-92fbcf53809c.png

修改

/* *InitializetheSerialFlashLibrary. */ volatileintwait; do { Status=XIsf_Initialize(&Isf,&Spi,ISF_SPI_SELECT,IsfWriteBuffer); if(Status!=XST_SUCCESS){ xil_printf("XIsf_initializefailed!Status=%d ",Status); for(wait=0;wait

注意點(diǎn)3:讀取速度

某些國產(chǎn)FLASH的速度遠(yuǎn)低于進(jìn)口FALSH,所以注意看下數(shù)據(jù)手冊,控制好ext_spi_clk,同時(shí)下圖還有一個(gè)分頻系數(shù):

7831fbec-b431-11ef-93f3-92fbcf53809c.png

穩(wěn)定階段

如果BootLoader能夠引到啟動后,可以將BootLoader的ELF添加到Vivado工程中,這樣在大應(yīng)用程序需要重建后無需每次都建立BootLoader工程進(jìn)行調(diào)試。同時(shí)axi_quad_spi不更改(基地址不變)情況下,BootLoader都不需要修改。

BPI FLASH

小應(yīng)用程序

小應(yīng)用程序和SPI的一樣,不隨著外圍FLASH不同而改變,就不贅述了。

大應(yīng)用程序

大應(yīng)用程序就更復(fù)雜一些,也是需要建立軟核讀取外部FLASH的通道。

接下來我們按照另一個(gè)思路講解BPI FLASH大應(yīng)用程序的固化。上面我們說過大應(yīng)用程序的固化需要三個(gè)文件:1、FPGA的bit文件(需要包含F(xiàn)LASH的讀寫控制器);2、bootloader 生成的elf文件;3、大應(yīng)用程序的ELF文件。我們按照順序講解每個(gè)文件生成需要的必要條件:

FPGA的bit文件

FPGA設(shè)計(jì)中需要增加對FLASH控制,對于BPI FLASH,官方推薦AXI-EMC IP,通過AXI-MEM映射外部FLASH,這個(gè)IP可以控制常見的BPI FLASH(可配置參數(shù)很低),對于不能控制的FLASH,需要自己寫控制器+控制驅(qū)動。

AXI_EMC IP 概述

AXI_EMC是FPGA的一個(gè)ip core,axi 外部存儲控制器,支持sram,nor flash ,psram,cellularRAM,IP核使用AXI4接口,支持32bit和64bit的數(shù)據(jù)位寬,支持以下memory type,即:

異步SRAM

同步SRAM

串行flash or并行nor flash

偽靜態(tài)隨機(jī)存儲器

每個(gè)emc控制器支持掛接4個(gè)存儲設(shè)備

78480630-b431-11ef-93f3-92fbcf53809c.png

來源:pg100-figure1-1

信號連接

我們這次使用的BPI FLASH為S29GL01GSXXXX,可以通過AXI-EMC 控制,具體在FPGA中的連線如下:

78527732-b431-11ef-93f3-92fbcf53809c.png

主要將這個(gè)IP連到MB上,外接引腳比較重要,因?yàn)镮P要兼容的東西比較多,所以引出來的引腳比較多,對于不同的外設(shè)需要連接不同的引腳,對于本次設(shè)計(jì)的引腳連接如下表所示:

785f74f0-b431-11ef-93f3-92fbcf53809c.png

787ad6d2-b431-11ef-93f3-92fbcf53809c.png

78924768-b431-11ef-93f3-92fbcf53809c.png

圖中紅線部分需根據(jù)表進(jìn)行連接

IP界面時(shí)序參數(shù)配置

(1)第一頁

默認(rèn)配置即可,如果使用比較大的內(nèi)存則可選總線位寬為64位,我們控制FLASH,默認(rèn)32位即可:

78a922a8-b431-11ef-93f3-92fbcf53809c.png

這里注意以下,如果使用U+系列,這個(gè)IP會在下面位置有個(gè)使能STARTUP3原語的選項(xiàng):

78b2d910-b431-11ef-93f3-92fbcf53809c.png

使能后和SPI FLASH一樣,需要在頂層添加STARTUP原語引出BPI的DQ0~DQ3。這里說下原因,因?yàn)?系列FPGA的DQ0~DQ3是在BANK14,而U+是在BANK0上,同時(shí)官方IP可能有BUG,導(dǎo)致需要2次使用原語。

(2)第二頁

78cafcac-b431-11ef-93f3-92fbcf53809c.png

這一頁的設(shè)置是核心,需要根據(jù)FLASH數(shù)據(jù)手冊進(jìn)行配置:

Memory Type

支持Sync SRAM, Async SRAM, Linear Flash, Page Mode Flash, PSRAM, or Micron Flash

Data Width

Memory 數(shù)據(jù)位寬,也就是接的存儲設(shè)備的數(shù)據(jù)位寬,支持8,16,32,64位位寬

Parity

可以設(shè)置為No parity,Odd Parity,or Even Parity,只有Memory Type為Sync SRAM時(shí)才能設(shè)置

Delay Mode

可以設(shè)置為Flow-Through model or Pipeline Model,只有Memory Type為Sync SRAM時(shí)才能設(shè)置

Read CE Low to Data Valid Period

78f56b04-b431-11ef-93f3-92fbcf53809c.png

根據(jù)描述,該參數(shù)在不同的memory type下含義不同,如果是flash,則和tELQV的值相等,這里以Page Mode Flash為例說明,基本上也就是片選拉低的時(shí)間,其他類型的存儲設(shè)備沒有驗(yàn)證,暫不清楚,以flash型號為S29GL01GSXXX(容量大小:128Mbyte)為例,根據(jù)芯片手冊中的描述:

7902c1d2-b431-11ef-93f3-92fbcf53809c.png

該芯片讀時(shí)序如下:

79152a2a-b431-11ef-93f3-92fbcf53809c.png

7926b34e-b431-11ef-93f3-92fbcf53809c.png

對該芯片來說,該參數(shù)值就是tCE,即100ns = 100000ps

Read Address Valid to Data Valid Period

79495d7c-b431-11ef-93f3-92fbcf53809c.png

這里的意思為讀地址在數(shù)據(jù)有效前的保持時(shí)間,不是片選保持的時(shí)間,對于S29GL01GSXX來說,就是tAVQV的值,和描述的一樣,即為100ns = 100000ps,如上圖所示。

Page Access Period

796256b0-b431-11ef-93f3-92fbcf53809c.png

79706980-b431-11ef-93f3-92fbcf53809c.png

根據(jù)描述的含義,對于Page Mode Flash來說就是訪問一頁需要的時(shí)間,以S29GL01GSXX為例,也就是tPACC,為25ns,如下:

79855f02-b431-11ef-93f3-92fbcf53809c.png

798d5928-b431-11ef-93f3-92fbcf53809c.png

Read CE High to Data Bus HZ Period

799bcbf2-b431-11ef-93f3-92fbcf53809c.png

該參數(shù)的含義是指片選(CE)從有效變?yōu)闊o效后,至少要保持多長時(shí)間,即從低變高后,要保持多長時(shí)間的高電平,以S29GL01GSXX為例,就是圖中的tDF也就是tEHQZ,為20ns

79bc4d6e-b431-11ef-93f3-92fbcf53809c.png

798d5928-b431-11ef-93f3-92fbcf53809c.png

Read OE High to Data Bus HZ Period

79ed0fb2-b431-11ef-93f3-92fbcf53809c.png

和上邊參數(shù)一樣,指OE高電平保持的時(shí)間,也就是上圖中的tDF,為20ns

AXI Read Timing

79f7adc8-b431-11ef-93f3-92fbcf53809c.png

根據(jù)AXI EMC IP核手冊的page47頁得知以上讀時(shí)序圖,結(jié)合“IP核參數(shù)默認(rèn)值”查看

AXI Write Timing

根據(jù)AXI EMC IP核手冊的page47頁得知以上寫時(shí)序圖,結(jié)合“IP核參數(shù)默認(rèn)值”查看

IP核參數(shù)默認(rèn)值:

7a09e218-b431-11ef-93f3-92fbcf53809c.png

Write Cycle Period

7a2a9c88-b431-11ef-93f3-92fbcf53809c.png

根據(jù)描述,AXI EMC core根據(jù)該參數(shù)去保持CE為低的時(shí)間,但不是指CE保持的時(shí)間,以S29GL01GSXX為例,值等于tWC,即60ns,如下

7a356c3a-b431-11ef-93f3-92fbcf53809c.png

7a45eeac-b431-11ef-93f3-92fbcf53809c.png

Write Enable Minimum Pulse Width

7a5445ec-b431-11ef-93f3-92fbcf53809c.png

該參數(shù)指片選(WE)保持的最小時(shí)間,以S29GL01GSXX為例,值等于tWP,即最小25ns

7a73fcc0-b431-11ef-93f3-92fbcf53809c.png

7a8c06da-b431-11ef-93f3-92fbcf53809c.png

Write Phase Period

7a95ae1a-b431-11ef-93f3-92fbcf53809c.png

該參數(shù)表示兩個(gè)WE之間的最小間隔,以S29GL01GSXX為例,值等于tWPH,即最小20ns

7aab3ce4-b431-11ef-93f3-92fbcf53809c.png

Write WE High to Data Bus LZ Period

7ab62bf4-b431-11ef-93f3-92fbcf53809c.png

該參數(shù)表示在一個(gè)寫周期里,寫使能(WE)到數(shù)據(jù)總線低阻的時(shí)間,或者寫到讀的恢復(fù)時(shí)間(可能理解的不正確,關(guān)于此參數(shù)配置時(shí)請謹(jǐn)慎),以S29GL01GSXX為例,使用的默認(rèn)值,即0ps。

Write Recovery Period for Flash Memory

7ac19516-b431-11ef-93f3-92fbcf53809c.png

這個(gè)參數(shù)應(yīng)該指的是數(shù)據(jù)寫完后,WE還需要保持多少個(gè)時(shí)鐘周期的時(shí)間,這里使用默認(rèn)值,根據(jù)下圖,此參數(shù)小于等于twrr,具體多少不知道,個(gè)人理解大于等于tWPH應(yīng)該就可以了。

7ae31650-b431-11ef-93f3-92fbcf53809c.png

IP其他界面默認(rèn)即可,地址分配界面將IP尋址空間大小設(shè)置成實(shí)際FLASH大小,如下:

7af6f972-b431-11ef-93f3-92fbcf53809c.png

編譯后導(dǎo)出bit到SDK或者Vitis,就可以制作BootLoader.

以上參數(shù)解釋,參考下面的博文:

https://blog.csdn.net/qq_33166886/article/details/112490916

這里要用到比較重要的IP-axi_quad_spi(可以自己按照需求寫IP),將IP按照下面設(shè)置進(jìn)行設(shè)置:

77c0a7a8-b431-11ef-93f3-92fbcf53809c.png

BootLoader制作

打開sdk或者Vitis,新建一個(gè)SREC的工程。這個(gè)就是傳說中啟動文件。

7b146c82-b431-11ef-93f3-92fbcf53809c.png

其中1是用來制作BPI FALSH的啟動文件,2是用來制作SPI FLASH啟動文件的。

修改FLASH的鏡像地址。地址不是亂寫的。是根據(jù)你的mcs文件大小,文件大小在runs/imp/ 文件夾下的 prm 文件上有告知。后面接上的。然后生成文件。注意這個(gè)地址也是你后面真正運(yùn)行的elf地址寫入。

7b341578-b431-11ef-93f3-92fbcf53809c.png

也可以按照prm文件后續(xù)接上elf文件:

7b541e04-b431-11ef-93f3-92fbcf53809c.png

bootloader工程,注意選擇ld看鏈接表設(shè)定。不要把代碼和數(shù)據(jù)放在DDR上面。

7b5f5f58-b431-11ef-93f3-92fbcf53809c.png

然后編譯工程。生成elf文件。然后按照之前的方式將BootLoader elf和vivado生成的bit合成一個(gè)新的bit。

剩下的步驟和之前SPI FLASH一樣了,就不贅述了。

啟動

固化完成了,接下來就是啟動了。小應(yīng)用程序和FPGA啟動一起,所以就不說明了,重點(diǎn)介紹大應(yīng)用程序。

77a5ee2c-b431-11ef-93f3-92fbcf53809c.png

大應(yīng)用程序如果使用官方的BootLoader,在讀取大應(yīng)用到DDR中時(shí),是讀取的SREC,那么為什么要讀取SREC,SREC文件有什么特點(diǎn)?我們接下來開始揭開面紗。

SREC文件

SREC文件是帶有程序的地址信息和數(shù)據(jù)校驗(yàn)功能,所以在讀取SREC文件時(shí)是連讀連校驗(yàn)并且要轉(zhuǎn)譯,所以在讀取SREC時(shí)候會很慢,好處就是可以避免很多因?yàn)槲募e(cuò)誤導(dǎo)致功能異常。結(jié)構(gòu)如下:

Record type Byte count Address Data Checksum

SREC 格式文件由一系列ASCII文本記錄組成。這些記錄從左到右具有以下結(jié)構(gòu):

a.Record type——2個(gè)字節(jié)ASCII字符,第一個(gè)字符為‘S’(ASCII 0x53),第二個(gè)字符為ASCII數(shù)字的‘0’~‘9’(ASCII 0x30 到 0x39)

b.Byte count——兩個(gè)十六進(jìn)制數(shù)字(“00”至“FF”),表示記錄其余部分(地址 + 數(shù)據(jù) + 校驗(yàn)和)后面的字節(jié)數(shù)(十六進(jìn)制數(shù)字對)。此字段的最小值為 3(16 位地址字段加 1 個(gè)校驗(yàn)和字節(jié)時(shí)為 2),最大值為 255(0xFF)。“00”/“01”/“02”為非法值。

c.Address——大端地址——4/6/8個(gè)16進(jìn)制的ASCII數(shù)字,取決于Record type的類型

d.Data——數(shù)據(jù) ——2*n個(gè)16進(jìn)制的ASCII數(shù)字(n字節(jié)數(shù)據(jù))

e.Checksum ——2個(gè)16進(jìn)制的ASCII數(shù)字,即字節(jié)數(shù)、地址和數(shù)據(jù)字段的兩個(gè)十六進(jìn)制數(shù)字對所表示的值之和的補(bǔ)碼的最低有效字節(jié)。在C 編程語言中,總和通過以下方式轉(zhuǎn)換為校驗(yàn)和:0xFF - (sum & 0xFF)

7b7ef4ee-b431-11ef-93f3-92fbcf53809c.png

圖片來源:https://en.wikipedia.org/wiki/SREC_(file_format)

ELF和SREC對比:

7ba40f68-b431-11ef-93f3-92fbcf53809c.png

ELF轉(zhuǎn)換成SREC

如果使用官方的BootLoader,那么SREC格式是必不可少的,而SDK或者Vitis只能生成ELF文件,下面介紹幾種方式將ELF轉(zhuǎn)換成SREC。

方式一:通過XSCT Console

將elf轉(zhuǎn)換成SREC format,打開Xilinx—> XSCT Console。

7bc1f82a-b431-11ef-93f3-92fbcf53809c.png

通過cd 命令進(jìn)入elf所在的目錄:

7bcc2b42-b431-11ef-93f3-92fbcf53809c.png

輸入:mb-objcopy -O srec app.elf app.srec

就會在ELF所在目錄生成SREC文件。

方式二:自動轉(zhuǎn)換

7be0c4b2-b431-11ef-93f3-92fbcf53809c.png

7be55612-b431-11ef-93f3-92fbcf53809c.png

在應(yīng)用上右擊,屬性,打開屬性窗口。在圖中位置添加命令:

mb-objcopy -O srec {ProjName}.srec

7bed4016-b431-11ef-93f3-92fbcf53809c.png

這樣每次在APP編譯完成后就會將ELF自動轉(zhuǎn)換成SREC(在ELF目錄里)。

方式二:使用命令手動設(shè)置

使用下圖中兩個(gè)腳本,cd到elf文件位置后,使用mb-object命令完成轉(zhuǎn)換:

7c0bd27e-b431-11ef-93f3-92fbcf53809c.png

最后這種方式和方式一類似,好處就是可以使用Win下的腳本調(diào)用,然后生成一鍵腳本。

加快啟動

從上面的分析可知,在讀取SREC時(shí)候會進(jìn)行很多無關(guān)操作,導(dǎo)致啟動時(shí)間大大增加,尤其是大應(yīng)用程序生成的ELF比較大(SREC也會比較大)的時(shí)候,這個(gè)時(shí)間肯定不能忍受的。

方式一:減少打印

在進(jìn)行調(diào)試的時(shí)候,BootLoader會有讀取進(jìn)程通過串口打印,這一操作方便調(diào)試的時(shí)候快速進(jìn)行問題定位,完成調(diào)試的時(shí)候,可以將打印去掉,注釋掉下圖位置語句即可:

7c1fab50-b431-11ef-93f3-92fbcf53809c.png

更改讀取方式

我們可以減少讀取過程中的轉(zhuǎn)譯和校驗(yàn)等過程,直接引導(dǎo)搬運(yùn)FLASH的elf文件至DDR,減少“中間商賺差價(jià)”的時(shí)間,可大大提高啟動速度,相關(guān)的工程可以參考下面的鏈接。

https://github.com/henrikbrixandersen/elf-bootloader?_ga=2.259888963.835186866.1691390458-2003547133.1691118205

在eb-config.h文件中更改實(shí)際用到的FLASH地址以及匹配FLASH信息,主要就是修改對應(yīng)FLASH的opration指令以及dummy cycle,可以根據(jù)你使用的FLASH類型查閱數(shù)據(jù)手冊。

7c395a3c-b431-11ef-93f3-92fbcf53809c.png

MultiBoot實(shí)現(xiàn)注意點(diǎn)

在小應(yīng)用程序時(shí)候其實(shí)和純FPGA應(yīng)用一樣,沒什么大的區(qū)別,沒什么注意的。主要在大應(yīng)用程序:

7c43b4be-b431-11ef-93f3-92fbcf53809c.png

大應(yīng)用程序主要包含上面幾個(gè)文件組成(根據(jù)自己需求可能有所不同)??紤]到升級過程中傳輸完成擦除FLASH后及突然斷電等特殊情況,所以需要考慮CRC error(突然斷電)、IDCODE error(升級包制作錯(cuò)誤)、Watchdog timer time-out error(擦除FLASH后未升級、突然斷電)三種情況。

Golden區(qū)無需變動,主要在M區(qū)的程序,在升級APP時(shí)候面對上面的情況怎么操作?因?yàn)槟壳暗腗ultiBoot機(jī)制只能在FPGA邏輯層進(jìn)行操作,如果APP程序錯(cuò)誤可能觸發(fā)不了回退機(jī)制。

這里提供一個(gè)思路,就是對M區(qū)APP增加CRC校驗(yàn),BootLoader在讀取APP的ELF或者SREC時(shí)如果CRC校驗(yàn)錯(cuò)誤,那么就破壞M區(qū)的FPGA程序(FLASH),讓FPGA程序啟動時(shí)候觸發(fā)四種錯(cuò)誤的任何一種,就可以回退到Golden區(qū)再進(jìn)行升級。

總結(jié)

總結(jié)就下面的一張圖了:

7c56db0c-b431-11ef-93f3-92fbcf53809c.png

關(guān)于這部分內(nèi)容,大家有什么建議或者經(jīng)驗(yàn),歡迎大家評論區(qū)留言討論~

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

    關(guān)注

    37

    文章

    3265

    瀏覽量

    57677
  • 軟核
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    15850
  • 固化
    +關(guān)注

    關(guān)注

    0

    文章

    167

    瀏覽量

    10480

原文標(biāo)題:一篇文章搞懂軟核(MicroBlaze)的固化和啟動

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    multiboot什么意思 MultiBoot的功能簡介、流程介紹

    : 1、我們可以把多個(gè)bitstream存儲在配置Flash中,通過MultiBoot功能來實(shí)現(xiàn)多個(gè)bitstream之間的動態(tài)切換,從而達(dá)到使用FPGA來實(shí)現(xiàn)多種任務(wù); 2、在個(gè)工
    的頭像 發(fā)表于 08-04 16:32 ?1.9w次閱讀
    <b class='flag-5'>multiboot</b>什么意思 <b class='flag-5'>MultiBoot</b>的功能簡介、流程介紹

    FPGA的IP使用技巧

    FPGA的IP使用技巧主要包括以下幾個(gè)方面: 理解IP的概念和特性 : IP是指用硬
    發(fā)表于 05-27 16:13

    6678 8boot,請問為何同樣的程序在線運(yùn)行沒問題,固化后出現(xiàn)問題?在線運(yùn)行和固化運(yùn)行的差別在哪呢?

    SPI固化到板子里后,通過鏈接仿真器,看到8個(gè)中只有個(gè)別核實(shí)能正常運(yùn)行的,而其他也運(yùn)行了,只是運(yùn)行到某行后就出現(xiàn)了問題。請問:為何同樣的程序在線運(yùn)行沒問題,
    發(fā)表于 06-20 03:11

    FPGA的、硬核以及固的概念

    。 從IP的提供方式上,通常將其分為、固和硬核這3類。從完成IP所花費(fèi)的成本來講,硬核代價(jià)最大; 從使用靈活性來講,
    發(fā)表于 09-03 11:03

    搞懂UPS主要內(nèi)容

    導(dǎo)讀:UPS是系統(tǒng)集成項(xiàng)目中常用到的設(shè)備,也是機(jī)房必備的設(shè)備。本文簡單介紹了UPS的種類、功能、原理,品質(zhì)選擇與配置選擇方式,基礎(chǔ)維護(hù)等相關(guān)的內(nèi)容。搞懂UPS本文主要內(nèi)容:UPS種類、功能
    發(fā)表于 09-15 07:49

    QuartusⅡ10.1中NIOS2的構(gòu)建方法

    關(guān)于QuartusⅡ10.1中NIOS2的構(gòu)建、軟件編譯及程序固化 、硬件開發(fā)1、構(gòu)建CPU模塊2、構(gòu)建EPCS控制器,SYSTEM ID模塊,JTAG UART模塊3、構(gòu)建RA
    發(fā)表于 01-25 07:58

    基于FPGA 的嵌入式ASIP 設(shè)計(jì)與實(shí)現(xiàn)

    基于FPGA 的嵌入式ASIP 設(shè)計(jì)與實(shí)現(xiàn)作者:李慶誠 任健 劉嘉欣 黃寶貞 來源:微計(jì)算機(jī)信息摘要:采用ASIP+FPGA 模式設(shè)計(jì)了款嵌入式微處理器
    發(fā)表于 02-06 10:44 ?30次下載

    基于FPGA的嵌入式ASIP設(shè)計(jì)與實(shí)現(xiàn)

    采用ASIP+FPGA模式設(shè)計(jì)了款嵌入式微處理器,以該為例從體系結(jié)構(gòu)和指令集設(shè)計(jì)兩方面對ASIP+FPGA模式微處理器
    發(fā)表于 07-28 17:41 ?17次下載

    如何使用FPGA進(jìn)行CAN控制器的設(shè)計(jì)與實(shí)現(xiàn)

     本文參照CAN2.0 總線協(xié)議設(shè)計(jì)了個(gè)CAN 控制器。具體設(shè)計(jì)采用TOP-DOWN 方式,上層采用模塊化設(shè)計(jì),最底層模塊以Verilog 語言編寫而成。測試了
    發(fā)表于 07-19 17:48 ?25次下載
    如何使用FPGA進(jìn)行CAN控制器<b class='flag-5'>軟</b><b class='flag-5'>核</b>的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    搞懂幾種常見的射頻電路類型及主要指標(biāo)

    搞懂幾種常見的射頻電路類型及主要指標(biāo)。
    發(fā)表于 07-27 10:26 ?9次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b>幾種常見的射頻電路類型及主要指標(biāo)

    基于Nios和FPGA器件實(shí)現(xiàn)電纜故障檢測儀的設(shè)計(jì)方案

    脈沖發(fā)生電路產(chǎn)生探測脈沖,高速的A/D轉(zhuǎn)換器對脈沖及其反射回波信號進(jìn)行采樣,使用異步FIFO作為A/D采樣數(shù)據(jù)的緩存。Nios作為系統(tǒng)核心,控制檢測任務(wù)的啟動和結(jié)束、脈沖發(fā)送接收模式的選擇、A
    發(fā)表于 08-24 15:46 ?1050次閱讀
    基于Nios<b class='flag-5'>軟</b><b class='flag-5'>核</b>和FPGA器件<b class='flag-5'>實(shí)現(xiàn)</b>電纜故障檢測儀的設(shè)計(jì)方案

    7 eries FPGAs SPI MultiBoot實(shí)現(xiàn)方式

    7 Series FPGAs MultiBoot功能指讓FPGA從2個(gè)或者多個(gè)BIT文件中加載個(gè)BIT文件運(yùn)行程序,所以它的2個(gè)主要應(yīng)用如下: 1. 更新新的BIT時(shí),當(dāng)更新失敗或BIT出錯(cuò)會返回
    的頭像 發(fā)表于 12-11 14:58 ?1791次閱讀
    7 eries FPGAs SPI <b class='flag-5'>MultiBoot</b><b class='flag-5'>實(shí)現(xiàn)</b>方式

    在FPGA中如何通過ICAP原語實(shí)現(xiàn)Multiboot

    FPGA的MultiBoot功能可以支持遠(yuǎn)程動態(tài)更新bitstream images,實(shí)現(xiàn)bitstream images的實(shí)時(shí)切換。在MultiBoot配置過程中檢測到錯(cuò)誤時(shí),F(xiàn)PGA可以觸發(fā)
    的頭像 發(fā)表于 05-11 14:20 ?6462次閱讀
    在FPGA中如何通過ICAP原語<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>Multiboot</b>?

    關(guān)于QuartusⅡ10.1中NIOS2的構(gòu)建、軟件編譯及程序固化

    關(guān)于QuartusⅡ10.1中NIOS2的構(gòu)建、軟件編譯及程序固化 、硬件開發(fā)1、構(gòu)建CPU模塊2、構(gòu)建EPCS控制器,SYSTEM ID模塊,JTAG UART模塊3、構(gòu)建RA
    發(fā)表于 11-30 18:06 ?10次下載
    關(guān)于QuartusⅡ10.1中NIOS2<b class='flag-5'>軟</b><b class='flag-5'>核</b>的構(gòu)建、軟件編譯及程序<b class='flag-5'>固化</b>

    基于ZYNQ的multiBoot測試說明

    基于ZYNQ的multiBoot測試
    的頭像 發(fā)表于 02-16 16:21 ?5837次閱讀
    基于ZYNQ的<b class='flag-5'>multiBoot</b>測試說明
    RM新时代网站-首页