在线升级之ICAP,ISP,BIN,HEX,MCS

news2025/1/12 23:16:33

       学到了ICAP,做做笔记。

        具体可参考:FPGA中ICAP原语的使用——Multiboot功能的实现_朽月的博客-CSDN博客

        ICAP是管理内部配置访问端口的原语,于是我学习的第一个原语。对于原语的概念简而言之就是类似IP核的存在,是既成的电路结构,但是不需要通过IP窗格来调用。


// ICAP_SPARTAN6 : In order to incorporate this function into the design,
//    Verilog    : the following instance declaration needs to be placed
//   instance    : in the body of the design code.  The instance name
//  declaration  : (ICAP_SPARTAN6_inst) and/or the port declarations within the
//     code      : parenthesis may be changed to properly reference and
//               : connect this function to the design.  All inputs
//               : and outputs must be connected.

//  <-----Cut code below this line---->

   // ICAP_SPARTAN6: Internal Configuration Access Port
   //                Spartan-6
   // Xilinx HDL Language Template, version 14.7

   ICAP_SPARTAN6 #(
      .DEVICE_ID(0'h4000093),     // Specifies the pre-programmed Device ID value
      .SIM_CFG_FILE_NAME("NONE")  // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation
                                  // model
   )
   ICAP_SPARTAN6_inst (
      .BUSY(BUSY),   // 1-bit output: Busy/Ready output
      .O(O),         // 16-bit output: Configuartion data output bus
      .CE(CE),       // 1-bit input: Active-Low ICAP Enable input
      .CLK(CLK),     // 1-bit input: Clock input
      .I(I),         // 16-bit input: Configuration data input bus
      .WRITE(WRITE)  // 1-bit input: Read/Write control input
   );

   // End of ICAP_SPARTAN6_inst instantiation

        对于ICAP我们需要关注的几点有:

        DEVICE_ID设备ID,这和核心芯片的型号有关,翻找UG380可以取得对应信息;

        I:环境配置输入,写个状态机按顺序输入即可。

        WRITE:读写控制信号。

        其余的都有注释,输出信号也不用太关心,CE是使能,肯定要使能的吧。

其中配置需求如下:

FPGA上电时,自00_0000H地址加载BIOS程序,加载完成以后跳转自区域2。

*一般而言上电读取的便是BIOS程序,跳转地址则是产品工作的程序。

        上电BIOS程序需要具备对Flash的读写功能,以便对区域2的程序进行升级。

        若是均分地址,则跳转至01_0000H地址(Multboot start address)。

        若跳转不成功或读取BIN失败,则跳转至00_0000H地址(Fallback start address)。

Multboot start address:FPGA Flash配置完成后的跳转地址

Fallback start address:读取BIN文件失败或跳转失败的时候的跳转地址。

(结合我在网络升级与FLASH-CSDN博客)中的笔记:

        FPGA产品总是需要一个出厂程序的,也需要一个升级失败以后的选择,否则升级失败就没法继续升级,甚至变砖,岂不是非常不方便?Fallback start address便是提供了一个返回出厂程序或者重新进行升级的可能性。

        Fallback start address的具体填写需要仰仗Flash的容量决定,例如16MB的内存意味着2^4*2^20bit = 2^21byte=10_0000_0000_0000_0000_0000b=2_0_0_0_0_0h个地址,

        若是分为一半便是0~0_FFFFF和100000~1FFFFF两个区域。

        其中写入两个程序,则程序1的启动地址是00_0000,程序1的启动地址则是10_0000。

所以OPCODE+ADDR =

        (命令:例如读的0011B也就是03H)+(地址的高八位0000_0010B也就是01H)。

        0301 H = 0000_0010_0000_0001 B。

