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可直接用于远程更新。

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

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

相关文章

Java | Leetcode Java题解之第486题预测赢家

题目&#xff1a; 题解&#xff1a; class Solution {public boolean PredictTheWinner(int[] nums) {int length nums.length;int[] dp new int[length];for (int i 0; i < length; i) {dp[i] nums[i];}for (int i length - 2; i > 0; i--) {for (int j i 1; j …

计算机毕业设计Python动漫视频分析可视化 动漫影视可视化 动漫情感分析 动漫爬虫 机器学习 深度学习 Tensorflow PyTorch LSTM模型

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系名片 &#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系名片 &#xff01; 温馨提示&#xff1a;文末有SDN 平台官方提供的学长联系名片 &#xff01; 基于Python的B站排行榜大数据分析与可视化系统…

最短路问题之dijikstra算法

//根据bfs修改而来 #include<stdio.h> #include<stdlib.h> typedef struct queue {int data;struct queue* next; }queue, * linklist; float dist_list[9]; //出发点为0 int forward_point_list[9] { -1 }; linklist front NULL; linklist rear NULL; float ma…

计算机的错误计算(一百二十五)

摘要 探讨算式 的计算精度问题。 例1. 已知 计算 不妨在 Excel 的单元格中计算&#xff0c;则有&#xff1a; 若在 Python 中计算&#xff0c;则似乎有更为精确的结果&#xff1a; 然而&#xff0c;16位的正确值是 0.3499999999999998e1&#xff08;ISRealsoft 提供&a…

前后端请求一致性学习

在进行前后端分离开发项目的过程中&#xff0c;前后端同学往往需要依照接口文档的基本信息以及相应的响应格式进行接口请求的开发&#xff0c;在这个过程中涉及到常见的Get、Post、Put、Patch等等的请求&#xff0c;相应的前后端的书写格式是什么&#xff0c;这篇文章进行一个记…

数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 噪声调频干扰 4.2 线性调频干扰 4.3 噪声干扰 4.4 扫频干扰 4.5 灵巧干扰 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3…

Go语言中的时间比较与时区处理

文章目录 问题背景问题分析验证时区问题 解决方案方法 1&#xff1a;使用本地时区解析时间方法 2&#xff1a;将 time.Now() 转换为 UTC 最终结果总结 在后端开发中&#xff0c;时间处理往往是不可避免的&#xff0c;尤其是涉及到跨时区的应用时&#xff0c;时区问题常常会引发…

【黑马redis高级篇】持久化

//来源[01,05]分布式缓存 除了黑马&#xff0c;还参考了别的。 目录 1.单点redis问题及解决方案2.为什么需要持久化&#xff1f;3.Redis持久化有哪些方式呢&#xff1f;为什么我们需要重点学RDB和AOF&#xff1f;4.RDB4.1 定义4.2 触发方式4.2.1手动触发save4.2.2被动触发bgsa…

开源项目 - yolo v5 物体检测 手检测 深度学习

开源项目 - yolo v5 物体检测 手检测 深度学习 开源项目地址&#xff1a;https://gitcode.net/EricLee/yolo_v5 ​​ 助力快速掌握数据集的信息和使用方式。 数据可以如此美好&#xff01;

数据结构 ——— 顺序表oj题:验证回文串

目录 题目要求 代码实现 题目要求 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xf…

JavaSE——集合4:List接口实现类—LinkedList

目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…

Python安装|PyCharm Professional 下载安装教程。2024最新版,亲测使用!

一、下载地址&#xff1a; 二、Python的下载及安装&#xff1a; 1、从上面网址进入Python官网 2、安装流程图&#xff1a; 双击已经下载好的python-*.*.*-amd64.exe文件&#xff0c;开始安装 最后就等它自己安装完成就好了 3、检验是否安装完成&#xff1a; windowsR快捷键…

Vue 3 和 Vue Router 使用 createWebHistory 配置

在 Vue 3 项目中&#xff0c;如果使用 Vue Router 并希望启用 HTML5 History 模式&#xff0c;需要在创建路由器实例时传入 createWebHistory 作为历史模式的配置。此外&#xff0c;还需要确保在生产环境中设置正确的基本路径&#xff08;base&#xff09;&#xff0c;这样才能…

数据结构——顺序表的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》24~28页 补充 此处的顺序表创建是课本中采用了定义方法为SqList Q来创建&#xff0c;并没有使用顺序表指针的方法&#xff0c;具体两个…

视频云存储/音视频流媒体视频平台EasyCVR视频汇聚平台在欧拉系统中启动失败是什么原因?

视频监控/视频集中存储/磁盘阵列EasyCVR视频汇聚平台具备强大的拓展性和灵活性&#xff0c;支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xff0c;这为其在各种复杂环境下的部署提供了便利。 安防监控EasyCVR视频汇聚平…

vue elementui table编辑表单时,弹框增加编辑明细数据

需求: 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;通过弹框方式增加或者编辑。 效果图&#xff1a; 代码&#xff1a; <!-- 新增主表弹窗 Begin --><el-dialog:title"titleInfo"top"5vh"centerwidth"…

mysql innodb 引擎如何直接复制数据库文件?

mysql innodb 引擎如何直接复制数据库文件&#xff1f;介绍如下&#xff1a; 1、首先找到数据库文件所在位置 一般可以看my.conf/my.ini配置的文件的“datadir” 看示例&#xff1a; “MAMP”在Macos下的数据库文件位置&#xff1a; /Library/Application Support/appsolu…

想要搭建陪玩系统前后端该如何去做?uniapp后端php开发开源圈子源码uniapp社区论坛源码下载源码网

陪玩系统 陪玩日记 同城陪玩 陪玩工作室 陪聊 app开发 线下伴游 伴游系统 运营线下陪玩 轻资产创业 城市玩伴 小程序开发 app开发 城市玩伴 同城陪玩 运营陪玩系统 线下陪玩系统开发 陪玩软件 私人向导 线下陪玩系统 单身经济 助教 搭子 系统部署与配置 服务器环境配置&#…

CTFHUB技能树之SQL——字符型注入

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是SQL字符型注入&#xff0c;但还是来判断一下 &#xff08;1&#xff09;检查是否存在注入点 1 and 11# 返回正确 1 and 12# 返回错误 说明存在SQL字符型注入 &#xff08;2&#xff09;猜字段数 1 order by 2# 1 order…

QT--单选按钮(QRadioButton)和复选按钮(QCheckBox)

在Qt中&#xff0c;单选按钮&#xff08;QRadioButton&#xff09;和复选按钮&#xff08;QCheckBox&#xff09;是两种常用的用户界面控件&#xff0c;它们的主要区别在于选择行为和用途&#xff1a; QRadioButton&#xff08;单选按钮&#xff09; 选择行为&#xff1a;单选…