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
相关文章:

Xilinx FPGA 重构Multiboot ICAPE2和ICAPE3使用
一、FPGA Multiboot 本文主要介绍基于IPROG命令的FPGA多版本重构,用ICAP原语实现在线多版本切换。需要了解MultiBoot Fallback点击链接。 如下图所示,ICAP原语可实现flash中n1各版本的动态切换,在工作过程中,可以通过IPROG命令切…...

Redis专题-基础篇
题记 本文涵盖了Redis的各种数据结构和命令,Redis的各种常见Java客户端的应用和最佳实践 jedis案例github地址:https://github.com/whltaoin/fedis_java_demo SpringbootDataRedis案例github地址:https://github.com/whltaoin/springbootData…...

springMVC-11 中文乱码处理
前言 本文介绍了springMVC中文乱码的解决方案,同时也贴出了本人遇到过的其他乱码情况,可以根据自身情况选择合适的解决方案。 其他-jdbc、前端、后端、jsp乱码的解决 Tomcat导致的乱码解决 自定义中文乱码过滤器 老方法,通过javaW…...

【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程
前言 越狱iPhone之后,一定记得安装一下用于屏蔽更新的描述文件(可使用爱思助手) 因为即便关闭了自动更新,iPhone仍会在某些时候自动更新系统,导致越狱失效;更为严重的是,更新后的iOS版本可能是…...
MongoDB检查慢查询db.system.profile.find 分析各参数的作用
db.system.profile.find() 是分析 MongoDB 性能的关键工具,其返回的文档包含丰富的性能指标。下面是对各参数的详细解释和优化建议: {"op": "query", // 操作类型(query/update/remove)"ns": "test.users", // 命名…...

智能标志桩图像监测装置如何守护地下电缆安全
在现代城市基础设施建设中,大量电缆、管道被埋设于地下,这虽然美化了城市景观,却也带来了新的安全隐患。施工挖掘时的意外破坏、自然灾害的影响,都可能威胁这些"城市血管"的安全运行。 传统的地下设施标识方式往往只依…...

【网站建设】网站 SEO 中 meta 信息修改全攻略 ✅
在做 SEO 优化时,除了前一篇提过的Title之外,meta 信息(通常指 <meta> 标签)也是最基础、最重要的内容之一,主要包括: <meta name="description"> <meta name="keywords"> 搜索引擎重点参考这些信息,决定你网页的展示效果与排名。…...

计算机视觉处理----OpenCV(从摄像头采集视频、视频处理与视频录制)
一、采集视频 VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自 多种源的视频。 cv2.VideoCapture() 打开摄像头或视频文件。 cap cv2.VideoCapture(0) # 0表示默认摄像头,1是第二个摄像头,传递视频文件路径也可以 …...
elasticsearch基本操作笔记
1.通过kibana查看elasticsearch版本信息 a.左上角三道横->Management->Dev Tools b.GET / 执行 c.执行结果 { “name” : “xxxx”, “cluster_name” : “xxxxxxx”, “cluster_uuid” : “vl1UudAoQp-aHWAzyPoMyw”, “version” : { “number” : “7.15.1”, “build…...
LVGL手势识别事件无上报问题处理记录
最近在使用LVGL8.3开源库开源UI界面时,碰到使用FB驱动显示UI时,触摸屏手势识别事件接收不到的情况,通过如下调整可以处理该问题: 1、创建Top Object时,不能使用如下语句: lv_obj_t *page_obj = lv_obj_create(lv_scr_act()); 而要使用如下语句: lv_obj_t *page_obj =…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- 第一篇:MIPI CSI-2基础入门
第一篇:MIPI CSI-2基础入门 1. 为什么需要CSI-2? 痛点场景对比 (用生活案例降低理解门槛) 传统并行接口CSI-2接口30根线传输720P图像仅需5根线(1对CLK4对DATA)线距>5cm时出现重影线缆可长达1…...

变幻莫测:CoreData 中 Transformable 类型面面俱到(一)
概述 各位似秃似不秃小码农们都知道,在苹果众多开发平台中 CoreData 无疑是那个最简洁、拥有“官方认证”且最具兼容性的数据库框架。使用它可以让我们非常方便的搭建出 App 所需要的持久存储体系。 不过,大家是否知道在 CoreData 中还存在一个 Transfo…...

开源技术驱动下的上市公司财务主数据管理实践
开源技术驱动下的上市公司财务主数据管理实践 —— 以人造板制造业为例 引言:财务主数据的战略价值与行业挑战 在资本市场监管日益严格与企业数字化转型的双重驱动下,财务主数据已成为上市公司财务治理的核心基础设施。对于人造板制造业而言࿰…...
婚恋小程序直播系统框架搭建
逻辑分析 直播流管理:需要处理主播端的直播流推送,确保直播流能够稳定、高效地传输到各个观看用户的设备上。这涉及到选择合适的流媒体协议,如 RTMP(Real-Time Messaging Protocol)、HLS(HTTP Live Streami…...
day46 python预训练模型补充
目录 一、预训练模型的背景知识 二、实验过程 (一)实验环境与数据准备 (二)预训练模型的选择与适配 (三)训练策略 三、实验结果与分析 四、学习总结与展望 一、预训练模型的背景知识 在传统的神经网…...
CCPC chongqing 2025 H
题目链接:https://codeforces.com/gym/105887 题目背景: 方框上有上下两排小球,下面的紧贴框底,上面的部分贴框顶,每牌小球上都有一个一个数字(1~n),将相同的小球连接到一起,是否在不交叉的情况…...

Java建造者模式(Builder Pattern)详解与实践
一、引言 在软件开发中,我们经常会遇到需要创建复杂对象的场景。例如,构建一个包含多个可选参数的对象时,传统的构造函数或Setter方法可能导致代码臃肿、难以维护。此时,建造者模式(Builder Pattern)便成为…...
ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
目录 一、问题 二、解决方法 三、总结 一、问题 1.代码里有一个基于ant封装的公共组件数字输入框,测试突然说 无效了,输入其他字符也会显示;改了只有又发现某些 输入法 需要连续输入两次 才能显示出来。 二、解决方法 1.就离谱࿰…...
使用ORM Bee (ormbee) ,如何利用SQLAlchemy的模型生成数据库表.
使用ORM Bee (ormbee) ,如何利用SQLAlchemy的模型生成数据库表. 将原来SQLAlchemy的模型,修改依赖为: from bee.helper import SQLAlchemy 然后就可以开始生成了。很简单,主要是两个接口。 db.create_all(True) #创建所有模型的表…...
【win | 自动更新关闭】win11
利用本地组策略编辑器 对于Windows 11专业版或更高版本的用户,可以利用本地组策略编辑器来完全关闭自动更新。按下“WinR”键,输入“gpedit.msc”并回车。在本地组策略编辑器中,依次展开“计算机配置”>“管理模板”>“Windows组件”&…...

win32相关(IAT HOOK)
IAT HOOK 什么是IAT Hook? IAT Hook(Import Address Table Hook,导入地址表钩子)是一种Windows平台下的API钩取技术,通过修改目标程序的导入地址表(IAT)来拦截和重定向API调用 在我们之前学习pe文件结构的导入表时&am…...
大模型高效提示词Prompt编写指南
大模型高效Prompt编写指南 一、引言二、核心原则1. 清晰性原则:明确指令与期望2. 具体性原则:提供详细上下文3. 结构化原则:组织信息的逻辑与层次4. 迭代优化原则:通过反馈改进Prompt5. 简洁性原则:避免冗余信息 三、文…...

零基础玩转物联网-串口转以太网模块如何快速实现与TCP服务器通信
目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件准备 2.3 驱动检查 3 TCP服务器通信配置与交互 3.1 硬件连接 3.2 开启TCP服务器 3.3 打开配置工具读取基本信息 3.4 填写连接参数进行连接 3.5 通信测试 4 总结 1 前言 TCP是TCP/IP体系中的传输层协议,全称为Transmiss…...
十一、【ESP32开发全栈指南: TCP通信服务端】
一、TCP与UDP协议对比 1.1 基本特性比较 TCP(传输控制协议)和UDP(用户数据报协议)是两种最常用的传输层协议,它们在ESP32网络编程中都有广泛应用: 连接方式 TCP是面向连接的协议,通信前需要先建立连接(三次握手)UDP是无连接的协议ÿ…...

ESP32开发之LED闪烁和呼吸的实现
硬件电路介绍GPIO输出模式GPIO配置过程闪烁灯的源码LED PWM的控制器(LEDC)概述LEDC配置过程及现象整体流程 硬件电路介绍 电路图如下: 只要有硬件基础的应该都知道上图中,当GPIO4的输出电平为高时,LED灯亮,反之则熄灭。如果每间…...

【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录、退款业务记录
【产品业务设计】支付业务设计规范细节记录,含订单记录、支付业务记录、支付流水记录 前言 我为什么要写这个篇文章 总结设计经验生成设计模板方便后期快速搭建 一个几张表 一共5张表; 分别是: 订单主表:jjy_orderMain订单产…...

2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
项目背景:近年来,云计算、AI人工智能、大数据等信息技术的不断发展、各行各业的信息电子化的步伐不断加快、信息化的水平不断提高,网络安全的风险不断累积,金融证券行业面临着越来越多的威胁挑战。特别是近年以来,开源…...
Linux安装jdk、tomcat
1、安装jdk sudo yum install -y java-1.8.0-openjdk-devel碰到的问题:/var/run/yum.pid 已被锁定 Another app is currently holding the yum lock; waiting for it to exit… https://blog.csdn.net/u013669912/article/details/131259156 参考&#…...

WebRTC通话原理与入门难度实战指南
波煮的实习公司主要是音视频业务,所以最近在补习WebRTC的相关内容,会不定期给大家分享学习心得和笔记。 文章目录 WebRTC通话原理进行媒体协商:彼此要了解对方支持的媒体格式网络协商:彼此要了解对方的网络情况,这样才…...

N元语言模型 —— 一文讲懂!!!
目录 引言 一. 基本知识 二.参数估计 三.数据平滑 一.加1法 二.减值法/折扣法 编辑 1.Good-Turing 估计 编辑 2.Back-off (后备/后退)方法 3.绝对减值法 编辑4.线性减值法 5.比较 三.删除插值法(Deleted interpolation) 四.模型自适应 引言 本章节讲的…...