FPGA实现串口升级及MultiBoot(四)MultiBoot简介

20baa0b765c84ba7d42c7b3d3c43fb2b.jpeg

缩略词索引:

  • K7:Kintex 7

  • V7:Vertex 7

  • A7:Artix 7

我们在正常升级的过程(只使用一个位流文件),假如:(1)因为干扰通信模块收到了一个错误位;(2)或者烧写进FLASH时突然断电,导致位流文件不完整;(3)再或者使用软核升级应用程序时,突然断电或者接收文件错误,导致应用程序启动不了;(4)再再或者外场人员烧写了不适配本FPGA的升级程序。以上这些都是我们升级时候常见的问题,以上问题可以总结为以下几点:

  • 位流错误 -- 对应情况(1)、(2)

  • 启动超时 -- 对应情况(3)

  • 位流ID不匹配 -- 对应情况(4)

所以我们使用单一的文件进行远程升级的时候,很有可能因为各种情况导致FPGA不能启动,就需要现场使用JTAG进行处理。所以为了避免这些情况的发生,我们需要两个固件,其中一个在一般情况下不动,只升级另一个程序,两个程序在以上情况发生时,就启动第一个程序,就可以重新升级了。

以上这种应对方式对于AMD-Xilinx FPGA来说,官方也想到了针对以上情况的解决方式-即MultiBoot。

MultiBoot介绍

其实这个理念不难理解,你从实际使用出发去理解会比直接理解要容易多,实际使用就从上面的各种情况出发,就很容易理解官方为啥使用MultiBoot进行问题的规避和解决。

但是,因为每个人接受的理念不同,所以我们还是要从正面“突进”,去解释MultiBoot。

MultiBoot 是一个FPGA实现的一种解决方案,支持不同位流之间切换以规避在远程更新中出现的问题。

当在 MultiBoot 启动配置过程中检测到错误时,FPGA 会触发回退(外国名:Fallback),这样就可以确保已知好的设计可以加载到设备中。这种解决方案主要是在一个FLASH中烧写两个位流文件。其中:

  • Fallback, 别称 “golden bitstream”

  • MultiBoot, 别称 “update bitstream”

以上两个文件,习惯叫Golden位流,烧写在Golden区;MultiBoot位流,烧写在MultiBoot区。以上依个人习惯自己匹配,对应好相关的名称和位置就可以。

MultiBoot原理

Golden位流是从Flash中的0地址开始运行;其帧头会包括WBSTAR(next_config_addr)寄存器里面指定的下一个启动地址等信息。FPGA器件上电后会从0地址开始加载Golden位流后,会根据里面的设定来决定加载Golden位流还是直接跳转到MultiBoot位流存储地址去执行MultiBoot位流;当MultiBoot位流加载时候遇到错误,Fallback电路会触发去重新从0地址去加载Golden 位流。MultiBoot 和 Fallback 流程如图1所示:

76c6d5a5bf121fbc5e606e76a2bad924.png图1:MultiBoot 和 Fallback 流程 - 参考:XAPP1247

Golden位流从FLASH地址 0 开始执行后。按照启动流程,一旦遇到 IPROG 命令,就会跳转到Golden位流中 WBSTAR 寄存器中指定的FLASH地址位置,配置逻辑会尝试加载更新比特流。如果配置逻辑由于错误无法加载更新位流,则会发生Fallback,配置逻辑会将 INIT_B 和 DONE 拉低,清除配置内存,并重新从地址0处加载Golden位流重新启动配置过程,在 Fallback 期间,为了防止不断的重新,FPGA 会忽略 WBSTAR 和 IPROG 命令,详细流程见图2.

509cd3c33403e7d45ffa3d05c82b584d.png图2:MultiBoot  Fallback 流程和配置步骤 - 参考:XAPP1247

MultiBoot 关键技术

MultiBoot 关键技术主要主要分为以下几种:一个指令、二种位流、三种方式、四样错误。针对以上四句话我们接下来详细分析。

一个指令

这个指令大家应该都知道,在上一篇文章中也详细介绍了就是IPROG 指令。这个就是MultiBoot的核心命令(实现MultiBoot基本),后续的内容基本离不开这个指令,上一篇文章中《配置文件框架》介绍了这个指令的位置及在启动流程中位于第几步。

二种位流

这里没有说是二“个”位流,因为在复杂架构种不止一个位流,但是按照功能划分就是位于Golden区的Golden位流及位于MultiBoot区的MultiBoot位流。

三种方式

