碎碎思 · 10月30日

FPGA实现串口升级及MultiBoot(十一)QuickBoot介绍

MultiBoot在流行前官方也推出过QuickBoot作为保证升级的方式,但是不知什么原因,该方式的参考例程已经被官方PASS掉了,下面是官方的说明:

https://adaptivesupport.amd.c...

image.png

至于原因,后面我们总结时候再分析。

介绍

使用MultiBoot进行远程更新的架构如下:

image.png
图1:MultiBoot远程更新架构-来源:XAPP1081

MultiBoot 的两个程序都需包含 warm boot jump sequence,warm boot jump sequence 包含 WBSTRA(用于指定程序加载地址)、IPROG(用于重启 FPGA 配置并从 WBSTAR 指定的地址开始加载)

而QuickBoot的升级方式则复杂很多,包括QuickBoot header

critical switch word;warm boot jump sequence;golden bitstream image area;update bitstream image area几个部分。

image.png
图2:QuickBoot远程更新架构-来源:XAPP1081

由于FPGA配置是从flash的0地址开始读取数据,所以将QuickBoot Header放在0地址非常关键。QuickBoot Header包括两个部分,第一部分就是关键开关字,第二部分就是热启动跳转序列。

关键开关字,根据配置模式的不同而不同,如BPI模式就是0x0000BB,而SPI模式就是0x0xAA995566。

如果关键开关字是ON,那么就执行热启动跳转序列,热启动跳转序列包含了需要跳转的地址。然后就跳转到update bitstream area。并且将update bitstream下载下来。

如果关键开关字是OFF,那么就忽略热启动跳转序列,并且继续往下读取数据,这样就可以将golden bitstream area的数据下载到FPGA。

QuickBoot配置模式

支持 4 种配置模式

  • SPI mode
  • BPI mode
  • Encrypted bitstreams
  • Multiple FPGA configuration daisy-chains

升级程序包组成

image.png
图3:QuickBoot升级程序包组成-来源:XAPP1081

程序包含 3 部分

  • QuickBoot header
    包括:critical switch word:用于指示 FPGA 是否执行 warm boot jump sequence(warm boot jump sequence:包含 WBSTRA(用于指定程序加载地址)、IPROG(用于重启 FPGA 配置并从 WBSTAR 指定的地址开始加载))

image.png

  • golden bitstream image area-Golden位流
  • update bitstream image area-Update位流(即我们之前说的MultiBoot区位流,为了和MultiBoot区分,后续都以Update位流代替)

QuickBoot 远程升级步骤

  • 1、擦除存放关键开关字的块或者sector,使得关键开关字变成OFF;
  • 2、擦除更新包存放的区域;
  • 3、将update bitstream 写进到更新包区域;
  • 4、验证update bitstream的正确性;
  • 5、验证完成之后写开关关键字,使之变成ON。

所以在验证update bitstream正确之前不能将关键开关字设置为ON。验证完成之后需要将开关关键字设置为ON。

注:golden 和 QuickBoot hear 的第二部分内容 (warm boot jump sequence) 都不允许更改

接下来就是复杂的运算了,需要根据官方的EXCEL表格进行计算,官方给了BPI FLASH和SPI FLASH两个例子。

image.png

说实话很复杂,要根据位流大小计算位置,同时要躲开FLASH的最小擦除单元。

位流在 flash 中的位置

Bitstream 在 flash 中的位置(要适配 flash 最小擦除单位 segment)

  • QuickBoot header
  • critical switch word:第 1 个 segment
  • warm boot jump sequence:第 2 个 segment
  • gloden bitstream image:跟在 warm boot jump sequence 后面 * update bitstream image:跟在 golden 后面,但是不能跟 golden 共用一个 segment

再结合官方的EXCEL就可以选择相应位置。

image.png

image.png

从0地址开始存放数据,因为一个地址是代表1个字节,所以对于一个32bit的数据需要4个地址来代表,也就是地址的递增是以4为单位递增的。

0x0000_0000~0x0000_0FFC对应的是QuickBoot Header PART1。 0x0000_1000~0x0000_1020是QuickBoot Header PART2。紧接着 PART2存放的是golden bitstream。跳转地址是0x0020_0000,所以从这个地址开始存放的是update bitstrean,紧接着是update bitstrean的是0xfffffff填充字,最后 32bit是CRC校验值。

Bitstream 及 FLASH 大小计算

image.png

启动时间

image.png

QuickBoot配置时间将比标准的配置时间多一点点,从上图可以看出这一点。

参考设计

官方给了《XAPP1081》的参考设计,以下面两个FLASH为例:

image.png

参考例程的架构如下:

image.png

远程升级模式对比

image.png
图3:远程升级模式对比-来源:XAPP1081

总结

QuickBoot被“抛弃”从上面分析可以大致推断出以下几点原因:

  • 复杂性:这个东西太复杂了,需要很长时间进行设计;
  • 稳定性:FPGA系统本来就相对稳定的架构,如果Boot搞得很复杂,就会大大降低系统稳定性;

但是QuickBoot升级方式也有自己的优势,就是可以对Golden区进行升级。

官方文档及参考例程详见《refence_doc\XAPP1081》。目前PDF文档官方已经下载不到了。

https://github.com/suisuisi/Update_MultiBoot/tree/main/refence_doc

END

作者:碎碎思
来源:OpenFPGA

相关文章推荐

更多FPGA干货请关注FPGA的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
10604
内容数
561
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息