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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;核心账号绑定目标…