MultiBoot 和 QuickBoot

目录

  • MultiBoot
    • 简介
    • MultiBoot 实现方式
      • 设置 bitstream 属性
      • 使用 ICAPE2 原语
        • WBSTAR 寄存器定义
    • MultiBoot 工作流程
    • 生成mcs固化文件 Tcl 指令
    • Fallback
      • 状态寄存器
      • MultiBoot 正常加载状态
      • 看门狗1超时状态
      • 看门狗2超时状态
      • CRC 错误和无 DESYNC 命令
      • IDCODE 错误状态
      • CRC 错误状态
    • Watchdog Timer
      • 使用 Timer 的工作流程
      • timer1 和 timer2 数据格式
      • 通过 Tcl 指令生成程序文件
      • 通过 Vivado GUI 生成
  • QuickBoot
    • 传统 MultiBoot 远程升级方式
    • QuickBoot 远程升级方式
      • 系统架构
      • 升级程序组成
      • 升级步骤
      • BPI Flash Memory Map (Micron P30)
      • SPI Flash Memory Map (Micron N25Q)
      • Bitstream 及 FLASH 大小计算
      • Bitstream Separation for MMCM/PLL Lock or DCI Wait
      • QuickBoot Configure Time
      • 参考设计
        • BPI
        • SPI
      • 更快进行 QuickBoot 加载的方法
      • 可进行 Golden Image 升级的方法
  • 远程升级方式对比
  • 配置文件格式
  • 7 系列 bitstream 大小
  • 7 系列 bitstream 格式
    • Bitstream 组成
    • bitstream文件中的字类型
    • 配置寄存器
    • 总线位宽自动检测
    • 同步字
    • 位交换和总线字序
  • 参考资料

MultiBoot

简介

7系列 MultiBoot 功能可用于控制 FPGA 加载两个及以上程序,可指定 FPGA 从指定的 Flash 地址加载程序。

  • Fallback 加载 golden 程序
  • MultiBoot 加载 update 程序

注:Virtex®-7 HT FPGA不支持 Fallback MultiBoot 功能。

当触发 Fallback 时,内部会产生复位脉冲复位整个 configuration logic,除了 dedicated MultiBoot logic、WBSTAR 寄存器(the warm boot start address)、BOOTSTS寄存器(the boot status)。复位脉冲会拉低 INIT_B 和 DONE 信号,清除 configuration memory,最后从 FLASH 地址 0 重新加载,重新加载会忽略 WBSTAR 和 IPROG 命令。

MultiBoot 实现方式

有以下两种方式可以实现 MultiBoot 功能:

  • 设置 bitstream 属性
  • 使用 ICAPE2 原语

设置 bitstream 属性

golden 程序从 Flash 的地址0开始存储;当设置了 WBSTAR 属性时,IPROG 会自动嵌入到 bitstream 中

golden 和 update 的 bitstream 属性设置如下,其中 update 不需要设置 NEXT_CONFIG_ADDR 属性

在这里插入图片描述

注:
1、GENERAL.COMPRESS 使能这个属性可减少程序烧写时间和加载时间;
2、通过 xdc 约束直接修改 bitstream 属性相比使用 Vivado GUI 设置更节约时间,因为通过 GUI 设置得先完成实现步骤才能设置,而且更改完还需要重新综合实现。

##Golden 程序 xdc 约束
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x0400000 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]##Update 程序 xdc 约束
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]

golden 程序约束 NEXT_CONFIG_ADDR, 不管约不约束 CONFIGFALLBACK ENABLE,BIN 文件都没有区别

在这里插入图片描述

golden 程序不约束 CONFIGFALLBACK ENABLE,且不约束 NEXT_CONFIG_ADDR,BIN 文件才禁用 fallback,且删除 IPROG 命令

在这里插入图片描述

update 程序不约束 CONFIGFALLBACK ENABLE,BIN 文件比较如下,默认禁用 fallback,CRC 错误不会触发回退

在这里插入图片描述

使用 ICAPE2 原语

  • 通过逻辑控制 ICAPE2 原语

  • 发送流程:同步字 -> WBSTAR -> IPROG

在这里插入图片描述

注:输入配置信息需要位转换

在这里插入图片描述

WBSTAR 寄存器定义

执行 IPROG 指令后,FPGA 会从 WBSTAR 指示的地址开始进行加载

