基于 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/11/3 18:20:41 阅读更多 →
【信息科学与工程学】【物理/化学科学和工程技术】知识体系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/11/4 8:04:48 阅读更多 →
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/11/5 1:04:26 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/5 12:28:01 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/5 12:28:02 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/5 19:38:59 阅读更多 →

日新闻

周新闻

月新闻