Xilinx FPGA 重構Multiboot ICAPE2和ICAPE3使用

一、FPGA Multiboot

本文主要介紹基于IPROG命令的FPGA多版本重構,用ICAP原語實現在線多版本切換。需要了解MultiBoot Fallback點擊鏈接。

如下圖所示,ICAP原語可實現flash中n+1各版本的動態切換,在工作過程中,可以通過IPROG命令切換到其他任意版本所在地址運行。
在這里插入圖片描述

二、ICAPE2

??參考Xilinx ug470,ICAPE2原語如下:

   ICAPE2 #(.DEVICE_ID(32'h3651093),     // Specifies the pre-programmed Device ID value to be used for simulation// purposes..ICAP_WIDTH("X32"),         // Specifies the input and output data width..SIM_CFG_FILE_NAME("NONE")  // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation// model.)ICAPE2_inst (.O(O),         // 32-bit output: Configuration data output bus.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);

DEVICE_ID:需要和芯片ID匹配,可以在ug470查詢,也可以用過JTAG獲取

各引腳定義如下:
O:回讀的config數據
CLK:操作時鐘
CSIB:使能端,低有效
I:輸入的配置數據
RDWRB:讀寫控制端,1-讀,0-寫

ICPE實現multiboot的配置流程如下,在使能后,以此每個時鐘輸入以下命令,其中Warm Boot Start Address為需要跳轉的地址
在這里插入圖片描述
在這里插入圖片描述
需要注意的是,輸入的配置數據字節內需進行bit swap,例如:
在這里插入圖片描述

三、ICAPE3

??參考Xilinx ug570,ICAPE3如下:

   ICAPE3 #(.DEVICE_ID(32'h03628093),     // Specifies the pre-programmed Device ID value to be used for simulation// purposes..ICAP_AUTO_SWITCH("DISABLE"), // Enable switch ICAP using sync word..SIM_CFG_FILE_NAME("NONE")    // Specifies the Raw Bitstream (RBT) file to be 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.);

DEVICE_ID:需要和芯片ID匹配,可以在ug470查詢,也可以用過JTAG獲取

各引腳定義如下:
AVAIL:回讀有效標志
PRDONE:重購完成標志
PRERROR:重構失敗標志
O:回讀的config數據
CLK:操作時鐘
CSIB:使能端,低有效
I:輸入的配置數據
RDWRB:讀寫控制端,1-讀,0-寫

ICPE實現multiboot的配置流程如下,在使能后,以此每個時鐘輸入以下命令,其中Warm Boot Start Address為需要跳轉的地址
在這里插入圖片描述
在BPI重構是,配置地址有所區別,需增加一個RS控制。
在這里插入圖片描述
與ICAPE2相同,ICAPE3輸入的配置數據字節內需進行bit swap。

三、ICAPE3例程

下面基于ICAPE3,設計了4個image重構例程。
1、輸入輸出
??采用一個25MHz時鐘,輸出LED用于判斷是那個image,同時可以通過VIO判斷image

module Multiboot_top(
//---------------------------全局信號---------------------------------------------	input	i_FPGA_GCLK25M                    , //		板載晶振輸出output reg	o_FPGA_TEST_LED                
);

2、image配置及狀態
??(1)通過一個VIO配置不同image的跳轉,跳轉地址32bit,跳轉使能觸發狀態機進行跳轉,同時可用過VIO觀測不同的image
??(2)通過條件編譯例化4個綜合實現選項,輸出4個bit
在這里插入圖片描述
??(3)通過LED的閃爍次數觀察不同的image

