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

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

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

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

FPGA之家 ? 來源:林深雜談 ? 作者:林深雜談 ? 2021-05-11 14:20 ? 次閱讀

FPGA的MultiBoot功能可以支持遠(yuǎn)程動態(tài)更新bitstream images,實現(xiàn)bitstream images的實時切換。在MultiBoot配置過程中檢測到錯誤時,F(xiàn)PGA可以觸發(fā)fallback 功能,以確??梢詫⒁阎己玫脑O(shè)計加載到器件中。

MultiBoot的大致過程如下圖:

f204ff4a-b20b-11eb-bf61-12bb97331649.png

MultiBoot的配置文件由兩個比特流文件生成,第一個為備份文件,永遠(yuǎn)都不會變,稱為Golden_image,從Flash的0地址存儲。

第二個為更新文件,后面遠(yuǎn)程更新,更新的就是這個文件,稱為Update_image,存放在某個地址處,這個地址有熱啟動地址寄存器(WBSTAR)指定。

配置過程大致如下:FPGA從FLASH的0地址處讀取配置,遇到IPROG Command命令時,跳轉(zhuǎn)到WBSTAR寄存器指定的地址,該地址存放Update_image的地址,此時FPGA嘗試加載該地址處的比特流文件,配置成功的話,就執(zhí)行該配置的功能。如果遇到配置錯誤,則觸發(fā)FallBack,F(xiàn)PGA重新加載Golden_image。

1、ICAPE3 接口

FPGA實現(xiàn)IPROG通常有兩種方式,一種是通過ICAP配置,一種是把相關(guān)指令嵌入bit文件中。與通過bit文件實現(xiàn)IPROG相比,通過ICAP更靈活。

在Xilinx FPGA 中ICAP(Internal Configuration Access Port) 指的是內(nèi)部配置訪問端口,其主要作用是通過內(nèi)部配置訪問端口(ICAP),用戶可以在FPGA邏輯代碼中直接讀寫FPGA內(nèi)部配置寄存器(類似SelectMAP),從而實現(xiàn)特定的配置功能,例如Multiboot。

ICAP目前為止有三個版本,包括ICAP,ICAPE2以及ICAPE3。UltraScale系列對應(yīng)ICAPE3,7系列對應(yīng)ICAPE2,7系列之前的對應(yīng)ICAP。

以下以ICAPE3 為例,ICAPE3 的接口如下:

f265be16-b20b-11eb-bf61-12bb97331649.png

f27218b4-b20b-11eb-bf61-12bb97331649.png

f2a5ad1e-b20b-11eb-bf61-12bb97331649.png

2、IPROG指令

每個UltraScale系列的FPAG包括2個ICAPE3,但實際使用時只能例化并使用一個,默認(rèn)頂部ICAPE3, 初級玩家采用默認(rèn)的即可。

IPROG指令的作用跟外部Program_B管腳的作用類似,都是對FPGA芯片進行復(fù)位操作,該復(fù)位操作對FPGA內(nèi)部的應(yīng)用程序進行復(fù)位,復(fù)位過程中除專用配置管腳和JTAG管腳,其他輸入/輸出管腳均為高阻態(tài),同時IPROG指令不能復(fù)位專用重配置邏輯,如WBSTAR寄存器、TIMER寄存器、BSPI寄存器和BOOTSTS寄存器。IPROG指令能夠觸發(fā)FPGA開啟初始化流程,同時拉低INIT和Done信號。完成復(fù)位操作后,將默認(rèn)的加載地址用熱啟動地址寄存器(Warm Boot Start Address,WB-STAR)中的新地址替換。

通過ICAP發(fā)送IPROG指令實現(xiàn)Multiboot的步驟如下:

f2d4d8d2-b20b-11eb-bf61-12bb97331649.png

首先寫入同步頭 32’hAA995566, 然后將需要跳轉(zhuǎn)到的bit文件的起始地址寫入WBSTAR寄存器,最后寫入IPROG(internal PROGRAM_B)指令。