整体运行步骤:

        FPGA可以通过XILINX自带的工具烧写MCS到Flash里,也可以通过第三方软件烧写BIN进Flash里,当然XILINX工具也有这个功能,因为BIN是二进制文件,其内容是程序本身,而MCS文件则包含了其每一行在内存中的地址,HEX也包含了其的地址,所以在单片机中烧写的通常都是HEX文件,毕竟BIN文件没有包含的话就需要自行制定,依赖于工具支持。(烧写的时候也可以指定地址,工具一般会提供)。

        上电以后,如果我们需要通过工具向Flash里读写数据,首先我们需要通过JTAG的方式烧入Flash读写擦除程序,这是为FPGA提供一个能与第三方软件交互的桥梁。

        烧写完成,通过第三方软件将BIN文件烧入Flash中指定好的地址即可。

        这里为了模拟产品的运作,可以先行将“Flash读写擦除程序”的BIN格式烧入地址00_0000中,这样上电以后自动运作的便是这个“Flash读写擦除程序”,我们便可以通过串口的方式,将其他的程序通过这个程序来写入到Flash的其他地址,实现一个在线升级的工作。

        “Flash读写擦除程序”主要承担了一个什么角色呢?

        其需要能完成Flash操作的大部分必要指令,并且通过例化ICAP来完成一个地址跳转的操作。通过把这个程序的BIN烧入到FPGA内部,FPGA就能完成对Flash其他区域程序的更改等一系列功能了,断电以后也不会取消,并且通过这个程序,能够完成从这个Flash区域的程序到其他Flash区域的程序的一个切换,

        即“正常工作”情况下,FPGA会先加载这个程序在区域0,如果没有其他需求就跳转到正常工作的区域1,如果有其他需求就在满足要求的情况下对其他区域的程序进行修改,读失败或跳转失败就再跳回这个区域0,类似于把这个程序作为BIOS程序使用。

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

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

相关文章

使用Puppeteer爬取地图上的用户评价和评论

导语 在互联网时代&#xff0c;获取用户的反馈和意见是非常重要的&#xff0c;它可以帮助我们了解用户的需求和喜好&#xff0c;提高我们的产品和服务质量。有时候&#xff0c;我们需要从地图上爬取用户对某些地点或商家的评价和评论&#xff0c;这样我们就可以分析用户对不同…

C++内存管理(2)new、delete详解

目录 new operator&#xff08;new操作&#xff09; new类对象时加不加括号的差别 new工作任务 delete工作任务 new和delete 堆区空间操作&#xff08;对比malloc和free&#xff09; new和delete操作基本类型的空间 new和delete操作基本类型的数组 new和delete操作类的…

Layui快速入门之第二节布局容器(固定宽度与完整宽度)

目录 一&#xff1a;固定宽度 二&#xff1a; 完整宽度 一&#xff1a;固定宽度 将栅格放入一个带有 class"layui-container" 的特定容器中&#xff0c;以便在小屏幕以上的设备中固定宽度&#xff0c;让列可控(两侧有留白效果) <!--固定宽度(两侧有留白效果)--&…

Layui快速入门之第三节栅格布局

目录 一&#xff1a;栅格布局的基本概念 二&#xff1a;栅格布局规则 三&#xff1a;始终等比例水平排列案例 四&#xff1a;响应式规则 五&#xff1a;移动设备、桌面端的组合响应式展现案例 六&#xff1a;移动设备、平板、桌面端的复杂组合响应式展现案例 七&#xf…

Yalmip使用教程(6)-将约束条件写成矩阵形式

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 这篇博客将详细介绍如何借助yalmip工具箱将约束条件写成矩阵形式。 1.相关函数介绍 1.1 depends和getvariables函数 depends和getvariables函数都…

C# Winform 简单排期实现(DevExpress TreeList)

排期的需求在很多任务安排的系统中都有相应的需求&#xff0c;原生的Winform控件并未提供相应的控件&#xff0c;一般都是利用DataGridViewTreeView组合完成相应的需求&#xff0c;实现起来比较麻烦。用过DevExpress控件集的开发者应该知道&#xff0c;DevExpress WinForm提供了…

数学建模--K-means聚类的Python实现

目录 1.算法流程简介 2.1.K-mean算法核心代码 2.2.K-mean算法效果展示 3.1.肘部法算法核心代码 3.2.肘部法算法效果展示 1.算法流程简介 #k-means聚类方法 """ k-means聚类算法流程: 1.K-mean均值聚类的方法就是先随机选择k个对象作为初始聚类中心. 2.这…

http实现文件分片下载

文章目录 检测是否支持HTTP Range 语法Range请求cURL示例单一范围多重范围条件式分片请求 Range分片请求的响应文件整体下载文件分片下载文本下载图片下载封装下载方法 HTTP分片异步下载是一种下载文件的技术&#xff0c;它允许将一个大文件分成多个小块&#xff08;分片&#…

一个新工具 nolyfill

