当前位置: 首页 > news >正文

FPGA 设计的快速启动方法与远程更新(二)

前言:本文我们介绍QickBoot实现细节,主要包括BPI和SPI配置模式下关键字含义及配置作用,以及远程升级如何规划Flash各个扇区功能,并给出BPI和SPI模式下Flash扇区规划示例。

1、 关键字(Critical Switch Word)

FPGA 嵌入式系统中 “快速启动(QuickBoot)” 功能的实现依赖于以下要素:

(1)关键开关字(Critical Switch Word)

(2)闪存概览与 QuickBoot 闪存组件映射

(3)比特流镜像大小与闪存大小选择

(4)配置时间

(5)QuickBoot 更新镜像验证

1.1 关键开关字定义及配置流程中的作用

关键开关字是一个特殊的字值。只有当关键开关字的存储位置包含一个精确的、预先确定的值时,该开关才会被视为处于开启(ON)状态。是否存在这个精确的关键开关字值,决定了 FPGA 配置逻辑是否执行热启动跳转序列。

要理解关键开关字的工作原理及其特殊的 “开启(ON)” 值,需要对 FPGA 比特流以及 FPGA 的内置配置逻辑有深入的了解。

(1)Xilinx FPGA 比特流文件(.bit)的内部结构

图1:Xilinx FPGA 比特流文件(.bit)的内部结构

Xilinx FPGA 比特流文件通过由一系列 32 位字组成,由 Xilinx 设计工具生成的所有比特流,均按顺序由以下部分组成:总线宽度自动检测字、同步字、FPGA 配置的数据数据包 。

总线宽度自动检测字:FPGA 在 BPI 和 SelectMAP 模式配置开始时,使用该字来自动检测并行配置数据总线的宽度。

同步字:用于标记比特流的开始,并将配置逻辑与同步字之后的数据包的 32 位边界进行同步(适用于所有配置模式)。

包头字 :指定寄存器地址和数据字计数,用于将数据写入寄存器。

包命令或数据字 (Packet command or data words):属于每个数据包的一部分。

1.2 BPI 模式下如何识别关键开关字

BPI 模式下利用 “总线宽度自动检测模式” 作为 “关键开关字” 来启动配置流程:当 FPGA 从 BPI 闪存读取数据时,FPGA 配置逻辑会一直停留在第一阶段,直到在其D[0:7] 引脚上从总线宽度自动检测模式的第一个字中检测到 (0x000000BB)即为 QuickBoot 方法的关键开关字。就 QuickBoot 关键开关字而言,FPGA 配置逻辑的后续阶段只有在找到总线宽度自动检测模式之后才会被 “开启(ON)”。

1.3 SPI 模式下如何关键开关字

在 SPI 模式下,FPGA 不使用总线宽度自动检测逻辑,当 FPGA 从 SPI 闪存读取数据时,FPGA 配置逻辑会一直停留在第一阶段,监控传入的数据以寻找同步字 0xAA995566,从而将自身与传入比特流的 32 位字边界进行同步。对于SPI模式配置,同步字即为 QuickBoot 方法的关键开关字,FPGA 配置逻辑的后续阶段只有在找到同步字之后才会被 “开启(ON)”。

表 1 总结了在每种配置模式下,使关键开关字处于 “开启(ON)” 状态的确切数值。

表1:BPI和SPI配置模式关键字ON值

注意:由于存在位和字节的交换(bit and byte swapping),BPI 闪存十六进制数据(MCS)文件中的关键开关字在文件内部显示为 0x0000DD00。

2 、 QuickBoot 如何规划和利用闪存

QuickBoot 闪存编程算法的实现需要了解 NOR 闪存的架构和操作。特别是,必须将QuickBoot闪存组件映射到特定的闪存区域,并且必须将 QuickBoot算法流程映射到这些特定区域可用的闪存操作上。

2.1 NOR Flash架构以及基本读写操作