在这里插入图片描述

MultiBoot 工作流程

在这里插入图片描述

1、执行 IPROG 命令,控制 FPGA 从 WBSTAR 指定的地址开始加载 update 程序;
2、若加载失败则触发 Fallback,然后加载 golden 程序。
注:当触发 Fallback 时,内部会产生复位脉冲复位整个 configuration logic,除了 dedicated MultiBoot logic、WBSTAR 寄存器(the warm boot start address)、BOOTSTS寄存器(the boot status)。复位脉冲会拉低 INIT_B 和 DONE 信号,清除 configuration memory,最后从 FLASH 地址 0 重新加载,重新加载会忽略 WBSTAR 和 IPROG 命令。

生成mcs固化文件 Tcl 指令

write_cfgmem -format mcs -interface SPIX1 -size 16 -loadbit "up 0 <path>/golden.bit up 0x0400000 <path>/update.bit"  <path>/filename.mcs

Fallback

以下三种情况会触发 Fallback

  • CRC error
  • IDCODE error
  • Watchdog timer time-out error

状态寄存器

  • BOOTSTS 用于存储配置历史;
  • Valid 用于只是当前 Status 是否有效;
  • Status_0 用于记录最新配置状态; Status_1 用于记录上一次配置状态;

在这里插入图片描述

  • Status_1 表示执行了 IPROG,检测到 CRC 错误;
  • Status_0 表示回退加载成功,同时也有 IPROG,只是回退重配置忽略 IPROG 指令,但是同样记录状态

MultiBoot 正常加载状态

MultiBoot 正常加载,FPGA 加载 Update 程序。

状态寄存器如下所示:

在这里插入图片描述

看门狗1超时状态

升级文件删除 update 部分,触发 timer1 超时错误 Fallback,FPGA 加载 Golden 程序。

状态寄存器如下所示:

在这里插入图片描述

看门狗2超时状态

删除 update 部分的 DESYNC 命令,触发 timer2 超时错误 Fallback,FPGA 加载 Golden 程序。

在这里插入图片描述

在这里插入图片描述

状态寄存器如下所示:

在这里插入图片描述

CRC 错误和无 DESYNC 命令

修改 Update 程序的写 CRC 寄存器值,并删除 update 部分的 DESYNC 命令,会先触发 CRC 错误 Fallback,FPGA 加载 Golden 程序。
在这里插入图片描述

在这里插入图片描述

IDCODE 错误状态

修改 Update 程序的 IDCODE值,触发 IDCODE 错误 Fallback,FPGA 加载 Golden 程序。

在这里插入图片描述

状态寄存器如下所示:
在这里插入图片描述

CRC 错误状态

FPGA 加载过程中会一直计算 CRC 值,收到最后一个数据后会跟写的 CRC 寄存器值进行比较,通过修改 Update 程序的写 CRC 寄存器值,触发 CRC 错误 Fallback,FPGA 加载 Golden 程序。

在这里插入图片描述

状态寄存器如下所示:

在这里插入图片描述

在这里插入图片描述

Watchdog Timer

xdc 约束设置看门狗定时器属性,定时器计时时钟为 CFGMCLK

set_property BITSTREAM.CONFIG.TIMER_CFG <Timer Value> [current_design]

下面有另一种方法实现看门狗定时器的功能,省去了需要计算精确的 TIMER_CFG 计时值。

使用 Timer 的工作流程

在这里插入图片描述

注:确保 golden、timer1、timer2 区域保持不变,升级只进行 update 区域更改。

  1. 执行 IPROG 命令,控制 FPGA 从 WBSTAR 指定的地址(Timer1 的位置)开始加载;
  2. 当 Timer1 后一直没有检测到同步头,则会触发 timer1 超时,进而触发 Fallback,然后加载 golden 程序;
  3. 当 update 程序正常加载,则 timer2 会被忽略;
  4. 当 update 程序最后缺少 DESYNC 命令,则会加载到 timer2 区域,然后触发 timer2 超时,进而触发 Fallback,然后加载 golden 程序。

timer1 和 timer2 数据格式

通过 Tcl 指令生成程序文件

  1. 打开 Vivado Tcl Shell

在这里插入图片描述

  1. 切换到 multiboot_address_table.tcl 文件所在目录
cd C:/Users/arlen/Desktop/repo/Project/Fallback_test
  1. 运行 multiboot_address_table.tcl 文件