WBSTAR寄存器的格式,根據(jù)自己的要為Update_image分配在FLASH的地址,按照下面的格式生成一個32位數(shù)據(jù)。例如,我為Update_image分配的flash地址為2000000。

(1)對于BPI模式來說,可以通過RS[1:0]來控制具體位流的讀取,也可以通過STAT_ADDR[28:0]地址來控制具體位流的讀取。

(2)對于SPI模式來說,只有STAT_ADDR[23:0]地址來表征FLASH器件的地址,當(dāng)使用32位地址的SPI(容量大于等于256Mb)時,需要將實際存儲的高24地址賦值給STAT_ADDR[23:0]。因此在位流存儲的起始地址早于255時,這就要求位流中的dummy數(shù)目要大于256個,否則就會出現(xiàn)易失部分有效位流讀取,導(dǎo)致加載失敗。為了安全起見,在使用大于等于256Mb的FLASH時,可以適當(dāng)在位流頭前加入Dummy。

這里需要注意一點,ICAP以及SelectMAP都存在位反轉(zhuǎn)(Bit Swapping),也就是說,上表中所有的數(shù)據(jù)需要進行位反轉(zhuǎn)之后才能接到ICAP的輸入接口,同理,ICAP輸出的值需要進行位反轉(zhuǎn)后才能與實際的值對應(yīng)起來,位反轉(zhuǎn)的示例如下圖。

f2e99b1e-b20b-11eb-bf61-12bb97331649.png


3、ICAPE3 例化示例

ICAPE3 進行例化,示例如下:

// ICAPE3: Internal Configuration Access Port

// UltraScale

// Xilinx HDL Language Template, version 2019.1

ICAPE3 #(

.DEVICE_ID(32‘h03628093),//pre-programmed Device ID value,used for simulation

// purposes.

.ICAP_AUTO_SWITCH(“DISABLE”),//Enable switch ICAP using sync word

.SIM_CFG_FILE_NAME(“NONE”)//Raw Bitstream (RBT) file,parsed by the simulation

// model

ICAPE3_inst (

.AVAIL(AVAIL), // 1-bit output: Availability status of ICAP

.O(O), // 32-bit output: Configuration data output bus

.PRDONE(PRDONE),//1-bit output: Indicates completion of Partial Reconfiguration

.PRERROR(PRERROR),//1-bit output: Indicates Error during Partial Reconfiguration

.CLK(CLK), // 1-bit input: Clock input

.CSIB(CSIB), // 1-bit input: Active-Low ICAP enable

.I(I), // 32-bit input: Configuration data input bus

.RDWRB(RDWRB) // 1-bit input: Read/Write Select input

);

// End of ICAPE3_inst instantiation

其中設(shè)備號DEVICE_ID需要查找USER GUIDE手冊,而ICAP原語接口時序跟Select Map接口時序非常相似。SelectMap模式下,F(xiàn)PGA的配置和回讀是通過CSI_B,RDWR_B和CCLK來控制的。

4、程序步驟

在發(fā)送IPROG指令之前,將默認(rèn)的加載地址用熱啟動地址寄存器(Warm Boot Start Address,WB-STAR)中的新地址。

然后對ICAP核進行預(yù)配置。重載控制模塊在收到觸發(fā)信號后,第一個時鐘周期將ICAP核的RDWRB信號和CSIBCSIB信號置高,第二個周期將RDWRB信號置底,CE信號置高,第三個周期將RDWRB信號置底,CSIB信號也置底。

接著在下面的8個時鐘周期里,將指令隊列中的控制命令逐個發(fā)出。

運行工程,生成位流Bit,在約束XDC文件中添加壓縮等命令即可。

f3269406-b20b-11eb-bf61-12bb97331649.png

