基于 UltraScale+系列 SPIX8模式dual quad spi 实现mutiboot 详细教程
说明1.参考文档UG570 UG9082.环境vivado 2021.13.FPGA型号ku060Ultrascaleku5p (Ultrascale )4.FlashSPI x8 Dual Quad Flash5.ICAP原语Ultrascale系列使用ICAPE3原语和STARTUP3原语二、基础概念1.IPROG命令使用IPROG Using ICAP7series使用ICAPE2Ultrascale使用ICAPE3原语两者有区别在配置逻辑接收到 IPROG 命令后FPGA 会重置除专用重新配置逻辑之外的所有内容并且 INIT_B 和 DONE 引脚会变为低电平。在 FPGA 清除所有配置存储器后INIT_B 会再次变为 高电平。图中WBSTAR 中的值用于比特流的起始地址。2.bit swapping字节内数据进行交换3、ICAPE3原语中的DEVICE ID4、了解BitStream构成初始填充 (Dummy Pad Words)内容 16个 FFFFFFFF字。作用 为配置过程的初始化和同步提供时间缓冲。总线宽度自动检测 (Bus Width Auto Detect)内容 两个字 000000BB和 11220044。作用 这个特殊的序列用于让FPGA自动检测其配置接口的宽度例如是x8、x16还是x32模式更多填充 (Additional Dummy Pad Words)内容 紧接着又是两个 FFFFFFFF。作用 继续确保时序稳定。同步与配置开始同步字 (Sync Word) AA995566。这是最关键的信号。它告诉FPGA内部的配置逻辑“接下来的数据是正式的配置指令包请开始解析”。空操作 (NOOP) 两个 20000000。NOOP是“无操作”指令用于提供指令间的延时或占位。核心配置指令包写入WBSTAR寄存器 设置Warm Boot Start Address。如果发生热启动如IPROG命令触发应该从哪个地址加载下一个镜像。这是MultiBoot多重启动功能的核心。写入CMD寄存器 执行一个命令。图中示例为 NULL(空命令)但实际使用中如果需要立即触发跳转这里会写入 IPROG命令值为 0000000F5、实际BitStream构成BIT文件采用ASSIC字符构成在FFFF之前的头部是由是目标 FPGA 器件信息的二进制编码。核心功能是匹配控制器这个比特流是为哪个具体型号的芯片设计的避免bit文件和器件型号不符合。0009: 字段类型标识符可能是 0x0009代表 b- Key/Part Name Data。0ff0 0ff0 0ff0 0ff0 0000 0161 0037: 这是字段值。它通常是目标 FPGA 器件名称的二进制编码。这个值需要查阅 Xilinx 内部编码表才能精确解读。比如如6c65 645f 746f 703b - led _ top ; (设计名称: led_top)5665 7273 696f 6e3d - version3230 3231 2e31 - 2021.1提示vivado版本是2021.1FFFF后面是同步头 AA9955664、升级原理Golden Image是从Flash中的0地址开始存储如果在XDC属性中设置了set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR0xXXXXXXXX[current_design]则其帧头会包括WBSTARnext_config_addr寄存器里面指定的upper address space等信息。FPGA器件上电后会从0地址开始加载Golden Image后会根据里面的设定来决定加载Golden Image还是直接跳转到MultiBoot Image存储地址去执行MultiBoot Image当MultiBoot Image加载时候遇到错误Fallback电路会触发去重新从0地址去加载Golden Image。set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE[current_design]其流程如图所示或者是读取超时触发看门狗退回set_property BITSTREAM.CONFIG.TIMER_CFG0x0000_5000[current_design]看门狗时间设置如下详细参考看门狗时间计算对于7系列FPGA来说计算器件启动时间按照以下公式Config time Bitstream size / (Config clk freq * Config interface width)Bitstream size为实际文件的大小如果开启了compression按照压缩后的尺寸计算Config clk freq是CCLK或者EMCCLK的频率Config Interface width取决于启动模式比如SPIX4则位宽为4接下来用启动时间去换算Watchdog timer数值Watchdog timer Config time / Watchdog clk periodWatchdog clk period对于7系列FPGA是4000nsFPGA内部有个65MHz时钟经过256分频系数得到大约为250KHz的时钟这个时钟用于驱动watchdog timer。以KU5P为例Master SPI X8方式加载。配置bit文件128M bitsCCLK 125Mhz Config time 128M bits/(125Mhz *1) 1.024swatchdog period 1/125Mhz 8ns则watchdog timer config_time/watchdog period 1.024s/8ns 128*10^6 0x7A1_2000因此Watchdog Timer Register (10001)的配置为0x47A1_200关键点、关键MCS文件生成参考:UltraScale and UltraScale How should the .mcs/.bin files be generated for SPIx8 configuration with and without multiboot?应用场景一普通设计无双启动镜像Vivado 的 write_cfgmem工具会自动将配置数据分成两半并均匀地将低位和高位字节数据分布到双 Quad SPISPIx8的两个闪存中。用户应确保为 SPIx8 生成 .mcs/.bin文件时指定的大小是双 Quad SPI 配置中两个闪存的总容量。这样 Vivado 才能利用全部可用存储空间并分割配置数据。设计XDC中需要设置的 BITSTREAM 属性和 Vivado 特定的 SPIx8 设置如下set_property BITSTREAM.CONFIG.SPI_BUSWIDTH8[current_design]set_property CONFIG_MODE SPIx8[current_design]示例一假设使用 2 片 1Gb 的闪存组成 SPIx8 模式。由于每个 SPI 闪存容量为 1Gb因此在生成 .mcs/.bin时容量应指定为 256代表 2Gb。生成 .mcs文件的命令如下write_cfgmem-format mcs-interface SPIx8-size256-loadbitup 0 ./TOPx8.bit-file./TOPx8.mcs应用场景二多启动镜像特别注意确保多个启动镜像的地址不要跨越单个闪存的地址空间边界。例如如果采用 2x1Gb 的双 Quad 配置那么多启动镜像的地址都应限定在第一片 1Gb 闪存的地址范围内。多启动的跳转地址可以像往常一样通过设计中的 WBSTAR 寄存器或 BITSTREAM.CONFIG.NEXT_CONFIG_ADDR​ 属性来指定。这个地址不用乘以 2set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR0x01000000[current_design]但是在使用 write_cfgmem生成 .mcs/.bin文件时指定的地址必须乘以 2。指定的地址必须乘以 2。指定的地址必须乘以 2。指定的地址必须乘以 2。因为 Vivado 会将配置数据分割并均匀分布到两个闪存中。设计中应根据需要设置相应的 BITSTREAM 属性例如NEXT_CONFIG_REBOOT、SPI_32BIT_ADDR等。示例二在本例中WBSTAR 地址设置为 0x01000000采用 2x1Gb 的 SPIx8 闪存配置。因为是 2x1Gb 闪存所以容量应指定为 256。设计中设定的 WBSTAR 地址是 0x01000000而用于 write_cfgmem的多启动地址需要乘以 2因此地址变为 0x02000000。最终生成 .mcs文件的命令如下write_cfgmem-format mcs-interface spix8-size256-loadbitup 0 ./Goldenx8.bit up 0x02000000 ./Multibootx8.bit-file Golden_n_Multibootx8.mcs如果是图形画界面生成如图所示如果采用ICAPE3实现地址指定指定的地址不用乘以 2。指定的地址不用乘以 2。三、项目实现1-XDC实现上电跳转golden XDCset_property BITSTREAM.CONFIG.SPI_BUSWIDTH8[current_design]set_property CONFIG_MODE SPIx8[current_design]set_property BITSTREAM.CONFIG.CONFIGRATE102[current_design]#102Mhz 根据实际应用速度来定 可以是8551都可以 set_property BITSTREAM.GENERAL.COMPRESS TRUE[current_design]set_property BITSTREAM.CONFIG.UNUSEDPIN Pullup[current_design]set_property CONFIG_VOLTAGE1.8[current_design]set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES[current_design]set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE[current_design]#updateimage bitstream 注释该语句set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR0x01000000[current_design]update XDCset_property BITSTREAM.CONFIG.SPI_BUSWIDTH8[current_design]set_property CONFIG_MODE SPIx8[current_design]set_property BITSTREAM.CONFIG.CONFIGRATE102[current_design]set_property BITSTREAM.GENERAL.COMPRESS TRUE[current_design]set_property BITSTREAM.CONFIG.UNUSEDPIN Pullup[current_design]set_property CONFIG_VOLTAGE1.8[current_design]set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES[current_design]set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE[current_design]如果需要设置看门狗 请都加上set_property BITSTREAM.CONFIG.TIMER_CFG0xXXXXXXXX[current_design]这个时间值由上述方法进行计算本帖不计算 以防各位工程出错。项目实现2-ICAPE3实现上电跳转参考文档https://www.eet-china.com/mp/a66994.htmlmodule icap #(parameter JUMP_ADDR32h0100_0000)(input clk,input rst_n,input icap_start,output reg icap_done);reg icap_de;reg cs;reg wr;reg[31:0]data;reg[3:0]cnt;wire[31:0]I;localparam config_data032hFFFFFFFF;// 同步字用于同步ICAP接口通常为全1。localparam config_data132hAA995566;// 同步字这是ICAP的同步头用于启动配置操作。localparam config_data232h20000000;// 空操作NOOP命令。localparam config_data332h30020001;// 写一个1到WBSTARWarm Boot Start Address Register寄存器。这是一个命令将下一个数据写入WBSTAR。localparam config_data4JUMP_ADDR;localparam config_data532h30008001;localparam config_data632h0000000F;localparam config_data732h20000000;always(posedge clk)beginif(!rst_n)icap_de1b0;elseif(cnt7)icap_de1b0;elseif(icap_start1b1)icap_de1b1;elseicap_deicap_de;end always(posedge clk)beginif(!rst_n)begin cs1b1;wr1b1;data0;cnt0;endelseif(icap_de1b1)begincase(cnt)0:begin cs1b0;wr1b0;dataconfig_data0;cntcnt1b1;end1:begin cs1b0;wr1b0;dataconfig_data1;cntcnt1b1;end2:begin cs1b0;wr1b0;dataconfig_data2;cntcnt1b1;end3:begin cs1b0;wr1b0;dataconfig_data3;cntcnt1b1;end4:begin cs1b0;wr1b0;dataconfig_data4;cntcnt1b1;end5:begin cs1b0;wr1b0;dataconfig_data5;cntcnt1b1;end6:begin cs1b0;wr1b0;dataconfig_data6;cntcnt1b1;end7:begin cs1b0;wr1b0;dataconfig_data7;cntcnt1b1;enddefault:begin cs1b1;wr1b1;data32h00000000;cnt0;end endcase end end assign I{data[24],data[25],data[26],data[27],data[28],data[29],data[30],data[31],data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[08],data[09],data[10],data[11],data[12],data[13],data[14],data[15],data[00],data[01],data[02],data[03],data[04],data[05],data[06],data[07]};always(posedge clk)beginif(!rst_n)icap_done1b0;elseif(cnt7)icap_done1b1;elseicap_doneicap_done;end ICAPE3 #(.DEVICE_ID(32h04A62093),// KU5P.ICAP_AUTO_SWITCH(DISABLE),// Enable switch ICAP using sync word..SIM_CFG_FILE_NAME(NONE)// Specifies the Raw Bitstream (RBT) file to be parsed by the simulation // model.)ICAPE3_inst(.AVAIL(),// 1-bit output: Availability status of ICAP..O(),// 32-bit output: Configuration data output bus..PRDONE(),// 1-bit output: Indicates completion of Partial Reconfiguration..PRERROR(),// 1-bit output: Indicates error during Partial Reconfiguration..CLK(clk),// 1-bit input: Clock input..CSIB(cs),// 1-bit input: Active-Low ICAP enable..I(I),// 32-bit input: Configuration data input bus..RDWRB(wr)// 1-bit input: Read/Write Select input.);endmodule

