当前位置: 首页 > article >正文

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

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

https://adaptivesupport.amd.com/s/article/000036833?language=en_US

dd29a959f710a8b2f5fa689af9289e4c.png

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

介绍

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

ae1665dfa820f222c4f5651c12c18dab.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几个部分。

c4bfacf68d44309be3b52f480670071a.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

升级程序包组成

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

程序包含 3 部分

  • QuickBoot header

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

6db3a267fbe9e62d1c103163f4d0d425.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两个例子。

795546fa6f538b76a81270a3ff0893d6.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就可以选择相应位置。

20804e7123d4eff4ad1fcef4d10ee647.png c315357a44c3288c53ff5ce1307cd6b7.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 大小计算

93f900fc72a7b217860e517fa874012c.png

启动时间

1944dc2ec525fe70c4f233771ace2d84.png

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

参考设计

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

6df40f41492b851a1775c4cda86214ed.png

参考例程的架构如下:

f09023e08c47ae5763b3723fbff2adf7.png

远程升级模式对比

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

总结

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

  • 复杂性:这个东西太复杂了,需要很长时间进行设计;

  • 稳定性:FPGA系统本来就相对稳定的架构,如果Boot搞得很复杂,就会大大降低系统稳定性;

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

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

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


http://www.kler.cn/a/378092.html

相关文章:

  • React Native 集成原生Android功能
  • InnoDB引擎的内存结构
  • 自动控制系统综合与LabVIEW实现
  • WPS工具栏灰色怎么办
  • 反射探针.
  • 06 - Django 视图view
  • ‌MySQL中‌between and的基本用法‌、范围查询
  • 干货|前端项目一些响应式布局问题(固定宽度仍可以实现响应式)
  • CTF-pwn:libc2.27指针劫持[gyctf_2020_signin]
  • 通过不当变更导致 PostgreSQL 翻车的案例分析与防范
  • WeakReference与SoftReference以及结合ReferenceQueue实践整理
  • AppInventor2能否用网络摄像头画面作为屏幕的背景?
  • Golang--函数、包、defer、系统函数、内置函数
  • thinkphp8模型中 where数组条件大于,小于,like等条件时与tp5/6 的区别和使用示例
  • 3.3_JavaScript 对象与事件
  • 湖南(市场研究)源点咨询 市场调研公司与咨询公司有何不同?
  • Leetcode 腐烂的橘子
  • docker理论+部署(一)
  • masm汇编debug调试字符串大小写转换演示
  • 职场中这样汇报工作领导才满意
  • Milvus - 相似度量详解
  • HarmonyOS 5.0应用开发——用户文件操作
  • git入门教程9:配置Git钩子
  • 线程数组一例
  • 信息学科平台系统构建:Spring Boot框架深度解析
  • Kubernetes中常见的volumes数据卷