source multiboot_address_table.tcl

在这里插入图片描述

  1. 输入参数

在这里插入图片描述

  1. 生成地址信息、timer1.bin、timer2.bin

在这里插入图片描述

  1. golden 添加如下 bitstream 属性约束
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x00240000 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]
  1. 将 golden.bit、update.bit、timer1.bin、timer2.bin 放在一个文件夹,运行以下命令
## 生成 mcs 文件
write_cfgmem -force -format mcs -size 32 -interface SPIx4 -loadbit {up 0x00000000 led_test_golden.bit  up 0x00240000 led_test_update.bit} -loaddata {up 0x0023FC00 timer1.bin up 0x00480000 timer2.bin} multiboot_normal.mcs
## 生成 bin 文件
write_cfgmem -force -format bin -size 32 -interface SPIx4 -loadbit {up 0x00000000 led_test_golden.bit  up 0x00240000 led_test_update.bit} -loaddata {up 0x0023FC00 timer1.bin up 0x00480000 timer2.bin} multiboot_normal.binwrite_cfgmem -force -format bin -size 32 -interface SPIx4 -loaddata {up 0x00000000 led_test_golden.bin  up 0x00240000 led_test_update_no_fallback.bin up 0x0023FC00 timer1.bin up 0x00480000 timer2.bin} multiboot_update_no_fallback.bin
  1. 生成结果窗口打印信息

在这里插入图片描述

通过 Vivado GUI 生成

在这里插入图片描述

对应 Tcl 指令

write_cfgmem  -format bin -size 32 -interface SPIx4 -loadbit {up 0x00000000 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/led_test_golden.bit" up 0x00240000 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/led_test_update.bit" } -loaddata {up 0x0023FC00 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/timer1.bin" up 0x00480000 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/timer2.bin" } -file "C:/Users/arlen/Desktop/repo/Project/Fallback_test/multiboot_normal_GUI_gen.bin"

QuickBoot

支持 4 种配置模式

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

传统 MultiBoot 远程升级方式

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

在这里插入图片描述

QuickBoot 远程升级方式

系统架构

在这里插入图片描述

升级程序组成

QuickBoot 程序包含 3 部分

  • QuickBoot header

    • critical switch word:用于指示 FPGA 是否执行 warm boot jump sequence

      在这里插入图片描述

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

  • golden bitstream image area

  • update bitstream image area

升级步骤

QuickBoot 远程升级步骤

  1. 先修改 critical switch word 值为 OFF;
  2. 进行 update 程序烧写;
  3. 回读校验 update 程序是否烧写正确,若正确则修改 critical switch word 值为 ON。

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


写 NOR Flash 步骤

  1. 将要进行写操作的 segment 进行擦除操作,变为 1 状态;
  2. 将写数据中的 0 写入 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

BPI Flash Memory Map (Micron P30)

在这里插入图片描述

SPI Flash Memory Map (Micron N25Q)

在这里插入图片描述

Bitstream 及 FLASH 大小计算

在这里插入图片描述

Bitstream Separation for MMCM/PLL Lock or DCI Wait

FLASH 中的两个 bitstream 间要填充足够的数据,保证第一个程序加载完之前不会加载到下个 bitstream 的数据。

在这里插入图片描述

QuickBoot Configure Time

在这里插入图片描述

参考设计

BPI

BpiFlashProgrammer.vhd is the programming state machine that implements the QuickBoot programming algorithm for BPI flash. The BpiFlashProgrammer interfaces directly with the BPI flash.

SPI
  • SpiFlashProgrammer.vhd: QuickBoot flash programmer state machine for SPI flash

  • SpiSerDes.vhd: Serializer/deserializer interface to the SPI bus

在这里插入图片描述

更快进行 QuickBoot 加载的方法

第 1 个 segment 为 warm boot jump sequence,跳转地址为第 2 个 segment 的最后一个 word (critical switch word),这样可以节省读完第一个 segment 的时间。

可进行 Golden Image 升级的方法

在这里插入图片描述

远程升级方式对比

在这里插入图片描述

配置文件格式

在这里插入图片描述

7 系列 bitstream 大小

在这里插入图片描述

在这里插入图片描述

7 系列 bitstream 格式