相关新闻

【信息科学与工程学】【物理/化学科学和工程技术】知识体系081 磁学——系列二 电磁学理论模型 02

【信息科学与工程学】【物理/化学科学和工程技术】知识体系081 磁学——系列二 电磁学理论模型 02

信号完整性数学模型全集 编号 模型名称 核心数学描述 关键参数与物理意义 应用场景与计算特性 SI.001​ 频域电报方程 描述有损传输线上电压/电流随位置变化的方程: dzdV(z)​=−(R+jωL)I(z) dzdI(z)​=−(G+jωC)V(z) R, L, G, C 为单位长度参数, z 为位置, ω为…

2026/7/25 20:54:58 阅读更多 →
【信息科学与工程学】【物理/化学科学和工程技术】知识体系081 磁学——系列二 电磁学——电磁学理论模型01

【信息科学与工程学】【物理/化学科学和工程技术】知识体系081 磁学——系列二 电磁学——电磁学理论模型01

芯片封装与系统——电磁学理论模型 一、基础电磁理论模型 编号 模型名称 核心数学描述 关键参数与物理意义 应用场景与说明 EM1.001​ 麦克斯韦微分方程组 ∇D=ρ, ∇B=0, ∇E=-∂B/∂t, ∇H=J+∂D/∂t D-电通密度(C/m), B-磁通密度(T), E-电场强度(V/m), H-磁场强度(…

2026/7/25 20:54:58 阅读更多 →
5分钟掌握TEdit地图编辑器:告别繁琐手工,高效创作泰拉瑞亚世界

5分钟掌握TEdit地图编辑器:告别繁琐手工,高效创作泰拉瑞亚世界

5分钟掌握TEdit地图编辑器:告别繁琐手工,高效创作泰拉瑞亚世界 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! …

2026/7/25 20:53:58 阅读更多 →

最新新闻

MoE混合专家系统解析:从原理到LongCat-2.0实践应用

MoE混合专家系统解析:从原理到LongCat-2.0实践应用

在实际 AI 模型开发和应用中,我们经常面临一个核心矛盾:如何在不显著增加计算成本的前提下,持续提升模型在复杂任务上的性能。传统密集模型(Dense Model)的参数规模越大,推理成本也线性增长,这在…

2026/7/25 21:02:02 阅读更多 →
ChatGPT高效提问技巧与专业应用指南

ChatGPT高效提问技巧与专业应用指南

1. ChatGPT基础认知与核心价值ChatGPT作为当前最先进的对话式AI模型,本质上是一个基于Transformer架构的大规模语言模型。它的核心能力在于通过海量数据训练获得的文本理解与生成能力,能够处理包括问答、创作、编程、翻译在内的多种语言任务。在实际应用…

2026/7/25 21:02:02 阅读更多 →
为什么你需要这个Android防撤回神器:3分钟快速上手指南

为什么你需要这个Android防撤回神器:3分钟快速上手指南

为什么你需要这个Android防撤回神器:3分钟快速上手指南 【免费下载链接】Anti-recall Android 免root 防撤回神器 ! 项目地址: https://gitcode.com/gh_mirrors/an/Anti-recall 在即时通讯时代,消息撤回功能虽然保护了隐私,却也让我们…

2026/7/25 21:02:02 阅读更多 →
SteamAutoCrack:3分钟掌握游戏自主权的终极解决方案

SteamAutoCrack:3分钟掌握游戏自主权的终极解决方案

SteamAutoCrack:3分钟掌握游戏自主权的终极解决方案 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack 你是否曾经因为Steam服务器宕机而无法启动自己购买的正版游戏&#xff…

2026/7/25 21:02:02 阅读更多 →
Krea2升级实战:RAW+Turbo模式解析与4K放大工作流优化

Krea2升级实战:RAW+Turbo模式解析与4K放大工作流优化

1. 先搞清楚 Krea2 这次升级到底解决了什么实际问题 如果你之前用过 Krea 或其他 AI 图像生成工具,大概率遇到过这几个问题:生成大尺寸图片时显存爆掉、高清放大后细节糊成一片、批量出图时风格随机性不可控、或者输出色彩总觉得差一口气。这次 Krea2 的升级,名字里带的“4…

2026/7/25 21:02:02 阅读更多 →
Unity游戏本地化系统构建指南:从原理到实践,打造全球化游戏体验

Unity游戏本地化系统构建指南:从原理到实践,打造全球化游戏体验

1. 项目概述:为什么Unity游戏本地化远不止“翻译”?如果你正在开发一款Unity游戏,并且梦想着让它走向全球,那么“本地化”这个词你一定不陌生。但说实话,很多开发者,包括几年前的我,都曾天真地认…

2026/7/25 21:01:01 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