multiboot远程升级详解

部署运行你感兴趣的模型镜像

点击蓝字关注我们

关注、星标公众号,精彩内容每日送达
来源:网络素材

Multiboot功能介绍

Multiboot是指多镜像启动,比如在FPGA的加载flash里面存放2个或者多个FPGA的配置文件,每个配置文件都可以单独完成FPGA的逻辑配置,如下图1所示;

4ab91552e2af747344896e3555f93673.png

图1 multiboot Flash中配置镜像文件的结构

如上图所示,Flash里面包含了Golden Bitstream和Update Bistream,远程升级是指通过网络或者其他远程设备对Flash里面的Update Bistream进行升级,而Golden Bitstream通常是FPGA的基本逻辑版本,主要是实现了升级部分的功能,从应用上要求不管发生什么情况,必须保证Golden Bitstream的完整性,并能够加载FPGA,保证能够通过远程对FPGA进行升级。

通过Multiboot功能我们可以实现使用Golden Bitstream或者Update Bistream对FPGA进行加载,从而在FPGA里面实现Golden Bitstream或者Update Bistream的功能,Update Bistream通常是用户产品实际使用的逻辑功能。

Bitstream文件介绍

Bitstream文件主要包括Header和FPGA逻辑配置数据两部分,如下图2所示:

6473fbea8bddcae0d4d7102a139cb301.png

图2 Bitstream文件结构

其中,Header主要是为FPGA配置起引导作用,FPGA刚上电后会去读取Header的内容并对内容进行分析,从而完成内部逻辑配置,Header的内容由若干条命令组成,如下3图所示:

26950d169926c08777547e3f8db34913.png

图3 Header示例

如上图3所示,对于multiboot我们主要关注同步字,timer\WBSTAR\IPROG和Fallback这5个字段:

同步字:标志一个完整配置文件的起始位置,FPGA读取到这个同步字就会认为后面的数据是一个完整的配置文件数据,包括Header和FPGA配置数据;

Timer:设置超时时间的命令,其后面4个字节为超时时间,multiboot提供了加载超时机制,主要是针对Update(用户逻辑)镜像,如果在计数时间内没有完成Update的加载则自动加载Golden镜像;

WBSTAR:指示Update镜像的起始位置,其后面4个字节即为地址值,FPGA会根据该地址去加载Update镜像;

IPROG:Internal PROGRAM,当FPGA检测到该命令后会自动跳到WBSTAR指定的地址加载Update镜像;

Fallback:如果使能了Fallback则在加载Update的过程中如果检测到错误就自动回跳到Golden镜像进行加载;

Multiboot功能实现

上述讲解了配置文件里面的同步字,timer\WBSTAR\IPROG和Fallback这5个字段,Multiboot功能的实现主要就是根据这5个字段来完成,流程图如下图4所示:

a712784c74e011f27466715182c5e673.png

图4 multiboot流程图

Step1:

FPGA上电后自动从flash的0地址开始读取数据,通常Golden镜像的起始地址为0,当FPGA读取到Golden镜像同步字,WBSTAR和IPROG这三个命令后就会自动跳转到Update镜像的起始地址并加载Update镜像,如果Timer命令后面4个字节为非0(说明设置了超时机制)则启动超时机制;

其中WBSTAR,IPROG和Timer可以在VIVADO工程里面进行设置,工程需要先综合并生成bit文件后右键点击Generate Bitstream->点击弹出的Bitstream Settings->进入settings界面后点击Configure additional bitstream settings->点击Configurationg后就可以进行设置了,如下图5所示:02722425fe95581a56688ee7010a86ed.png

cbc88c7544c745e8571bd4da19c5141d.pngf9f3189f5664c1ce93ef884ae66aca1f.png

图5 multiboot在VIVADO中的配置做了图5的配置后,工程的XDC文件会自动增加下面的约束:

79ee68d87ba8f2ca812e57ef446c50c8.png

重新生成BIT文件后,这些约束的信息就会自动添加到Header里面,如果后续需要修改这些值可以直接在XDC里面修改。

说明:上述multiboot的配置应该在Golden对应的工程里面配置,Update的工程不用配置,因为FPGA上电的时候就是从Golden的Header里面获取这些信息的。当Golden和Update的配置文件都生成后可以通过下面的TCL指令在VIVADO里面直接生成一个MCS文件:

21b459a1dafb6b49d197ffe7b799b210.png

最后直接把生成的MCS文件烧录到flash就可以了。

Setp2:

检测到WBSTAR和IPROG命令后跳到Update镜像起始地址。

Setp3:

加载Update镜像。

Setp4:

如果加载过程中出现如下错误则回跳到Golden镜像加载,如果没有错误就不会走到本步骤。

CRC error

IDCODE error

Watchdog timer time-out error

Setp5:

加载Golden镜像,如果没有错误就不会走到本步骤。