Bitstream 组成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bitstream文件中的字类型

  • Bus width auto detection word:只存在于 BPI 、SelectMAP 配置模式下的文件头
  • Sync word:32-bit 边界同步
  • Packet header:描述写寄存器的寄存器地址和待写数据的字计数
  • Packet command or data words:命令字或者数据字内容

Xilinx design tools 生成的 bitstream 包含

  • bus width auto detection words
  • sync word
  • data packets

配置寄存器

在这里插入图片描述

总线位宽自动检测

  • Serial、JTAG、SPI模式不支持总线位宽自动检测功能;
  • 只检测D[7:0]的值,检测到0xBB,若下一次检测到0x11,则为x8;若下一次检测到0x22,则为x16;若下一次检测到0x44,则为x32;然后立即切换总线位宽,开始检测同步字

在这里插入图片描述

同步字

  • 识别到同步字前没有其他包数据

在这里插入图片描述

位交换和总线字序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

参考资料

  1. xapp1081 - QuickBoot Method for FPGA Design Remote Update)

  2. xapp1247 - MultiBoot with 7 Series FPGAs and SPI)

  3. xapp1246 - MultiBoot with 7 Series FPGAs and BPI

  4. ug470 - 7 Series FPGAs Configuration User Guide

  5. 参考程序源文件下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【八股】消息中间件

通用MQ问题 使用场景 异步发送(验证码、短信、邮件)MYSQL和Redis,ES之间的数据同步分布式事务削峰填谷消息的重复消费问题 👉定义:消费者已经消费了消息,但是可能由于网络抖动或者消费者挂了导致ack回执没有发送给MQ 👉解决方案 为每条消息设置一个唯一的标识id,在…

17 【Aseprite 作图】参考图和颜色

参考图 Aseprite 作图&#xff0c;“打开 - 一张参考图”&#xff0c;再把参考图拉到右边&#xff0c;就可以得到参考图和缩略图 取消选区 通过“选择 - 取消选择”&#xff0c;可以 取消选区 复制参考图的颜色 打开参考图后&#xff0c;参考图的调色板就会出现参考图所有的…

202466读书笔记|《一天一首古诗词》——借问梅花何处落,风吹一夜满关山

202466读书笔记|《一天一首古诗词》——借问梅花何处落&#xff0c;风吹一夜满关山 上册下册 《一天一首古诗词》作者李锡琴&#xff0c;蛮早前加入书架的已购买书籍&#xff0c;这次刚好有点时间&#xff0c;利用起来读完。 赏析没有细看&#xff0c;只读了诗词部分&#xff0…

2024.5.9 —— LeetCode 高频题复盘

目录 LCR 174. 寻找二叉搜索树中的目标节点518. 零钱兑换 IILCR 159. 库存管理 III450. 删除二叉搜索树中的节点59. 螺旋矩阵 IILCR 127. 跳跃训练16. 最接近的三数之和LCR 143. 子结构判断75. 颜色分类LCR 121. 寻找目标值 - 二维数组 LCR 174. 寻找二叉搜索树中的目标节点 题…

Java数组的应用---选择排序(Select Sort)

一、需求&#xff1a;选择排序(Select Sort)&#xff0c;进行升序显示 在一组排列中把最大的数取出来放在一个新的列表里&#xff0c;再删去&#xff0c;在取最大的数出来&#xff0c;依次类推直到取到最后一个数字 二、定义一个无序的一维数组&#xff0c;并输出数组 程序运…

RESTful API如何使用它构建 web 应用程序。

RESTful API&#xff08;Representational State Transfer API&#xff09;是一种设计和构建 web 应用程序的软件架构风格。它基于 HTTP 协议&#xff0c;并使用各种 HTTP 方法&#xff08;如 GET、POST、PUT、DELETE&#xff09;来处理数据传输。 RESTful API 的核心理念是将…

LabVIEW自动机械变速器(AMT)开发

LabVIEW自动机械变速器&#xff08;AMT&#xff09;开发 在现代汽车工业中&#xff0c;提升车辆的自动化水平和驾驶体验是一个不断追求的目标。随着技术的发展&#xff0c;自动机械变速器&#xff08;AutomatedMechanical Transmission, AMT&#xff09;凭借其较高的能效和较低…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

mysql的事务隔离级别和JDBC

