Xilinx远程固件升级(一)——QuickBoot方案
Xilinx 7系FPGA远程更新方案——QuickBoot方式远程更新bit
一、远程更新背景和架构
对于非ZYNQ系列的常规FPGA来说,对于bit的更新一般使用JTAG进行烧录。而作为商用产品,想要进行OTA升级时,使用JTAG的升级方式显然不适合,因此,采用了Xilinx官方提供的QuickBoot方式进行能够更新固件,根据xapp1081的描述得知该方式的系统结构图如图1所示。
图1 远程升级结构图
图2 系统构成图
由图1可以看出,该远程升级方案支持以太网、PCIe、USB、SD卡、串口等方式实现,通过这些通信方式将需要更新的bit文件发送到FLASH中,当重新上电后,FPGA会自动从FLASH中读取新的bit文件。
二、远程更新工作原理
FLASH中存储两套可执行文件,分别为GOLDEN bits和UPDATE bits文件,其中GOLDEN bits和UPDATE bits都具备远程更新功能。
可执行文件initial.mcs中包含header 、GOLDEN bits和UPDATE bits文件,header文件中具备开关切换和地址跳转功能,可引导FPGA启动GOLDEN bits或者UPDATE bits文件。
具体如下:
header地址空间为0x000000000x00001020,其中切换开关为0x00000FFC0x00000FFF四字节,ON为0xAA995566,OFF通常为0xFFFFFFFF;地址跳转为0x00001008~0x0000100B四字节,此为UPDATE bits文件的起始地址。
可执行文件update.mcs只具备一套update程序。
initial.mcs和update.mcs是通过bit文件调用脚本生成的,initial.mcs文件是update.mcs文件的两倍大小,具体大小通过脚本进行指定。
将initial.MCS通过VIVADO烧写至FLASH中后,FPGA上电后启动逻辑会判断切换开关是否为0xAA995566,如果是,则读取地址跳转,进行跳转,启动UPDATE程序;如果不是,则继续读取大数据,判断到GOLDEN程序中的0xAA995566,启动GOLDEN程序。无论是GOLDEN还是UPDATE程序,都具备程序更新功能,即UPDATE损坏时,可通过GOLDEN进行更新UPDATE程序,UPDATE程序未损坏时可通过UPDATE更新自己。
三、具体实现
1、客户端服务器建立
本设计采用KC705平台实现,通过AXI_ETHERNET IP核实现mac功能,在SDK中使用echo server API调用LWIP协议创建服务器,PC端采用适合项目要求的工具开发上位机软件,使用TCP/IP协议实现客户端与服务器建立。
LWIP协议中每包数据最大1500字节,因此上位机中选择实际有效数据为1280字节,再加16字节协议头。
2、软核程序固化
程序在Vivado软件下生成system.bit文件,导入到SDK中生成软核.elf的可执行文件,在SDK中通过program FPGA中选择当前工程的.bit、.mmi和.elf文件生成download.bit,此download.bit为融合了FPGA程序和软核程序的最终文件,通过program FPGA可将程序烧写至FLASH中,也可以在VIVADO中生成mcs或者bin文件,将程序烧写至FLASH中。
3、软核AXI总线实现
软核通过网络收到PC机发送的数据包,需要通过AXI总线将数据发送至FLASH 烧写功能的IP,AXI总线具备字节读写和内存数据拷贝功能,函数如下:
static INLINE u32 Xil_In32(UINTPTR Addr);
static INLINE u32 Xil_Out32(UINTPTR Addr);
void Xil_MemCpy(void* dst, const void* src, u32 cnt);
4、FLASH烧写IP
目前FLASH型号为N25Q256,采用X1模式进行烧写。在FLASH中,地址空间为0x01FFFFFF,每个地址对应一个字节。在.vhd文件中,每次烧写一个字节,AXI总线收到数据后调整数据顺序,按字节烧写至FLASH中。
5、远程更新文件生成
1)将download.bit生成download.mcs文件和download.bin文件
cd 盘符:/工程文件夹/bin1
write_cfgmem -format bin -size 32 -interface SPIx1 -checksum -loadbit “up 0x0 download.bit” download.bin
cd 盘符:/工程文件夹/bin1
write_cfgmem -format mcs -size 32 -interface SPIx1 -checksum -loadbit “up 0x0 download.bit” download.mcs
其中
:-format支持bin和mcs文件两种格式。
2)通过download.mcs生成download_initial.mcs和download_update.mcs
exec xilPerl 盘符:/工程文件夹/bin1/MakeSpiFlashProgrammerMcsFiles.pl –imagesize 60 盘符:/工程文件夹/bin1/download.mcs
其中:
download_initial.mcs可用于直接烧写FLASH,包含header、GOLDEN 和UPDATE。
–imagesize,单位为Mbit, 可指定生成的download_initial.mcs和download_update.mcs文件大小,60Mbit = 7.5MB,即download_update.mcs为7.5MB,download_initial.mcs为15MB,
地址分配为0x000000000x00001020-1为header,其中跳转地址为0x007F0000,0x000010200x007F0000-1 为GOLDEN程序空间,0x007F0000~0x00F00000-1为UPDATE程序空间。
3)将download_update.mcs转化为download_update.bin文件
promgen -p bin -r download_update.mcs -o download_update.bin
其中;
FLASH IP烧写中不具备将mcs文件转化为bin文件功能,因此需要通过ISE将mcs转化成bin文件。
download_update.bin可直接用于远程更新。
相关文章:

Xilinx远程固件升级(一)——QuickBoot方案
Xilinx 7系FPGA远程更新方案——QuickBoot方式远程更新bit 一、远程更新背景和架构 对于非ZYNQ系列的常规FPGA来说,对于bit的更新一般使用JTAG进行烧录。而作为商用产品,想要进行OTA升级时,使用JTAG的升级方式显然不适合,因此&a…...

O(1)调度算法与CFS
目录 引言 linux内核的O(1)进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器,两个队列的机制 两个队列的机制如下: 这个算法后期被CFS替代 CFS 工作原…...

SpringBoot——静态资源访问的四种方式
1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录:/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …...
WPF中的Style如何使用
在 WPF 中,Style 是一个非常重要的概念,它用于定义控件的默认外观和行为。以下是如何使用 Style 的一些基本步骤和示例: 1. 定义 Style 资源 通常在 XAML 的资源部分(ResourceDictionary)中定义样式。 2. 指定 Targ…...

数据分析案例-欺诈性电子商务交易数据集可视化分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

java互联网医院智能导诊系统源码,Uniapp前端开发框架,支持一次编写,多端运行
智慧导诊系统源码,java源码,大屏机自动导诊,互联网医院智能导诊系统源码 老是全身无力,挂什么科? 经常头痛,挂什么科? 总是失眠,又得挂哪个科? 世界上最遥远的距离再加…...

公交线路查询web管理系统||公交线路查询|基于SprinBoot+vue公交线路查询系统(源码+数据库+文档)
公交线路查询web管理系统 目录 基于SprinBootvue公交线路查询系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…...

AI对于智能网联汽车发展路径的演化的助力
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...
linux java17 - linux环境 centos7卸载java8安装java17
前言 因为springboot3不再支持java8,最近开始转java17,具体要求如下 Spring Boot 3要求使用Java 17或更高版本,不支持Java 8。 Spring Boot 3.0 正式版已经发布,并且明确要求最低支持Java 1712。 Spring Boot 3.0 正式版发…...

高中数学:立体几何-外接球的外心法
文章目录 一、外心法定义二、习题1、例题一2、例题二3、例题三4、例题四 一、外心法定义 依然以三棱锥为例 即,找到三棱锥的外接球的球心,从而可以确定出外接球的半径R。 而三棱锥有四个顶点,这四个顶点必然都在外接球的球面上。 寻找思路…...

【Python-AI篇】人工智能python基础-计算机组成原理
1. 计算机组成原理 2. python基础(查漏补缺) 2.1 字符串 2.1.1 字符串查找方法 find(): 检测某个字符串是否包含在这个字符串中,在的话返回下标,不在的话返回-1index(): 检测某个字符串是否包含在这个字…...
Java Exercise
3194. 最小元素和最大元素的最小平均值 Solution类 class Solution {public double minimumAverage(int[] nums){int n nums.length / 2;Arrays.sort(nums);int average 0;ArrayList<Double> arrayList new ArrayList<>();int i;int j;for (i 0, j nums.leng…...
滚雪球学Redis[9.1讲]:Redis的常见问题与最佳实践
全文目录: 前言1. Redis的常见问题排查常见错误信息与解决方案性能瓶颈的识别与处理数据一致性问题的排查 2. Redis的最佳实践Redis使用中的通用原则典型业务场景中的最佳实践如何避免Redis中的反模式 小结下期预告 前言 在上一章【第八章:Redis的扩展与…...

python获取当前鼠标位置的RGB值
效果 依赖 pip install Pillow pyautoguisudo apt install gnome-screenshot代码 import pyautogui import timedef get_rgb_at_mouse():try:while True:# 获取当前鼠标的位置x, y pyautogui.position()# 截取当前屏幕图像screenshot pyautogui.screenshot()# 获取鼠标位置…...
Ubuntu20.04运行深蓝运动规划hw_5
前言 环境: ubuntu 20.04 ; ROS版本: noetic; 问题 运行 roslaunch waypoint_trajectory_generator test.launch 出现如下错误 Invalid argument "/map" passed to canTransform argument source_frame in tf2 fra…...
删除node_modules文件夹
前言 当安装了较多模块后,node_modules目录下的文件会很多,直接删除整个目录会很慢,下面介绍些快速删除node_modules目录的方法。 方法一:使用rimraf模块的命令 在全局安装rimraf模块,然后通过其命令来快速删除node…...

基于Springboot+Vue的民宿管理系统(含源码数据库)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 在这个…...

[LeetCode] 542. 01矩阵
题目描述: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出…...

国产AI模型“Yi-Lightning”逆袭超越GPT-4!
近日,全球千万用户盲测投票产生的AI模型排行榜公布,令人惊喜的是,国产AI模型“Yi-Lightning”成功逆袭,一举超越了此前长期占据榜首的GPT-4。 Ai 智能办公利器 - Ai-321.com 人工智能 - Ai工具集 - 全球热门人工智能软件ai工具集…...
安卓設備上怎麼設置HTTP代理?
HTTP代理是一種仲介伺服器,它在用戶的設備和互聯網之間傳遞請求。通過HTTP代理,請求會先發送到代理伺服器,然後由代理伺服器轉發到目標網站。這樣,目標網站只會看到代理伺服器的IP地址,而不是真實IP地址。這種機制可以…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...

动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
大数据驱动企业决策智能化的路径与实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:数据驱动的企业竞争力重构 在这个瞬息万变的商业时代,“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...

CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...