固化Mcs生成。Xilinx系列的FPGA需要將后綴名為mcs的內(nèi)存鏡像文件固化到外部配置存儲器中,F(xiàn)PGA上電后才能自動加載配置文件。一般的mcs文件只包含一個bit流文件,多重啟動的mcs固化文件包含多個bit流文件。在將多個bit流整合到mcs文件的過程中,需要指定每個bit流的起始地址,這樣FPGA專用配置邏輯才能根據(jù)地址找到對應(yīng)的bit流。在程序設(shè)計WBSTAR地址時,確定了Golden位流存儲的起始地址為0X00000000,Update位流存儲的起始地址為0X00800000,因此在將Bit整合到Mcs過程中需要指定對應(yīng)的存儲起始地址,否則就無法加載成功了。

在SPI的flash里燒寫有A和B兩個程序,F(xiàn)PGA上電后,自動加載A程序,根據(jù)外部給FPGA指示信號,F(xiàn)PGA自動切換加載B的程序,同時在B程序運行期間,根據(jù)外部給FPGA指示信號,F(xiàn)PGA自動切換加載A的程序。

原文標(biāo)題:FPGA中利用ICAP原語實現(xiàn)Multiboot功能

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

責(zé)任編輯:haq

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

    關(guān)注

    1624

    文章

    21570

    瀏覽量

    600637

原文標(biāo)題:FPGA中利用ICAP原語實現(xiàn)Multiboot功能

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