NOR 闪存包含一个由数据字或数据字节组成的线性阵列。该线性阵列被分割为可擦除的块(Block)或扇区(Sector)。对于某些 NOR 闪存,扇区还会被进一步分割为子扇区(Subsectors)。有关各分段及其大小的信息,请参阅相应的 NOR 闪存数据手册。

使用新数据值对 NOR 闪存进行重编程(Reprogramming)需要一个两步过程:

(1)擦除操作 (Erase operation):将所选分段的所有数据位重置为1状态。

(2)编程操作 (Program operation):仅将数据位从1状态更改为0状态。

擦除操作可以在块、扇区或子扇区上执行。也就是说,指定分段内的所有数据字或字节都会通过每次擦除操作被擦除。编程操作则可以针对单个字或字节执行。注意: 通常为了提高速度,每次编程操作都会对一个字缓冲区(buffer of words)或一个字节页(page of bytes)进行编程。

2.2 QuickBoot 组件在闪存中的布局策略

由于修改闪存需要执行擦除操作,且擦除操作会影响整个闪存分段,因此闪存分段架构决定了 QuickBoot 组件在闪存中的布局方式:

图2:QuickBoot 组件在闪存中的布局方式

(1)QuickBoot 头文件按以下顺序放置:

a. QuickBoot 头文件第 1 部分(即关键开关字)放置在其独立的可擦除分段中;

b. QuickBoot 头文件第 2 部分紧随第 1 部分之后,但位于与第 1 部分不同的闪存分段中。

(2)黄金比特流镜像 (Golden bitstream image):紧随 QuickBoot 头文件之后,位于闪存阵列中。

(3)更新比特流镜像 (Update bitstream image):放置在其独立的可擦除分段中。更新镜像与黄金比特流镜像不共享任何可擦除分段。

关键开关字被放置在其独立的可擦除分段中,这样擦除操作只会影响关键开关字。同样,更新镜像被放置在其独立的分段中,这样重编程过程就不会影响黄金比特流镜像。

2.3 QuickBoot 组件BPI闪存映射示例

图3 展示了基于 Micron P30 闪存的 QuickBoot 解决方案中,BPI 闪存内容的详细映射图。关键开关字位于第一个可擦除块的末尾,该块大小为 65,536(0x00010000)个 16 位字。该图展示了更新比特流 “完好” 和 “损坏” 的示例。

图3:QuickBoot BPI 闪存映射(含更新镜像完好与损坏的情况)

对于更新成功(good update)的示例,关键开关字位置包含第一个总线宽度自动检测字(0x000000BB)。在此情况下,FPGA 配置逻辑执行以下序列:

(1)开始总线宽度自动检测序列;

(2)执行紧随其后的 QuickBoot 头文件第 2 部分中的热启动跳转序列;

(3)最后加载更新比特流。

对于更新失败(bad update)的示例,关键开关字位置不包含第一个总线宽度自动检测字。因此,在此情况下,FPGA 配置逻辑执行以下序列:

(1)继续搜索总线宽度自动检测字,忽略 QuickBoot 头文件的第 2 部分。

(2)找到位于黄金比特流开头的标准总线宽度自动检测字。

(3)最后加载黄金比特流。

更新比特流位于其自身的一组可擦除块内。更新比特流的起始位置对齐到其第一个可擦除块的开头,即字地址 0x00100000。注意: 特定实现中更新比特流镜像的地址可能与图 3 所示的不同,因为更新镜像的位置取决于比特流的大小。

2.4 QuickBoot 组件SPI闪存映射示例

QuickBoot 组件到 SPI 闪存的映射与 BPI 闪存的映射类似,唯一的区别在于关键开关字。在 SPI 模式下,FPGA 配置逻辑跳过了总线宽度自动检测阶段,而是直接开始搜索同步字(Sync word)。因此,QuickBoot 头文件中省略了总线宽度自动检测字,并且针对 SPI 闪存的 QuickBoot 头文件以同步字作为关键开关字开始。