这里指的是 IPROG 指令嵌入位流种的三种方式,分别为:1)通过约束脚本添加;2)通过ICAPE2原语添加;3)通过AXI HWICAP写入IPROG指令。

这几种方式后面的文章会在实例解析。

四样错误

四样错误指触发FallBack的四种错误,分别为:

  1. ID Code错误 - 指配置文件中的器件型号和当前器件不匹配。

  1. CRC错误 - 指配置数据送入FPGA之后会进行校验,如果数据不一样则会提示CRC错误。

  1. Watchdog超时 - 指在规定的时间内如果无法配置成功,则触发Watchdog超时

  1. BPI地址越界 - BPI是只针对BPI模式的,和Watchdog有一点类似,都是在一段时间内如果没有加载成功,地址会逐步增加,计时器会逐步增加,超过范围后就触发Fallback。

ID Code错误指的是ID Code不对,这在器件启动第五步种出现错误,这种情况大概率是烧写错误镜像了,所以没什么好解释的。

当存在Multiboot镜像的时候,如M镜像的内容出现问题,则会触发CRC校验错误,这样可以保证镜像加载成功之后,数据是没有问题的。但是如果没有Multiboot镜像,则CRC校验无法进行,或者加载到一半就挂死了。这个时候就需要Watchdog来触发Fallback。只要一定时间内加载没有完成,就一定会触发Watchdog超时。所以CRC是用来保证加载正确的,Watchdog是用来保证一定会提示加载失败的。注意,Watchdogd的计时设置,请设置好然后实际测试一下,而不要仅仅凭经验/文档来推断一个合适的值。当发生了Fallback之后,工程会反跳回0地址开始加载,从新加载G镜像。这里,FPGA内部的配置寄存器会做记录,当发生Fallback之后,会自动忽略IPROG命令,直接加载G镜像后续的部分,来保证G镜像有机会被完整的加载。

BPI地址越界就和上面解释的一样,没什么多说的了。

总结

MultiBoot的实现总结起来就:一个指令、二种位流、三种方式、四样错误。接下来就是按照上面的顺序实际操作,加深理解。

PS:这类文章阅读量比较低,希望大家能多多点赞转发。同时大家有问题可以在相应文章下方留言讨论~

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

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

相关文章

《深度学习》—— 神经网络模型中的损失函数及正则化惩罚和梯度下降

文章目录 前言一、损失函数二、正则化惩罚三、梯度下降 前言 在神经网络中,损失函数、正则化惩罚和梯度下降是三个关键的概念,它们共同作用于网络的训练过程,以提升网络的性能和泛化能力。神经网络模型结构如下图所示: 在构建好一…

LCSS—最长回文子序列

思路分析 关于”回文串“的问题,是面试中常见的,本文提升难度,讲一讲”最长回文子序列“问题,题目很好理解: 输入一个字符串 s,请找出 s 中的最长回文子序列长度。 比如输入 s"aecda"&#xff0c…

【AI-18】Adam和SGD优化算法比较

Adam(Adaptive Moment Estimation)和 SGD(Stochastic Gradient Descent,随机梯度下降)是两种常见的优化算法,它们在不同方面有各自的特点。 一、算法原理 SGD: 通过计算损失函数关于每个样本的…

S7-1500T分布式同步功能

1. 功能描述工控人加入PLC工业自动化精英社群 在一些实际应用中,会需要很多轴进行同步运行,如印刷机、纸尿裤生产线等。由于一个 PLC 的运动控制资源有限,控制轴的数量也是有限的,就会需要多个 PLC 间协调实现轴工艺对象的跨CPU的…

k8s以及prometheus

#生成控制器文件并建立控制器 [rootk8s-master ~]# kubectl create deployment bwmis --image timinglee/myapp:v1 --replicas 2 --dry-runclient -o yaml > bwmis.yaml [rootk8s-master ~]# kubectl expose deployment bwmis --port 80 --target-port 80 --dry-runclient…

专题三_二分查找算法_算法详细总结

目录 二分查找 1.⼆分查找(easy) 1)朴素二分查找,就是设mid(leftright)/2,xnums[mid],t就是我们要找的值 2)二分查找就是要求保证数组有序的前提下才能进行。 3)细节问题: 总结&#xff1a…

基于SpringBoot+Vue+MySQL的招聘管理系统

系统展示 用户前台界面 管理员后台界面 企业后台界面 系统背景 在当今数字化转型的大潮中,企业对于高效、智能化的人力资源管理系统的需求日益增长。招聘作为人力资源管理的首要环节,其效率与效果直接影响到企业的人才储备与竞争力。因此,构建…