收藏 人收藏

    評論

    相關(guān)推薦

    FPGA物聯(lián)網(wǎng)的應(yīng)用前景

    FPGA(現(xiàn)場可編程門陣列)物聯(lián)網(wǎng)的應(yīng)用前景非常廣闊,其高度的靈活性和可編程性使其成為物聯(lián)網(wǎng)應(yīng)用不可或缺的核心組件。以下是對FPGA
    的頭像 發(fā)表于 10-25 09:22 ?142次閱讀

    如何在FPGA實現(xiàn)按鍵消抖

    FPGA(現(xiàn)場可編程門陣列)實現(xiàn)按鍵消抖是一個重要的設(shè)計環(huán)節(jié),特別是處理用戶輸入時,由于物理按鍵的機械特性和電氣特性,按鍵在按下和釋放
    的頭像 發(fā)表于 08-19 18:15 ?1031次閱讀

    如何在FPGA實現(xiàn)隨機數(shù)發(fā)生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7實現(xiàn)4位偽隨機數(shù)發(fā)生器(PRNGs)。
    的頭像 發(fā)表于 08-06 11:20 ?489次閱讀
    如何在<b class='flag-5'>FPGA</b><b class='flag-5'>中</b><b class='flag-5'>實現(xiàn)</b>隨機數(shù)發(fā)生器

    FPGA自動駕駛領(lǐng)域有哪些應(yīng)用?

    的數(shù)據(jù)處理和預(yù)處理,實現(xiàn)實時計算和反饋。 二、數(shù)據(jù)傳輸與處理FPGA自動駕駛扮演著數(shù)據(jù)傳輸和處理的角色。它能夠支持多種傳感器(如激光雷達、攝像頭、GPS等)的數(shù)據(jù)傳輸,并
    發(fā)表于 07-29 17:09

    FPGA人工智能的應(yīng)用有哪些?

    和安全的云計算和網(wǎng)絡(luò)服務(wù)。 三、具體應(yīng)用場景 圖像分類:圖像分類任務(wù),FPGA可以承擔(dān)前置處理、圖像卷積、全連接等任務(wù)。通過FPGA的并
    發(fā)表于 07-29 17:05

    如何在FPGA實現(xiàn)狀態(tài)機

    FPGA(現(xiàn)場可編程門陣列)實現(xiàn)狀態(tài)機是一種常見的做法,用于控制復(fù)雜的數(shù)字系統(tǒng)行為。狀態(tài)機能夠根據(jù)當(dāng)前的輸入和系統(tǒng)狀態(tài),決定下一步的動作和新的狀態(tài)。這里,我們將詳細(xì)探討如何在
    的頭像 發(fā)表于 07-18 15:57 ?366次閱讀

    FPGA | Xilinx ISE14.7 LVDS應(yīng)用

    今天給大俠帶來 Xilinx ISE14.7 LVDS應(yīng)用,話不多說,上貨。 最近項目需要用到差分信號傳輸,于是看了一下FPGA上差分信號的使用。Xilinx FPGA,主要通過
    發(fā)表于 06-13 16:28

    xilinx的carry4原語高云FPGA中用什么原語替代?

    xilinx的carry4原語高云FPGA中用什么原語替代
    發(fā)表于 05-09 16:13

    AMD MPSoC器件啟用SEM IP的策略與方法

    IP 初始化階段就卡住了。從 Uart 口的 log 看 ‘ICAP’ 后續(xù)無字符輸出,這是典型的 IP 無法通過 ICAP 訪問控制端的狀態(tài)。
    的頭像 發(fā)表于 03-01 09:53 ?737次閱讀
    AMD MPSoC器件<b class='flag-5'>中</b>啟用SEM IP的策略與方法

    AMD Xilinx 7系列FPGAMultiboot多bit配置

    Multiboot是一種AMD Xilinx 7系列FPGA實現(xiàn)雙鏡像(或多鏡像)切換的方案。它允許
    的頭像 發(fā)表于 02-25 10:54 ?1127次閱讀
    AMD Xilinx 7系列<b class='flag-5'>FPGA</b>的<b class='flag-5'>Multiboot</b>多bit配置

    FPGA實現(xiàn)原理

    引入到FPGA,或者將信號從FPGA傳送到外部。 互連資源 (Interconnect Resources):互連資源是一種復(fù)雜的開關(guān)網(wǎng)絡(luò),它允許FPGA
    發(fā)表于 01-26 10:03

    FPGA通過UDP以太網(wǎng)傳輸JPEG壓縮圖片

    FPGA實現(xiàn)了 JPEG 壓縮和 UDP 以太網(wǎng)傳輸。從攝像機的輸入獲取單個灰度幀,使用 JPEG 標(biāo)準(zhǔn)對其進行壓縮,然后通過UD
    的頭像 發(fā)表于 01-26 09:30 ?735次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>通過</b>UDP以太網(wǎng)傳輸JPEG壓縮圖片

    IIC總線的FPGA實現(xiàn)說明

    DE2_TV,有關(guān)于寄存器的配置的部分,采用的方法是通過IIC的功能,這里對IIC總線的FPGA實現(xiàn)做個說明。
    的頭像 發(fā)表于 01-05 10:16 ?945次閱讀
    IIC總線的<b class='flag-5'>FPGA</b><b class='flag-5'>實現(xiàn)</b>說明

    如何用RTL原語實現(xiàn)MUX門級映射呢?

    對于前端設(shè)計人員,經(jīng)常會需要一個MUX來對工作模式,數(shù)據(jù)路徑進行明確(explicit)的聲明,這個對于后端工程師下約束也很重要。這里介紹一種巧用的RTL原語,實現(xiàn)MUX的方法。
    的頭像 發(fā)表于 12-14 16:26 ?1217次閱讀
    如何用RTL<b class='flag-5'>原語</b><b class='flag-5'>實現(xiàn)</b>MUX門級映射呢?

    Xilinx FPGA芯片內(nèi)部時鐘和復(fù)位信號使用方法

    如果FPGA沒有外部時鐘源輸入,可以通過調(diào)用STARTUP原語,來使用FPGA芯片內(nèi)部的時鐘和復(fù)位信號,Spartan-6系列內(nèi)部時鐘源是50MHz,Artix-7、Kintex-7等
    的頭像 發(fā)表于 10-27 11:26 ?1638次閱讀
    Xilinx <b class='flag-5'>FPGA</b>芯片內(nèi)部時鐘和復(fù)位信號使用方法