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

2023-10-28 16:40
文章标签 在线 bin 升级 isp mcs hex icap

本文主要是介绍在线升级之ICAP,ISP,BIN,HEX,MCS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       学到了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.7ICAP_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程序,加载完成以后跳转自“自己设置的地址”。

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

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

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

        若跳转不成功或读取BIN失败,则跳转至(Fallback start address)地址,如果设置为00_0000H也就是BIOS程序地址的话,类似于一次重启。

        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。

BIN文件和MCS文件

Xilinx Bit文件格式详解-腾讯云开发者社区-腾讯云 (tencent.com)

利用上位机程序结合已经通过JTAG烧入的BIT文件程序写进Flash中的是BIN文件。

整体Flash升级操作步骤:

        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程序使用。

        上位机第三方软件又有什么用?

        为Flash读写擦除程序提供了一个写入地址,并且将本地的bin文件按照串口的方式发送;从而使Flash读写擦除程序能把这些数据写在合适的位置。

总结:网络升级需要:

        一个FLASH控制器,其需要完成FLASH读写擦除的功能,能够接收地址和数据包头,并且对指定的地址进行读写擦除。

        一个向FPGA发送相应指令和地址信息,并且把代码包打包发送的第三方程序。

        实际上,FLASH控制器会存储在FLASH中的地址1,通常是00_0000区域(根据FLASH的大小会有变化),在FPGA上电后,其会加载这部分程序,并且通过ICAP配置好的应用地址,跳转到作为产品的代码所存储的地址上,并且运行那部分代码。

        如果需要升级,则在满足FLASH控制器控制条件的情况下,通过其对指定的FLASH地址的数据进行读写擦除,第三方程序需要满足发送相应指令和地址信息,并且把代码包打包发送的功能,最好还要有读取FLASH信息,检查升级是否正确的功能。

这篇关于在线升级之ICAP,ISP,BIN,HEX,MCS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/294538

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份