说明:FPGA一旦检测到IPROG命令则启动Update镜像的加载流程,同时会检测加载过程出现上述列出的CRC,IDCODE和Watchdog timer错误,一旦检测到错误则自动回跳到0地址加载Golden镜像。

远程升级实现

远程升级是指本地设备对终端产品的FPGA程序进行升级,主要是运用了multiboot功能,升级的是flash里面的Update镜像,如下图6所示:

dce8abbb42e5c23ec2918b46611f0c8f.png

图6 远程设计框图

升级的传输通道可以是以太网\PCIE\USB等总线,那么远程升级主要是解决2个问题,第一个问题是如何把远程设备传输过来的数据通过FPGA写入Flash,第二个问题是如何保证Flash升级功能的完整性,即在任何情况下(比如升级过程中突然断电)要保证Golden镜像的完整性,确保在升级失败的情况下可以从Golden镜像启动重新进行升级。

对于第一个问题,AMD提供了解决方案,提供了通过FPGA写Flash的逻辑代码,包括SpiFlashProgrammer.vhd和SpiSerDes.vhd文件,如下图7所示:

4c8c950775743d72352f45fa0ef2b43f.png

图7 Flash升级逻辑架构

SpiFlashProgrammer.vhd实现了数据接收以及Flash写入数据的流程,SpiSerDes.vhd实现了把SpiFlashProgrammer.vhd模块传输过来的数据转换成SPI的串行数据,并实现SPI读写时序,用户只需要把远程接收数据写入SpiFlashProgrammer.vhd模块即可。

第二个问题,如何保证任何情况下保证Golden镜像的完整性,并能正常从Golden镜像启动。这里会有一个问题,如果Update镜像在升级的过程中遭到损坏可能会导致重新上电后FPGA去加载Update镜像的时候在解析被损坏过的数据包的时候会停止加载,并且不能回跳到Golden镜像加载,这样会导致FPGA无法正常启动和升级。

从上文对multiboot的描述中我们知道FPGA是通过同步字AA995566来找到配置内容,当FPGA上电后从Flash中寻找到Golden镜像的Header同步字的时候就会去分析这个Header,而这个Header包括了WBSTAR和IPROG,会导致FPGA会去加载Update镜像,而如果Update镜像数据包被破坏就有可能会导致FPGA加载失败。

我们的解决方案是把包括WBSTAR和IPROG的Header独立出来,我们称这个Header为multiboot Header,Golden镜像的Header变成正常的不带WBSTAR和IPROG的Header。只要我们保证如果Update镜像没有升级成功的情况下不会寻找multiboot Header,就能保证FPGA不会从Update镜像启动,而是直接从Golden镜像启动。

这个过程我们需要远程升级软件来控制,首先我们把multiboot Header放到flash的第一个扇区,接着放Golden镜像,当软件升级开始的时候先把multiboot Header的内容擦除掉,当升级完成后通过回读flash内Update镜像的数据来确认升级是否成功,如果升级成功,软件就把multiboot Header的内容回写到flash的第一个扇区(由于flash是按照扇区操作的,为了避免擦除multiboot Header的内容的时候影响到其它数据,我们需要把multiboot Header单独放到第一个扇区),如果升级失败则不会回写multiboot Header。因此,如果升级失败(由于突然断电或者其它因素导致),FPGA在上电后就找不到multiboot Header,然后就会直接往下寻找到Golden镜像,就会直接加载Golden镜像。

我们需要注意的是升级软件任何时候都只对multiboot Header和Update镜像进行操作,不能操作Golden镜像的内容,保证Golden镜像的完整性。Flash内容结构以及启动流程如下图8所示:

219615de2a9767ad99daadcc2a2b0461.png

Multiboot header主要是包括了同步字AA995566,WBSTAR和IPROG命令,FPGA启动加载时会按照如下步骤:

Step 1:

从0地址读取Multiboot header;

Step 2:

如果读取到正常的Multiboot header则跳转的Update镜像进行加载;

Step 3;

如果读取不到正常的Multiboot header则直接加载Golden镜像;

9df865573457bcff751ea92bfb7054ce.jpeg

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