名字的意思&#xff0c; 我自己的理解 no(po)lyfill 正如它的名字, 不要再用补丁了, 当然这里说的是过时的补丁。 polyfill 是补丁的意思 为什么要用这个插件 文档原文: 当您通过安装最新的 Node.js LTS 来接受最新的功能和安全修复时&#xff0c;像eslint-plugin-import、…

架构师如何做好需求分析

架构师如何做好需求分析 目录概述需求&#xff1a; 设计思路实现思路分析1.主要步骤 2.主要步骤2操作步骤 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,…

Android笔记(二十八):在雷电模拟器安卓7.0+上使用Charles抓包详细教程

背景 由于手头没有合适的真机,所有经常使用雷神模拟器来跑项目,模拟器也需要能够抓包看看接口返回的数据,以便自测调试。本文记录了如何在雷电模拟器安卓7.0+上使用Charles抓包,其他模拟器没试过。 最终效果 浏览器打开百度网页,能抓到百度页面数据 具体步骤 模拟器…

xinput1_3.dll丢失的解决方法,快速修复xinput1_3.dll文件

在使用电脑时&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是xinput1_3.dll文件丢失的情况。这个文件是DirectX的一部分&#xff0c;它对于许多游戏和其他应用程序的正常运行至关重要。当xinput1_3.dll文件丢失时&#xff0c;我们无法启动或运行依赖该文件的…

LeetCode刷题笔记【28】:贪心算法专题-6(单调递增的数字、监控二叉树)

文章目录 前置知识738.单调递增的数字题目描述解题思路代码 968.监控二叉树题目描述解题思路代码 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【23】&#xff1a;贪心算法专题-1&#xff08;分发饼干、摆动序列、最大子序和&#xff09; LeetCode刷题笔记【…

VMware虚拟机+Centos7 配置静态,动态IP

本章目录 一、查看网关&#xff1a; 编辑–>虚拟网络编辑器二、点击NAT设置三、记住网关IP待会要用四、配置静态ip地址1、进入存放修改IP地址的目录2、修改ip地址的文件3、编辑文件4、文件&#xff08;编辑好后退出&#xff09; 五、重启网络六、测试1、linux上查看IP地址的…

使用pyenv安装python缓慢或无法安装

使用pyenv安装python缓慢或无法安装 这一定程度上和网络情况有关&#xff0c;下面提供几个常见方法&#xff1a; 关闭 VPN 后重新安装使用管理员权限打开命令窗口后安装如下 手动安装 pyenv 在执行 pyenv install --- 命令的时候&#xff0c;会连接远程库&#xff0c;将要安…

格式工厂多个图片合并成一个PDF的报错

使用图片合并PDF功能时 当图片数量超过50会报错 找到imgconv.py文件&#xff0c;将50改为500&#xff0c;保存 现在可以支持100张图合并成一个PDF文件了&#xff01; 但是超过150张程序会直接闪退&#xff0c;正在解决中。。

基于任务队列的机器学习服务实现

将机器模型部署到生产环境的方法有很多。 常见的方法之一是将其实现为 Web 服务。 最流行的类型是 REST API。 它的作用是全天候&#xff08;24/7&#xff09;部署和运行&#xff0c;等待接收来自客户端的 JSON 请求&#xff0c;提取输入&#xff0c;并将其发送到 ML 模型以预测…

3D异常检测论文笔记 | Shape-Guided Dual-Memory Learning for 3D Anomaly Detection

文章目录 摘要一、介绍三、方法3.1. 形状引导专家学习3.2. Shape-Guided推理 摘要 我们提出了一个形状引导的专家学习框架来解决无监督的三维异常检测问题。我们的方法是建立在两个专门的专家模型的有效性和他们的协同从颜色和形状模态定位异常区域。第一个专家利用几何信息通…

涛然自得周刊(第 5 期):蝲蛄吟唱的地方

作者&#xff1a;何一涛 日期&#xff1a;2023 年 8 月 20 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;不定期发。历史周刊内容可以看这里。 电影 《沼泽深处的女孩》 改编自小说《蝲蛄吟唱的地方》&#xff0c;主角是一位在沼泽地独自生活并长大的女孩&…

[VSCode] 替换掉/去掉空行

VSCode中使用快捷键CtrlH&#xff0c;出现替换功能&#xff0c;在上面的“查找”框中输入正则表达式&#xff1a; ^\s*(?\r?$)\n然后选择右侧的“使用正则表达式”&#xff1b;“替换”框内为空&#xff0c;点击右侧的“全部替换”&#xff0c;即可去除所有空行。 参考 [VS…