# 隔离级别和面临的问题事务等级脏读不可重复读幻读read uncommitted√√√read committedX√√repeatable readXX√serializableXXX 事务的隔离级别越高&#xff0c;程序执行效率越低。 脏读: 在一个事务中读取到了另一个未提交事务的数据&#xff0c;即为脏读 不可重读读: …

element-plus el-time-picker 时间段选择(可多选)

实现一个如图的时间段选择器 处理好时间回显逻辑&#xff0c;组件内[‘’,‘’],后端数据[{startTime:‘’,endTime:‘’}]处理好加和减的显示逻辑 <template><div><div v-for"(item, index) in currentChoose" :key"index" class"fl…

Linux的内核态和用户态

一、Linux操作系统运行在两种不同的运行模式下&#xff1a;内核态&#xff08;Kernel Mode&#xff09;和用户态&#xff08;User Mode&#xff09; 内核态&#xff08;Kernel Mode&#xff09;&#xff1a; 内核态也称为特权模式或系统模式&#xff0c;是操作系统内核执行代码…

推荐算法顶会论文博客笔记合集

小小挖掘机学习笔记 https://mp.weixin.qq.com/s/rp2xXueEyT8IKvTr2Qss3A 推荐系统学习笔记 https://blog.csdn.net/wuzhongqiang/category_10128687.html SIGIR SIGIR 2022 | 推荐系统相关论文分类整理&#xff1a;8.74 https://mp.weixin.qq.com/s/vH0qJ-jGHL7s5wSn7Oy…

数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库(20240507)

数据库管理184期 2024-05-07 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20240507&#xff09;1 JSON需求2 关系型表设计3 JSON关系型二元性视图3 查询视图总结 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20…

数据库表自增主键超过代码Integer长度问题

数据库自增主键是 int(10) unsigned类型的字段&#xff0c;int(M) 中 M指示最大显示宽度&#xff0c;不代表存储长度&#xff0c;实际int(1)也是可以存储21.47亿长度的数字&#xff0c;如果是无符号类型的&#xff0c;那么可以从0~42.94亿。 我们的表主键自增到21.47亿后&#…

信息系统项目管理基础

目录 一、项目管理概论 1、定义 2、项目管理的十二原则 3、SMART原则 4、项目经理 5、项目的生命周期 二、项目立项管理 1、项目启动过程 三、项目整合管理 1、管理基础 2、项目整合管理过程 ①制定项目章程 ②制定项目管理计划 ③指导与管理项目工作 ④管理项目…

Java_从入门到JavaEE_12+13

一、内部类 理解&#xff1a;一个类中再声明另外一个类分类&#xff1a; 成员内部类静态内部类接口内部类局部内部类匿名内部类 1.成员内部类 案例&#xff1a;创建成员内部类的对象&#xff0c;并调用方法 import com.lv.outter_inner_02.Outter.Inner; public class Test {p…

谷歌AlphaFold 3首发Nature,预测精准度提高100%,AI能帮助治疗癌症和免疫病 | 最新快讯

刚刚&#xff0c;顶级科学期刊英国《Nature》&#xff08;自然&#xff09;杂志发表了一份重磅、突破性研究论文。 北京时间 5 月 8 日 23 点&#xff0c;谷歌 DeepMind 和其英国子公司 Isomorphic Labs 联合团队在《自然》杂志上发表一份共 46 页的重要成果&#xff0c;联合发…

使用intro.js实现web页面的引导页

1、引入intro的js和对于的样式&#xff0c;如下&#xff1a; <!-- 引入 Intro.js 的 CSS 文件 --><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/intro.js/4.0.0/introjs.min.css"><!-- 引入 Intro.js 的 JavaScrip…

YOLO系列笔记(十三)——数据集文件夹拆分

数据集文件夹拆分 前言代码说明导入模块设置文件夹路径创建目标文件夹读取和准备图片列表打乱图片顺序计算分配比例定义和使用移动文件函数最后打印分配结果 总结 前言 在学习和训练涉及YOLO等神经网络的过程中&#xff0c;我们通常需要对收集到的大型数据集进行合理的拆分&am…

计算图与自动微分

计算图与自动微分 一、自动梯度计算1.1 数值微分&#xff08;Numerical Differentiation&#xff09;1.2 符号微分&#xff08;Symbolic Differentiation&#xff09;1.3 自动微分&#xff08;Automatic Differentiation&#xff0c;AD&#xff09;1.3.1 计算图1.3.2 正向传播1…