<think>嗯,用户问的是FPGAMultiboot远程升级是怎么回事。我需要先回忆一下相关知识,确保自己理解正确。FPGAMultiboot,应该是指通过远程方式更新FPGA的配置文件,比如通过Golden镜像和更新镜像的切换,保证系统可靠性的机制。 首先,得确定Multiboot的基本概念。FPGA通常从外部存储器加载配置数据,比如Flash。Multiboot允许FPGA在启动时选择不同的配置文件,这样当主镜像出现问题时,可以回退到备份镜像,避免系统崩溃。远程升级的话,可能是指通过网络或其他通信方式,将新的配置文件写入Flash的特定位置,然后触发FPGA重新加载。 那用户可能关心的是实现步骤或者原理。比如,如何设计两个镜像区域,Golden和更新区域。Golden是稳定版本,更新区域存放新版本。FPGA上电后,先尝试加载更新区域的镜像,如果失败(比如CRC校验错误),则自动回退到Golden镜像。远程升级的过程可能包括接收新配置文件,写入Flash,然后通过指令让FPGA重新启动并加载新配置。 还要注意一些细节,比如如何保证升级过程的安全性,防止断电导致系统无法启动。可能需要在Flash中划分多个存储区域,并且设计可靠的切换机制。另外,ICAPE原语的使用,Xilinx的FPGA可能需要通过内部配置访问端口来触发重配置,从而切换到另一个镜像。 用户可能是在做远程维护或者需要高可靠性的系统,所以需要了解Multiboot的实现流程和注意事项。可能需要解释Multiboot的流程步骤,比如镜像存储结构、触发重配置的方式、错误处理机制等。 另外,需要确认不同厂商的FPGA是否支持Multiboot,比如Xilinx和Intel可能实现方式不同。但用户提到的Multiboot,可能特指Xilinx的方案,因为Multiboot是Xilinx的术语。如果是其他厂商,可能名称不同,比如Intel可能叫远程系统升级(RSU)。 还要考虑用户可能的实际应用场景,比如工业控制、通信设备等,这些场景下远程升级的重要性,以及如何确保升级过程中的系统稳定性。可能需要提到看门狗定时器或者心跳机制,确保在升级失败时能及时回滚。 总结来说,回答需要包括Multiboot的定义、工作原理、实现步骤、远程升级的过程、错误恢复机制以及应用场景。同时要使用用户容易理解的语言,避免过于专业的术语,必要时举例说明。</think>FPGAMultiboot(多重启动)远程升级是一种高可靠性设计技术,主要用于**实现设备固件的远程更新和故障回退**。以下是核心要点分步解析: --- ### **一、基本原理** 1. **双镜像存储** FPGA外部存储器(如Flash)中划分**两个独立配置区域**: - **Golden镜像**:基础稳定版本,作为"安全备份" - **更新镜像**:远程推送的新版本,存放于另一地址段 2. **启动优先级** FPGA上电后: - 优先尝试加载**更新镜像** - 若更新镜像损坏(CRC校验失败),自动回退加载**Golden镜像** --- ### **二、远程升级流程** 1. **新固件传输** - 通过以太网、UART、SPI等通信接口接收新配置文件 - 存储到Flash的**更新镜像区域**(需避开Golden镜像地址) 2. **触发重配置** 发送指令使FPGA执行以下操作: - 通过**ICAPE(Internal Configuration Access Port)原语**(Xilinx器件) - 或**远程系统更新IP核**(Intel/Altera器件) - 强制重启并从**更新镜像地址**重新加载配置 3. **状态验证** - 成功加载新镜像 → 系统正常运行 - 加载失败(如CRC错误)→ 自动切换回Golden镜像 --- ### **三、关键技术细节** 1. **地址跳转控制** 使用**WBSTAR(Warm Boot Start Address Register)**(Xilinx)或类似寄存器指定新镜像的存储地址。 2. **看门狗保护** - 在配置文件中嵌入**Watchdog Timer** - 若新镜像运行异常(如未及时喂狗),触发系统复位并回退 3. **分段存储管理** ```verilog // 示例:Xilinx ICAPE2原语触发Multiboot ICAPE2 #( .ICAP_WIDTH("X32") // 32位配置接口 ) ICAPE2_inst ( .CLK(sys_clk), .CSIB(1'b0), // 使能配置访问 .I(32'hFFFFFFFF), // 填充无效指令 .O(), // 输出悬空 .RDWRB(1'b0) // 写操作 ); ``` --- ### **四、典型应用场景** 1. **工业设备远程维护** 无需现场操作即可修复逻辑漏洞或更新功能 2. **高可靠性系统** 航天、医疗设备等对宕机敏感的领域,确保单点故障可恢复 3. **OTA升级** 物联网设备通过无线网络实现固件更新 --- ### **五、注意事项** 1. **Golden镜像保护** - 禁止远程覆盖此区域 - 物理写保护开关(如Flash的WP引脚) 2. **断电保护机制** - 使用**双缓冲存储**:先写入临时区域,校验通过后再复制到更新区 - 超级电容/UPS确保升级过程不掉电 3. **版本兼容性** 新镜像需保持硬件接口(如引脚分配、时钟拓扑)与旧版本兼容 --- ### **总结** Multiboot远程升级通过**双镜像冗余设计 + 地址跳转控制**,实现了FPGA固件的安全更新。其核心价值在于**平衡了系统可靠性与可维护性**,尤其适合需要长期稳定运行且无法频繁物理接触的设备场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值