`ifdef B2  
localparam IMAGE_NUM = 2'd1;
`elsif B3  
localparam IMAGE_NUM = 2'd2;
`elsif B4  
localparam IMAGE_NUM = 2'd3;
`else      
localparam IMAGE_NUM = 2'd0;
`endif
localparam CLK_CNT_MAX = 32'd6250000;
//------------------led image --------------
reg [31:0] clk_cnt;
reg [2:0]  led_num;
always @(posedge i_FPGA_GCLK25M) beginif(clk_cnt == CLK_CNT_MAX) beginclk_cnt <= 32'd0;led_num <= led_num + 1'b1;endelse clk_cnt <= clk_cnt + 1'b1;
end
//1S內閃爍IMAGE_NUM+1次,停1S,依次循環
always @(posedge i_FPGA_GCLK25M) beginif(clk_cnt <= CLK_CNT_MAX/2 && led_num <= IMAGE_NUM) o_FPGA_TEST_LED <= 1'b1;else o_FPGA_TEST_LED <= 1'b0;
end
//------------------vio image --------------
wire        reboot_valid;
wire [31:0] reboot_addr;
vio_0 vio_image (.clk(i_FPGA_GCLK25M),                // input wire clk.probe_in0(IMAGE_NUM),    // input wire [1 : 0] probe_in0.probe_out0(reboot_valid),  // output wire [0 : 0] probe_out0.probe_out1(reboot_addr)  // output wire [31 : 0] probe_out1
);

3、ICAPE3實現IPROG重構

//------------------image exchange--------------
wire			ICAPE_CLK;
wire	[31:0]	ICAPE_O;
reg				ICAPE_CSIB;
wire	[31:0]	ICAPE_I;
reg				ICAPE_RDWRB;localparam	[31:0]	Dummy		= 32'hFFFFFFFF;
localparam	[31:0]	SYNC_WORD	= 32'hAA995566;
localparam	[31:0]	NOOP		= 32'h20000000;
localparam	[31:0]	WR_WBSTAR	= 32'h30020001;
localparam	[31:0]	WR_CMD		= 32'h30008001;
localparam	[31:0]	IPROG		= 32'h0000000F;ICAPE3 #(.DEVICE_ID(32'h04AC2093),     // Specifies the pre-programmed Device ID value to be used for simulation// purposes..ICAP_AUTO_SWITCH("DISABLE"), // Enable switch ICAP using sync word..SIM_CFG_FILE_NAME("NONE")    // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation// model.)ICAPE3_multiboot (.AVAIL   (AVAIL       ),    // 1-bit output: Availability status of ICAP..O       (ICAPE_O     ),    // 32-bit output: Configuration data output bus..PRDONE  (            ),    // 1-bit output: Indicates completion of Partial Reconfiguration..PRERROR (            ),    // 1-bit output: Indicates error during Partial Reconfiguration..CLK     (ICAPE_CLK   ),    // 1-bit input: Clock input..CSIB    (ICAPE_CSIB  ),    // 1-bit input: Active-Low ICAP enable..I       (ICAPE_I     ),    // 32-bit input: Configuration data input bus..RDWRB   (ICAPE_RDWRB )     // 1-bit input: Read/Write Select input.);
assign ICAPE_CLK = i_FPGA_GCLK25M;wire	[31:0]	WBSTAR		;
assign  WBSTAR = reboot_addr;//ICAPE位翻轉
reg		[31:0]	wrdat;
assign	ICAPE_I	= {wrdat[24], wrdat[25], wrdat[26], wrdat[27], wrdat[28], wrdat[29], wrdat[30], wrdat[31], wrdat[16], wrdat[17], wrdat[18], wrdat[19], wrdat[20], wrdat[21], wrdat[22], wrdat[23], wrdat[8], wrdat[9], wrdat[10], wrdat[11], wrdat[12], wrdat[13], wrdat[14], wrdat[15], wrdat[0], wrdat[1], wrdat[2], wrdat[3], wrdat[4], wrdat[5], wrdat[6], wrdat[7]};reg	[1:0]	reboot_valid_r;
reg [3:0]   send_cmd_cnt  = 4'hf;always @(posedge i_FPGA_GCLK25M) reboot_valid_r	= {reboot_valid_r[0], reboot_valid};
always @(posedge i_FPGA_GCLK25M) beginif(reboot_valid_r == 2'b01) send_cmd_cnt	<= 4'd0;else if(send_cmd_cnt != 4'hf) send_cmd_cnt	<= send_cmd_cnt + 1'b1; 	
endalways @(posedge i_FPGA_GCLK25M) begincase(send_cmd_cnt)4'd0: begin   //DUMMYwrdat			<= Dummy;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd1: begin   //SYN_WORDwrdat			<= SYNC_WORD;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd2: begin   //NOOP1wrdat			<= NOOP;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd3: begin   //WR_WBSTARwrdat			<= WR_WBSTAR;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd4: begin   //WBSTARwrdat			<= WBSTAR;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd5: begin   //WR_CMDwrdat			<= WR_CMD;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd6: begin   //IPROGwrdat			<= IPROG;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd7: begin   //NOOP2wrdat			<= NOOP;ICAPE_CSIB		<= 1'b0;ICAPE_RDWRB	    <= 1'b0;end4'd8: begin   //STOPwrdat			<= 32'd0;ICAPE_CSIB		<= 1'b1;ICAPE_RDWRB	    <= 1'b1;enddefault: beginwrdat			<= 32'd0;ICAPE_CSIB		<= 1'b1;ICAPE_RDWRB	    <= 1'b1;endendcase
end

4、mcs文件生成
??如下圖所示設置地址和bit,生成mcs并燒寫flash
在這里插入圖片描述
5、mcs燒寫及切換
??mcs燒寫完成后,通過VIO配置相應啟動地址,產生使能完成重加載,VIO配置加載后觀察IMAGE ID如下:
(1)addr=0
在這里插入圖片描述
(2)addr=0x00200000
在這里插入圖片描述
(3)addr=0x00400000
在這里插入圖片描述
(4)addr=0x00600000
在這里插入圖片描述
參考工程請點擊
鏈接:https://download.csdn.net/download/u014035968/90962933

參考文件

ug570-ultrascale-configuration
ug470-7Series-configuration

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84500.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springMVC-11 中文亂碼處理

前言 本文介紹了springMVC中文亂碼的解決方案&#xff0c;同時也貼出了本人遇到過的其他亂碼情況&#xff0c;可以根據自身情況選擇合適的解決方案。 其他-jdbc、前端、后端、jsp亂碼的解決 Tomcat導致的亂碼解決 自定義中文亂碼過濾器 老方法&#xff0c;通過javaW…

mysql-innoDB存儲引擎事務的原理

InnoDB 存儲引擎支持 ACID 事務&#xff0c;其事務機制是通過 Redo Log&#xff08;重做日志&#xff09;、Undo Log&#xff08;回滾日志&#xff09; 和 事務日志系統 來實現的。下面詳細解析 InnoDB 事務的工作原理。 1.事務的基本特性&#xff08;ACID&#xff09; 特性描…

在GIS 工作流中實現數據處理

通過將 ArcPy 應用于實際的 GIS 工作流&#xff0c;我們可以高效地完成數據處理任務&#xff0c;節省大量時間和精力。接下來&#xff0c;本文將結合具體案例&#xff0c;詳細介紹如何運用 ArcPy 實現 GIS 數據處理的全流程。 數據讀取與合并 假設我們有多個 shapefile 文件&a…

第十四屆藍橋杯_省賽B組(C).冶煉金屬

題目如下: 拿到題我們來看一下&#xff0c;題目的意思&#xff0c;就是求出N個記錄中的最大最小值&#xff0c;言外之意就是&#xff0c;如果超過了這個最大值不行&#xff0c;如果小于這個最小值也不行&#xff0c;所以我們得出&#xff0c;這道題是一個二分答案的題目&#x…

??Android 如何查看CPU架構?2025年主流架構有哪些??

在開發安卓應用或選購手機時&#xff0c;了解設備的CPU架構至關重要。不同的架構影響性能、兼容性和能效比。那么&#xff0c;??如何查看安卓設備的CPU架構&#xff1f;2025年主流架構有哪些&#xff1f;不同架構之間有什么區別&#xff1f;?? 本文將為你詳細解答。 ??1.…

飛算 JavaAI 2.0.0:開啟老項目迭代維護新時代

在軟件開發領域&#xff0c;老項目的迭代與維護一直是開發團隊面臨的難題。代碼邏輯混亂、技術棧陳舊、開發效率低下等問題&#xff0c;讓老項目改造猶如一場 “噩夢”。而飛算 JavaAI 2.0.0 版本的正式上線&#xff0c;通過三大核心能力升級&#xff0c;為老項目開發帶來了全新…

Linux初步介紹

Linux是一種開源的類Unix操作系統內核&#xff0c;廣泛應用于服務器、桌面、嵌入式設備等各種計算平臺。它由Linus Torvalds于1991年首次開發&#xff0c;因其穩定性、安全性和靈活性&#xff0c;被全球開發者和企業廣泛采用。 特點&#xff1a; 開放性&#xff08;開源&#…

OneNet + openssl + MQTT

1.OneNet 使用的教程 1.在網絡上搜索onenet&#xff0c;注冊并且登錄賬號。 2.產品服務-----物聯網服務平臺立即體驗 3.在底下找到立即體驗進去 4.產品開發------創建產品 5.關鍵是選擇MQTT&#xff0c;其他的內容自己填寫 6.這里產品以及開發完成&#xff0c;接下來就是添加設…

行為設計模式之Memento(備忘錄)

行為設計模式之Memento&#xff08;備忘錄&#xff09; 前言&#xff1a; 備忘錄設計模式&#xff0c;有點像vmware快照可以回滾&#xff0c;idea的提交記錄同樣可以混滾&#xff0c;流程引擎中流程可以撤銷到或者回滾到某個指定的狀態。 1&#xff09;意圖 在不破壞封裝性的…

動畫直播如何顛覆傳統?解析足球籃球賽事的數據可視化革命

在5G和AI技術快速發展的今天&#xff0c;體育賽事直播正在經歷一場深刻的變革。傳統視頻直播雖然能提供真實的比賽畫面&#xff0c;但在戰術可視化、數據深度和交互體驗方面存在明顯短板。而基于實時數據驅動的動畫直播技術&#xff0c;正通過創新的方式彌補這些不足&#xff0…

二刷蒼穹外賣 day01

nginx nginx反向代理 將前端發送的請求由nginx轉發到后端服務器 好處&#xff1a; 提速&#xff1a;nginx本身可緩存數據 負載均衡&#xff1a;配置多臺服務器&#xff0c;大量請求來臨可均衡分配 保證后端安全&#xff1a;不暴露后端服務真實地址 server{listen 80;server_…

5.2 HarmonyOS NEXT應用性能診斷與優化:工具鏈、啟動速度與功耗管理實戰

HarmonyOS NEXT應用性能診斷與優化&#xff1a;工具鏈、啟動速度與功耗管理實戰 在HarmonyOS NEXT的全場景生態中&#xff0c;應用性能直接影響用戶體驗。通過專業的性能分析工具鏈、針對性的啟動速度優化&#xff0c;以及精細化的功耗管理&#xff0c;開發者能夠構建"秒…

模型訓練-關于token【低概率token, 高熵token】

Qwen團隊新發現&#xff1a;大模型推理能力的提高僅由少數高熵 Token 貢獻 不要讓低概率token主導了LLM的強化學習過程 一 低概率詞元問題 論文&#xff1a;Do Not Let Low-Probability Tokens Over-Dominate in RL for LLMs 在RL訓練過程中&#xff0c;低概率詞元&#xff08…

XCTF-web-easyupload

試了試php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都沒有用 嘗試.user.ini 抓包修改將.user.ini修改為jpg圖片 在上傳一個123.jpg 用蟻劍連接&#xff0c;得到flag

gRPC、WebSocket 與 HTTP 的核心區別對比

gRPC、WebSocket 與 HTTP 的核心區別對比&#xff0c;涵蓋通信模式、協議特性及適用場景&#xff1a; &#x1f504; ?一、通信模式? ?HTTP? ?單向請求-響應?&#xff1a;客戶端發起請求&#xff0c;服務器返回響應后連接立即關閉13。?無狀態協議?&#xff1a;每次請求…

Android第十三次面試總結(四大 組件基礎)

Activity生命周期和四大啟動模式詳解 一、Activity 生命周期 Activity 的生命周期由一系列回調方法組成&#xff0c;用于管理其創建、可見性、焦點和銷毀過程。以下是核心方法及其調用時機&#xff1a; ?onCreate()?? ?調用時機?&#xff1a;Activity 首次創建時調用。?…

講講JVM的垃圾回收機制

垃圾回收就是對內存堆中已經死亡或者長時間沒有使用的對象進行清楚或回收。 JVM 在做 GC 之前&#xff0c;會先搞清楚什么是垃圾&#xff0c;什么不是垃圾&#xff0c;通常會通過可達性分析算法來判斷對象是否存活。 在確定了那些垃圾可以被回收后&#xff0c;垃圾回收器&…

QT軟件外包開發費用

國內QT軟件外包開發費用是一個非常復雜的問題&#xff0c;沒有一個固定的價格&#xff0c;它受到多種因素的影響。以下將詳細闡述影響QT軟件外包開發費用的主要因素&#xff0c;并提供大致的價格區間供參考&#xff08;請注意&#xff0c;這些價格僅為估算&#xff0c;實際報價…

iOS 16 SwiftUI 優雅跳轉實踐:用枚舉路由和 NavigationStack 實現多頁面導航

引言&#xff1a;跳轉的混亂與優雅的必要性 SwiftUI 給我們帶來了聲明式界面的全新開發體驗&#xff0c;但當涉及到頁面跳轉時&#xff0c;許多開發者仍然面臨一些“舊痛”。最初的 NavigationLink(destination:isActive:) 或 sheet(isPresented:) 等方式雖然能用&#xff0c;…

TikTok矩陣養號實戰:住宅IP純凈度與設備指紋聯動方案

在TikTok矩陣運營中&#xff0c;住宅IP純凈度和設備指紋管理是規避風控的核心。以下方案整合多平臺風控邏輯與實戰數據&#xff0c;覆蓋環境隔離、行為模擬到風險防控全流程。 &#x1f527; 一、住宅IP純凈度維持策略 IP篩選與驗證 靜態住宅IP優選&#xff1a;核心賬號綁定目標…