Xilinx 7系列fpga在线升级和跳转

一、常见跳转方式

1,一般FPGA只要上电,就会自动从外部flash的0地址加载程序。

2,而我们所谓的在线式升级就是在flash0地址放一个程序(boot/golden image),然后在后面再放一个程序(app/update image)

3,所谓的跳转就是运行golden image的时候,跳转去运行update image。

4,一般操作都是告诉fpga下次启动需要加载的flash地址,然后拉reset即可。
如xilinx 7020跳转:
在这里插入图片描述

如altera的c4跳转:
在这里插入图片描述

二、xc7a50t+microblaze跳转

1,有两种方式可是实现multiboot跳转,一种是通过TCL指令直接把IPROG跳转指令固化到固件(bitstream)里,一种是加入ICAPE2原语,通过写代码实时打IPROG跳转指令。
在这里插入图片描述
文档见《xapp1247-multiboot-spi》

2,第一种方式做出来的golden image无法实时修改跳转地址、无法决定跳转时机,所有东西都是做固件前就决定好写死的,用起来不方便,因此我们用第二种

3,第二种方式用原语ICAPE2给跳转指令,不像我们上面列的那种给某个寄存器写跳转地址然后拉reset,ICAPE2接收的是带帧头帧尾的IPROG指令码流.

4,ICAPE2接口如下
在这里插入图片描述

5,通过ICAP发送IPROG指令实现Multiboot的步骤如下(示例):
在这里插入图片描述

6,把ICAP封装成axi接口开放给microblaze配置的ip是axi_hwicap
在这里插入图片描述

7,axi_hwicap配置如下
在这里插入图片描述
在这里插入图片描述

8,嵌入式驱动drv_hwicap.c

#include "drv_hwicap.h"
#include "xstatus.h"
#include "xhwicap.h"
#include "xhwicap_i.h"uint32_t CMD_RECONFIG[10] =
{/* 0 */ 0xFFFFFFFF,/* 1 */ 0xAA995566,/* 2 */ 0x20000000,/* 3 */ 0x30020001,/* 4 */ 0x00000000,       //地址/* 5 */ 0x30008001,/* 6 */ 0x0000000F,/* 7 */ 0x20000000,
};XHwIcap hwicap0;
int mb_hwicap_init(void)
{XStatus ret = XST_FAILURE;XHwIcap_Config *cfg;u32 ConfigRegData = 0;int Status = 0;cfg = XHwIcap_LookupConfig(DEVID_HWICAP0);ret = XHwIcap_CfgInitialize(&hwicap0, cfg, cfg->BaseAddress);	//XST_SUCCESSif(ret != XST_SUCCESS){return -1;}ret = XHwIcap_SelfTest(&hwicap0);if(ret != XST_SUCCESS){return -2;}Status = XHwIcap_GetConfigReg(&hwicap0, XHI_IDCODE, &ConfigRegData);return 0;
}//执行重新配置
int hwicap_reconfig(int app_addr)
{int ret = 0;uint8_t CMD_NUM = sizeof(CMD_RECONFIG) / sizeof(CMD_RECONFIG[0]);           //计算数组的长度CMD_RECONFIG[4]  = app_addr;	                                            //跳转地址usleep(3000000);ret = XHwIcap_DeviceWrite(&hwicap0, CMD_RECONFIG, CMD_NUM);                 //依次打码流指令if(ret == 0){return 0;                //跳转OK}return -1;                   //跳转异常
}

9,STARTUPE2原语。给HWICAP提供EOS信号
在这里插入图片描述

三、icap2详解

1、概念缩写
在这里插入图片描述
2,
在这里插入图片描述
在这里插入图片描述

四、axi_hwicap详解

1,结构

在这里插入图片描述
2,Register Address Map
在这里插入图片描述
在这里插入图片描述

五、相关文档

《pg134-axi-hwicap》
《ug470_7Series_Config》
《ug953-vivado-7series-libraries-en-us_原语》
《xapp1247-multiboot-spi(1)》

六、结束语

看到这里,聪明的你肯定已经想放弃了。
我也很无语,明明一个地址一个使能就能跳转的事情,我也不知道为啥傻逼Xilinx搞这么复杂搞出个ICAP。
不要想着投机取巧,没有简便方法,我这个方法就是正解。
接受把,孩子

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

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

相关文章

【C++】 —— 笔试刷题day_18

一、压缩字符串(一) 题目解析 题目给定一个字符str,让我们将这个字符串进行压缩; **压缩规则:**出现多次的字符压缩成字符数字;例如aaa压缩成a3。如果字符值出现一次,1不用写。 算法思路 这道题总的来说就非常简单了…

【无标题】spark SQL核心编程

MySQL Spark SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame&#xff0c;通过对 DataFrame 一系列的计算后&#xff0c;还可以将数据再写回关系型数据库中。 IDEA通过JDBC对MySQL进行操作&#xff1a; 1&#xff09; 导入依赖 <dependency> &l…

✅ MySQL 事务 MVCC ROLLBACK

&#x1f9e0; 一、MVCC 与可重复读&#xff08;REPEATABLE READ&#xff09; 项目内容MVCC 概念多版本并发控制&#xff0c;事务中读到的是开启事务时的数据快照实现机制依赖 Read View trx_id Undo Log 实现版本判断快照读普通 SELECT&#xff0c;使用 MVCC&#xff0c;不…

经典算法 判断一个图是不是树

判断一个图是不是树 问题描述 给一个以0 0结尾的整数对列表&#xff0c;除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图是不是树。是输出YES&#xff0c;不是输出NO。 输入样例1 6 8 5 3 5 2 6 4 5…

2025年第十六届蓝桥杯省赛JavaB组真题回顾

第16届蓝桥杯省赛已经结束了&#xff0c;第一次参加也是坐牢了4个小时&#xff0c;现在还是来总结一下吧&#xff08;先声明以下的解法&#xff0c;大家可以当作一种思路来看&#xff0c;解法不一定是正解&#xff0c;只是给大家提供一种能够正常想到的思路吧&#xff09; 试题…

Spring Boot循环依赖全解析:原理、解决方案与最佳实践

&#x1f6a8; Spring Boot循环依赖全解析&#xff1a;原理、解决方案与最佳实践 #SpringBoot核心 #依赖注入 #设计模式 #性能优化 一、循环依赖的本质与危害 1.1 什么是循环依赖&#xff1f; 循环依赖指两个或多个Bean相互直接或间接引用&#xff0c;形成闭环依赖关系。 典…

【四川省第三届青少年C++算法设计大赛 (小低组) 第 一试】

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项) 1、计算机中负责执行算术和逻辑运算的部件是() A. 内存 B.CPU C.硬盘 D.鼠标 2、近期备受关注的国产开源生成式人工智能大模型是() A. AlphaChat B. OpenPilot …

【ROS2】行为树 BehaviorTree(五):详细学习端口和黑板

1、构造函数 之前使用的行为树创建节点时,默认的构造函数形如: CalculateGoal(const std::string& name, const NodeConfig& config):SyncActionNode(name,config) {