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.png f9f3189f5664c1ce93ef884ae66aca1f.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设计,关注我们的公众号,探索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值