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

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

3天内不再提示

为什么回跳机制不起作用了呢?FPGA怎么挂死了呢

Hack电子 来源:Ivy Guo 作者:Ivy Guo 2022-11-23 09:05 次阅读

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

很多客户有同样的问题:我在升级Update Image一半时突然掉电了,为什么回跳机制不起作用了呢?FPGA怎么挂死了呢?其实这个现象是‘符合预期’的,回跳机制不能应付这种异常。

如果配置文件写到一半突然中断,嵌在配置数据流里面的指令序列同样也没有了,并且有可能中断在任意位置。FPGA的控制逻辑此时就失去了工作方向,不知道下一步该做什么。https://docs.xilinx.com/v/u/en-US/xapp1247-multiboot-spi

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或者几个字的裕量即可。

c239d6a4-6aca-11ed-8abf-dac502259ad0.png

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

Timer的格式如下:

c25f8318-6aca-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.

注意根据自己实际的Image来计算。假设说你的Timer#1和Update之间还有一些其他的Padding,那么这些字节也需要计算进去。

如果使用了SPI x4, x8或BPI并行配置,同样对应计算一下:

c27a9086-6aca-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
    +关注

    关注

    1611

    文章

    21393

    浏览量

    595536
  • 寄存器
    +关注

    关注

    30

    文章

    5185

    浏览量

    118368
  • 编程器
    +关注

    关注

    9

    文章

    388

    浏览量

    41900

原文标题:一个思路: 缩短MultiBoot流程中的回跳 (Fallback) 时间

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TC387不起作用的原因?

    我使用的是 TC387。当我使用 Trace32 下载 *.elf 文件时,它运行良好。但是我使用 Trace32 下载了*.hex 文件,但它不起作用。即使我使用 Trace32 下载 *.elf
    发表于 02-27 08:02

    protues仿真的单片机复位键怎么不起作用,跪求解答

    protues仿真的单片机复位键怎么不起作用,按一下就是LCD短暂的刷新一下,是硬件原因还是程序问题,跪求大神帮忙,感激涕淋
    发表于 04-12 13:29

    四轴的pid不起作用了,这是什么问题?

    用瑞萨的板子在线仿真PWM输出正常,pid也起作用;断开仿真,给MCU板单独供电,PWM输出也正常,但是pid不起作用了 ,这是什么问题?求大虾帮忙看一下!!!
    发表于 08-07 11:23

    请问14本的怎么导入13版的元件库,转换不起作用

    请问14本的怎么导入13版的元件库,转换不起作用
    发表于 04-26 19:50

    static好像不起作用

    , j = 1;这个 i 的值有点不理解,,这儿的static难道不起作用么麻烦哪位哥解释下i 的这个static,不是全局变量的话,,是怎么处理的?这儿的静态局部变量,,是怎么静态的???
    发表于 03-13 03:26

    示例固件不起作用

    示例固件不起作用?以上来自于谷歌翻译以下为原文 Sample firmware not working?
    发表于 04-08 16:38

    我的EMIF读写设置不起作用是怎么回事?

    在使用6748作工程时,发现EMIF异步接口设备是,设置的建立、选通、保持时间不起作用,发现w_strobe无论设置为多少,从示波器上看到WE信号低电平保持600ns,设置不起作用,用TL6748-EVM-A3的开发板跑EMI
    发表于 06-04 07:50

    为什么我把按键改成key2就不起作用了

    在按键中断实验里,我想把key2改为按键扫描模式,key0。1还为中断模式,但是我下面这样改了以后key2就不起作用了/*u16 n=0;void EXTI0_IRQHandler(void
    发表于 07-15 03:46

    能量收集不起作用

    你好, 我从核L476RG,MEMS和NFC02A1开始。我尝试将MEMS数据写入nfc标签及其工作。我的问题是当我尝试使用能量收集模式时,它不起作用,我不知道为什么。我在nfc多维数据集中使用这个
    发表于 08-01 10:58

    CAD图层匹配格式刷不起作用的原因及解决教程

    情况该如何处理?  CAD图层匹配格式刷不起作用的解决方法:  在命令行输入“特性设置”快捷键“ma”,然后提示选择图中的“源对象”(即要保留的特征对象),接着在命令行输入“S”,此时弹出“特性设置
    发表于 08-01 22:40

    EPI访问外设地址不起作用

    EPI通过8位总线模式和FPGA交换数据,低地址位A0~A1不起作用,实际输出的地址为想要的地址左移2位,请问是什么原因造成的?
    发表于 04-10 10:24

    在JTAG模型中使用icap回读FPGA状态寄存器不起作用的原因?

    你好我在JTAG模型中使用icap回读FPGA(xc7a200t)状态寄存器,但它不起作用。有人告诉我它有什么问题吗?icap CLK有什么要求吗?谢谢
    发表于 07-28 08:14

    如何解决串口接收中断不起作用的问题?

    如何解决串口接收中断不起作用的问题?
    发表于 12-09 07:38

    while+事件结构点击开始测试后,停止测试不起作用了,帮忙看看怎么解决啊

    while+事件结构点击开始测试后,停止测试不起作用了
    发表于 03-14 15:24

    模型不起作用时的解决办法

    你的团队几个月来一直在收集数据、构建预测模型、创建用户界面,并与一些早期的用户一起部署新的机器学习产品。但你现在听到的并不是大家一起庆祝项目胜利的声音,而是听到产品经理对那些早期用户的抱怨,这些早期用户对模型精度不满意并开始认为“模型不起作用”。所以你现在应该做什么?
    的头像 发表于 05-04 09:54 2718次阅读