0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

缩短MultiBoot流程中的回跳 (Fallback)时间

XILINX开发者社区 来源:XILINX开发者社区 作者:Ivy Guo 2022-12-09 09:50 次阅读

本文来自AMD XILINX工程师 Ivy Guo。

MultiBoot 是 FPGA 远程更新配置文件时一种非常普遍的应用--为了确保安全,我们通常需要安排一个 Golden Image,升级失败后 FPGA 能回跳 (Fallback) 到此配置,从而使 FPGA 始终处于可被检测的工作状态。

很多客户有同样的问题:我在升级 Update Image 一半时突然掉电了,为什么回跳机制不起作用了呢?FPGA 怎么挂死了呢?其实这个现象是"符合预期"的,回跳机制不能应付这种异常。如果配置文件写到一半突然中断,嵌在配置数据流里面的指令序列同样也没有了,并且有可能中断在任意位置。FPGA 的控制逻辑此时就失去了工作方向,不知道下一步该做什么。

Xapp1247, Appendix A提供了一个很好的解决方案。利用两个 timer 或者称之为 barrier 的小image,嵌在 Golden 和 Update 之间或附在 Update 之后,通过合理的给两个 timer 赋值,可以解决 Update Image 刷新时同步字丢失或者半程掉电的情况。

但是同时又有客户提出了问题:我的应用对回跳时间要求很高,Xapp1247,Appendix A的方案对于半程掉电的场景,只有搜索完整个 Update Image 区域,看到 Timer#2 的设置才能完成回跳。有没有办法缩短这段时间呢?

MultiBoot 的跳转实际上是非常灵活的,我们这里就尝试提供一种思路:

1. 去掉 Timer#2,只保留 Timer#1 作为 Golden 和 Update Image 之间的 barrier Image。

2. Update Image采取从后往前倒着烧录的办法。(在实际应用中,烧写 flash 都是用CPU/MCU/FPGA 控制或者第三方编程器实现的,所以这一点也很容易实现)。

3. 精确设定 Timer#1的值,使其看到Update中的TIMER指令及赋值但不需更多。

工作原理

Timer 寄存器的值只有在 Power-Cycle 或者 PROG_B 过程中才能被清除,或者被新的 Timer值覆盖,或者在整个配置数据加载完毕后自动失效。

我们通过精确设定 Timer#1的值,使 FPGA 控制逻辑有足够时间看到 Update Image 中新的Timer 值。TIMER 指令位于 Image 的头部。因为 Update Image 是倒着写入的,能看到新的Timer 值,说明 Update Image 基本已经更新好了。由于新的 timer 值是足够控制逻辑加载完整的配置数据的,Timer 寄存器被新值更新后,Timer#1 相当于失效了。FPGA 有充足时间可以顺利读入完整配置数据,开启正常工作。

如果由于断电等原因,Update 更新到一半就停止了,此时会缺失 Update 的同步字,TIMER指令等等位于头部的信息。Timer#1 在一个有限的时间内搜索 Update Timer 但是没有看到,timeout 之后就会直接触发回跳。因此不用等待搜索整个 Update 存储空间完毕,依靠尾部的Timer#2 才能触发回跳了。

整个解决方案的重点就在于设定 Timer#1 的值。

这个其实很简单,根据你自己生成的 Timer#1和Update的MCS文件 (方法参考Xapp1247),计算一下 Timer#1 的指令到 Update 的 TIMER 之间的字节数即可。

以 KU040 的 bit 为例,观察 Update Image 头部的命令/数据序列,可以看到有 3002 2001,这就是设置 Timer 寄存器的命令TIMER。我们想Timer#1的时间足够看到 Update 中的3002 2001命令以及赋值,其他不需要了,随意添加几个 cycle 或者几个字的裕量即可。

edacbbd8-7715-11ed-8abf-dac502259ad0.png

比如我们设到3000 8001,多3个字的余量。

Timer的格式如下:

edd03c8e-7715-11ed-8abf-dac502259ad0.png

Barrier/Timer#1 里从 TIMER 及赋值开始,后面有两个 NOOP 字,加上后续 Update 里从FFFFFFFF 开始直到 3000 8001 有28个字,一共30个字,那么就是30*32=960 bit。SPIx1 串行配置中,一个 CCLK 读取一个 bit,所以

Timer#1 的值设置为 h‘3C0.

ede07e3c-7715-11ed-8abf-dac502259ad0.png

如上图,30 03 E0 01是把 bus width 从默认的 x1 切到 x4 的命令。如果在读入 Timer#1 之前中执行了该命令(比如 Golden 里面),那么 Timer#1 的值需要按照一个 CCLK cycle,读取4个 bit 来计算。和 Timer 命令类似,在 FPGA 控制逻辑读取数据的过程中,如果没有碰到新的30 03 E0 01设定新的数据宽度,那么将一直按照之前设定的 bus width 来读入数据或者指令。

假设 Timer#1 以及 Update 都是以x4读取的,那么 Timer#1 需设为 h’F0.

综上,通过合理设定 barrier#1 中的 Timer#1 数值,我们可以极大地缩短升级掉电这种MultiBoot 失效场景的回跳时间。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1599

    文章

    21273

    浏览量

    592837
  • amd
    amd
    +关注

    关注

    25

    文章

    5179

    浏览量

    132624
  • 寄存器
    +关注

    关注

    30

    文章

    5020

    浏览量

    117619