详解Diffusion扩散模型:理论、架构与实现

本文深入探讨了Diffusion扩散模型的概念、架构设计与算法实现,详细解析了模型的前向与逆向过程、编码器与解码器的设计、网络结构与训练过程,结合PyTorch代码示例,提供全面的技术指导。 关注TechLead,复旦AI博士,分享A…

宠物毛发对人体有什么危害?宠物空气净化器小米、希喂、352对比实测

作为一个呼吸科医生,我自己也养猫。软软糯糯的小猫咪谁不爱啊,在养猫的过程中除了欢乐外,也面临着一系列的麻烦,比如要忍耐猫猫拉粑粑臭、掉毛、容易带来细菌等等的问题。然而我发现,现在许多年轻人光顾着养猫快乐了&a…

Linux命令:用于应用补丁文件来更新源代码的工具patch详解

目录 一、概述 二、基本概念 1. 补丁文件 2. diff 工具 三、基本用法 1、基本语法 2、常用选项 3、获取帮助 四、patch 工具的主要功能 1. 应用补丁 2. 逆向应用补丁 3. 查看补丁内容 4. 交互模式 5. 非交互模式 6. 备份文件 五、patch基本用法举例 1、应用补…

动态规划:汉诺塔问题|循环汉诺塔

目录 1. 汉诺塔游戏简介 2.算法原理 3.循环汉诺塔 1. 汉诺塔游戏简介 汉诺塔游戏是一个经典的数学智力游戏,其目标是将塔上不同大小的圆盘全部移动到另一个塔上,且在移动过程中必须遵守以下规则: 每次只能移动一个圆盘较大的圆盘不能放在…

css百分比布局中height:100%不起作用

百分比布局时,我们有时候会遇到给高度 height 设置百分比后无效的情况,而宽度设置百分比却是正常的。 当为一个元素的高度设定为百分比高度时,是相对于父元素的高度来计算的。当没有给父元素设置高度(height)时或设置…

杂七杂八-系统环境安装

杂七杂八-系统&环境安装 1. 系统安装2. 环境安装 仅个人笔记使用,后续会根据自己遇到问题记录,感谢点赞关注 1. 系统安装 Windows安装linux子系统WSL2:使用windows系统跑linux程序(大模型)WSL VSCode:VSCode连接WSL实现高效…

就服务器而言,ARM架构与X86架构有什么区别?各自的优势在哪里?

一、服务器架构概述 在数字化时代,服务器架构至关重要。服务器是网络核心节点,存储、处理和提供数据与服务,是企业和组织信息化、数字化的关键基础设施。ARM 和 x86 架构为服务器领域两大主要架构,x86 架构服务器在市场占主导&…

学习之git的团队协作

git团队协作 一 团队内协作 生成SSH公钥私钥 一(跨团队协作)

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要…

【GBase 8c V5_3.0.0 分布式数据库常用维护命令】

一、查看数据库状态/检查(gbase用户) 1.gha_ctl monitor 使用gha_ctl monitor查看节点运行情况(跟dcs的地址和端口) gha_ctl monitor -c gbase -l http://172.20.10.8:2379 -Hall |coordinator | datanode | gtm | server|dcs:必选字段。指定查看哪类集…

程序员转行方向推荐

程序员转行方向推荐是一个涉及个人兴趣、技能匹配及市场需求等多方面因素的复杂话题。以下是一些详细的转行方向推荐,旨在帮助程序员在职业生涯中做出更加明智的选择。CSDN大礼包:《2024年最新全套学习资料包》免费分享 技术管理岗位 推荐理由&#xf…

崩坏星穹铁道PC端2.5版本剧情、奖励攻略 用GameViewer远程帮手机减负 随时畅玩星铁PC端

《崩坏:星穹铁道》2.5版本「碧羽飞黄射天狼」在9月10开启!上半卡池有五星角色飞霄、知更鸟、卡芙卡、黑天鹅四位角色,还有2.5版本的新剧情,这一次崩铁上线送10连和 1000星琼等其他材料。由于游戏包体过大,不少玩家都选…

光伏开发:工商业光伏的流程管理全面解析

一、项目准备阶段 1、资源寻觅与沟通 首要任务是寻找适合的工商业屋顶或空地资源,并与业主初步交流,了解其意向、屋顶条件及用电情况。这一阶段的关键在于建立信任关系,为后续工作奠定基础。 2、资料收集与核查 全面收集业主资料&#xff…