日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

FPGA中利用ICAP原语实现Multiboot功能-总结篇

發(fā)布時(shí)間:2023/12/8 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA中利用ICAP原语实现Multiboot功能-总结篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

FPGA的MultiBoot功能可以支持遠(yuǎn)程動(dòng)態(tài)更新bitstream images,實(shí)現(xiàn)bitstream images的實(shí)時(shí)切換。在MultiBoot配置過(guò)程中檢測(cè)到錯(cuò)誤時(shí),FPGA可以觸發(fā)fallback 功能,以確保可以將已知良好的設(shè)計(jì)加載到器件中。

MultiBoot的大致過(guò)程如下圖:

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

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

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

1、ICAPE3 接口

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

在Xilinx FPGA 中ICAP(Internal Configuration Access Port) 指的是內(nèi)部配置訪問(wèn)端口,其主要作用是通過(guò)內(nèi)部配置訪問(wèn)端口(ICAP),用戶(hù)可以在FPGA邏輯代碼中直接讀寫(xiě)FPGA內(nèi)部配置寄存器(類(lèi)似SelectMAP),從而實(shí)現(xiàn)特定的配置功能,例如Multiboot。
ICAP目前為止有三個(gè)版本,包括ICAP,ICAPE2以及ICAPE3。UltraScale系列對(duì)應(yīng)ICAPE3,7系列對(duì)應(yīng)ICAPE2,7系列之前的對(duì)應(yīng)ICAP。

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


2、IPROG指令

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

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

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

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

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

(1)對(duì)于BPI模式來(lái)說(shuō),可以通過(guò)RS[1:0]來(lái)控制具體位流的讀取,也可以通過(guò)STAT_ADDR[28:0]地址來(lái)控制具體位流的讀取。

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

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

ICAPE3 例化示例

ICAPE3 進(jìn)行例化,示例如下:

// 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è)備號(hào)DEVICE_ID需要查找USER GUIDE手冊(cè),而ICAP原語(yǔ)接口時(shí)序跟Select Map接口時(shí)序非常相似。SelectMap模式下,FPGA的配置和回讀是通過(guò)CSI_B,RDWR_B和CCLK來(lái)控制的。

程序步驟

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

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

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

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

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

在SPI的flash里燒寫(xiě)有A和B兩個(gè)程序,FPGA上電后,自動(dòng)加載A程序,根據(jù)外部給FPGA指示信號(hào),FPGA自動(dòng)切換加載B的程序,同時(shí)在B程序運(yùn)行期間,根據(jù)外部給FPGA指示信號(hào),FPGA自動(dòng)切換加載A的程序。

總結(jié)

以上是生活随笔為你收集整理的FPGA中利用ICAP原语实现Multiboot功能-总结篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。