原文标题:开发者分享|缩短MultiBoot流程中的回跳 (Fallback) 时间

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    multiboot什么意思 MultiBoot的功能简介、流程介绍

    本文主要包含MultiBoot的功能简介、流程介绍和工程实现几个部分的讲解。 我们先从它的功能介绍讲起来;MultiBoot功能是大部分Xilinx FPGA可以实现的固有特性;其主要优点如下所示
    的头像 发表于 08-04 16:32 1.6w次阅读
    <b class='flag-5'>multiboot</b>什么意思 <b class='flag-5'>MultiBoot</b>的功能简介、<b class='flag-5'>流程</b>介绍

    CC2530缩短发送时间间隔就失败报错,怎么解决?

    CC2530缩短发送时间间隔就失败报错,怎么解决?在调试CC2530的时候,采用协议栈的SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件定时发送。每次发送500字节。当我
    发表于 03-29 10:19

    请问手动选择频段如何缩短PLL锁定时间和PLL锁定过程流程是什么

    所实现的环路带宽决定。当环路带宽比PFD频率窄时,小数N分频/整数N分频频率合成器就会发生周跳。PFD输入端的相位误差积累过快,PLL来不及校正,电荷泵暂时沿错误方向吸入电荷,使锁定时间急剧缩短。如果
    发表于 10-31 10:16

    7 series FPGAs SPI MultiBoot应用笔记

    7 series FPGAs MultiBoot功能指让FPGA从2个或者多个BIT文件中加载一个BIT文件运行程序,本文档介绍基于个人参考设计例程K7MultiBoot的应用笔记
    发表于 04-05 00:25

    有什么办法可以更快地为Main_multiboot.mcs获得总的舞会校验和吗?

    嗨,我使用promgen命令两次生成我的多重引导文件,一次用于标题,第二次用于黄金和多重引导(参见下面的命令)。我觉得找到最终mcs文件(Main_multiboot.mcs)的正确舞会校验和的唯一
    发表于 07-16 11:00

    如何为MultiBoot生成SPIx4模式闪存文件

    你好 我完成了一个使用SPIx1进行MultiBoot的设计(只有比特流A和B没有Goldenstream)。结果是我的期待。然后我用SPIx4读命令(03-> 6B)修改ICAP
    发表于 07-29 13:50

    如何手动缩短PLL锁定时间

    如何手动缩短PLL锁定时间?你知道吗?利用手动频段选择,锁定时间可从典型值4.5 ms 缩短到典型值360 μs。本文以高度集成的解调器和频率合成器ADRF6820 为例,告诉大家如何
    发表于 07-31 07:54

    如何创建Golden镜像和Multiboot镜像?

    升级。基本的防止变砖功能,即在升级过程任何时刻,出现异常情况,如断电,线缆断开等,都应该能保证重新上电后,还可以再次完成升级流程,防止芯片变砖。升级流程的优化,可靠的通讯协议,例如握手、校验、应答
    发表于 04-04 17:11

    怎么缩短STLINK对STM8烧录固件的时间

    怎么缩短STlink对STM8烧录固件的时间
    发表于 10-09 07:02

    屏障定时器流程测试方法以及使用此方法

    XAPP1247 是对应使用屏障镜像时的多重启动 (Multiboot) 和回退 (Fallback) 的示例应用。
    的头像 发表于 06-09 14:51 1384次阅读

    7 eries FPGAs SPI MultiBoot实现方式

    bitstream”,即已知正常不出错的BIT; b. MultiBoot, or “updatebitstream”,即多个其它BITs或待更新的BITs。 其中,MultiBoot流程如下图:
    的头像 发表于 12-11 14:58 1502次阅读
    7 eries FPGAs SPI <b class='flag-5'>MultiBoot</b>实现方式

    在FPGA中如何通过ICAP原语实现Multiboot

    fallback 功能,以确保可以将已知良好的设计加载到器件中。 MultiBoot的大致过程如下图: MultiBoot的配置文件由两个比特流文件生成,第一个为备份文件,永远都不会变,称为
    的头像 发表于 05-11 14:20 5185次阅读
    在FPGA中如何通过ICAP原语实现<b class='flag-5'>Multiboot</b>?

    深入探究Xilinx Multiboot实例

    闪存返回。SCK是时钟引脚,SS是低电平从选择引脚。 参考:UG470 Vivado工具流程Multiboot大致流程) 为Multiboot程序准备bit流 本节概述
    的头像 发表于 09-26 09:37 3200次阅读
    深入探究Xilinx <b class='flag-5'>Multiboot</b>实例

    基于ZYNQ的multiBoot测试说明

    基于ZYNQ的multiBoot测试
    的头像 发表于 02-16 16:21 4873次阅读
    基于ZYNQ的<b class='flag-5'>multiBoot</b>测试说明

    5G EPS Fallback语音方案流程总结

    选择EPS Fallback作为5G SA的语音方案,是因为考虑到目前5G SA建网初期,5G信号覆盖还处于初期阶段,没有大规模的覆盖,而4G的覆盖已经进入成熟期。
    的头像 发表于 04-20 11:11 1.4w次阅读