图4:QuickBoot SPI 闪存映射(含更新镜像完好与损坏的情况)

图 4 展示了基于 Micron N25Q 闪存 QuickBoot 解决方案中,SPI 闪存内容的详细映射图。关键开关字位于第一个可擦除子扇区(sub-sector)的末尾,该子扇区的大小为 4,096(0x00001000)个 8 位字节。

对于更新成功(good update)的示例,关键开关字位置包含正确的同步字(0xAA995566)。因此,在此情况下,FPGA 配置逻辑执行以下序列:

(1)在关键开关字位置进行同步;

(2)执行紧随其后的 QuickBoot 头文件第 2 部分中的热启动跳转序列;

(3)最后加载更新比特流。

对于更新失败(bad update)的示例,关键开关字位置不包含有效的同步字。因此,在此情况下,FPGA 配置逻辑执行以下序列:

(1)继续搜索同步字,忽略 QuickBoot 头文件的第 2 部分;

(2)找到位于黄金比特流开头的标准同步字;

(3)最后加载黄金比特流。

更新比特流位于其自身的一组可擦除块内。更新比特流的起始位置对齐到其第一个可擦除块的开头,即字节地址 0x00200000。注意: 特定实现中更新比特流镜像的地址可能与图3 所示的不同,因为镜像更新的位置取决于比特流的大小。


欢迎关注FPGA技术实战公众号,喜欢就多多转发吧!

http://www.jsqmd.com/news/1323567/

相关文章:

  • AI 帮我写完功能后,我把 Code Review 的第一问换了
  • 会议录音怎么整理成结构化纪要?盘点4个AI会议总结工具,办公必备
  • 安卓SDK初始化顺序优化:解决安全误报问题
  • Windows右键菜单终极清理与定制指南:ContextMenuManager完全使用手册
  • 医疗电子病历界面设计:提升临床效率的关键技术
  • 2026年盐城GEO推荐系统公司咨询电话汇总 - 品牌排行榜
  • TikTok评论数据采集:浏览器自动化与结构化数据提取的工程实践
  • Protocol Buffers协议逆向与AES解密实战指南
  • 杰理蓝牙芯片解码功能开发与优化指南
  • FLAC3D预留核心土开挖技术详解与工程实践
  • C语言入门指南:从基础语法到开发实践
  • DMA传输性能优化:深入解析数据宽度与地址对齐的硬件约束
  • 2026 年现阶段禅城正规的管道疏通施工厂家推荐,去年花200请师傅通的,今天才发现这瓶1块钱的东西就能搞定? - 行业推荐官【认证】
  • PCSX2模拟器配置指南:在PC上完美运行PS2版《侠盗猎车手:圣安地列斯》
  • 手机自带工具mp4转mp3怎么选?盘点五款视频提取音频工具,附各平台实测对比
  • 2026年35正规HSW6系列开关柜供应商行业研究
  • 链表去重算法详解与实现技巧
  • 抖音批量下载终极指南:5分钟掌握无水印视频下载的专业方案
  • 北京婚姻律师谁比较好?为你推荐这几位 - 品牌排行榜
  • Unity 6编辑器界面全解析:从核心窗口到高级工作流优化
  • 打造个性化知识中心:Obsidian Homepage终极指南
  • 教室健康照明改造:LED灯具选型与安装方案详解
  • PHP哈希加密技术演进与安全实践
  • 英雄联盟Akari助手:5分钟快速上手指南,全面提升游戏效率
  • AI服务突然降级?92%源于隐性依赖漂移——附自动化检测脚本(GitHub Star超3k)
  • 基于S7-200 PLC的汽车自动清洗系统设计与实现
  • Django框架在学科网站开发中的实践与应用
  • HTTP请求走私漏洞原理与BurpSuite实战挖掘指南
  • 夏天经常点奶茶外卖,挖到个省钱小渠道。
  • 评选星保姆级操作指南:线上投票创建、运营、数据导出完整流程 - 投票评选制作软件系统