赞
踩
7系列 MultiBoot 功能可用于控制 FPGA 加载两个及以上程序,可指定 FPGA 从指定的 Flash 地址加载程序。
注:Virtex®-7 HT FPGA不支持 Fallback MultiBoot 功能。
当触发 Fallback 时,内部会产生复位脉冲复位整个 configuration logic,除了 dedicated MultiBoot logic、WBSTAR 寄存器(the warm boot start address)、BOOTSTS寄存器(the boot status)。复位脉冲会拉低 INIT_B 和 DONE 信号,清除 configuration memory,最后从 FLASH 地址 0 重新加载,重新加载会忽略 WBSTAR 和 IPROG 命令。
有以下两种方式可以实现 MultiBoot 功能:
golden 程序从 Flash 的地址0开始存储;当设置了 WBSTAR 属性时,IPROG 会自动嵌入到 bitstream 中。
golden 和 update 的 bitstream 属性设置如下,其中 update 不需要设置 NEXT_CONFIG_ADDR 属性。
注:
1、GENERAL.COMPRESS 使能这个属性可减少程序烧写时间和加载时间;
2、通过 xdc 约束直接修改 bitstream 属性相比使用 Vivado GUI 设置更节约时间,因为通过 GUI 设置得先完成实现步骤才能设置,而且更改完还需要重新综合实现。
##Golden 程序 xdc 约束
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x0400000 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]
##Update 程序 xdc 约束
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]
golden 程序约束 NEXT_CONFIG_ADDR, 不管约不约束 CONFIGFALLBACK ENABLE,BIN 文件都没有区别。
golden 程序不约束 CONFIGFALLBACK ENABLE,且不约束 NEXT_CONFIG_ADDR,BIN 文件才禁用 fallback,且删除 IPROG 命令。
update 程序不约束 CONFIGFALLBACK ENABLE,BIN 文件比较如下,默认禁用 fallback,CRC 错误不会触发回退。
通过逻辑控制 ICAPE2 原语
发送流程:同步字 -> WBSTAR -> IPROG
注:输入配置信息需要位转换
执行 IPROG 指令后,FPGA 会从 WBSTAR 指示的地址开始进行加载
1、执行 IPROG 命令,控制 FPGA 从 WBSTAR 指定的地址开始加载 update 程序;
2、若加载失败则触发 Fallback,然后加载 golden 程序。
注:当触发 Fallback 时,内部会产生复位脉冲复位整个 configuration logic,除了 dedicated MultiBoot logic、WBSTAR 寄存器(the warm boot start address)、BOOTSTS寄存器(the boot status)。复位脉冲会拉低 INIT_B 和 DONE 信号,清除 configuration memory,最后从 FLASH 地址 0 重新加载,重新加载会忽略 WBSTAR 和 IPROG 命令。
write_cfgmem -format mcs -interface SPIX1 -size 16 -loadbit "up 0 <path>/golden.bit up 0x0400000 <path>/update.bit" <path>/filename.mcs
以下三种情况会触发 Fallback:
MultiBoot 正常加载,FPGA 加载 Update 程序。
状态寄存器如下所示:
升级文件删除 update 部分,触发 timer1 超时错误 Fallback,FPGA 加载 Golden 程序。
状态寄存器如下所示:
删除 update 部分的 DESYNC 命令,触发 timer2 超时错误 Fallback,FPGA 加载 Golden 程序。
状态寄存器如下所示:
修改 Update 程序的写 CRC 寄存器值,并删除 update 部分的 DESYNC 命令,会先触发 CRC 错误 Fallback,FPGA 加载 Golden 程序。
修改 Update 程序的 IDCODE值,触发 IDCODE 错误 Fallback,FPGA 加载 Golden 程序。
状态寄存器如下所示:
FPGA 加载过程中会一直计算 CRC 值,收到最后一个数据后会跟写的 CRC 寄存器值进行比较,通过修改 Update 程序的写 CRC 寄存器值,触发 CRC 错误 Fallback,FPGA 加载 Golden 程序。
状态寄存器如下所示:
xdc 约束设置看门狗定时器属性,定时器计时时钟为 CFGMCLK
set_property BITSTREAM.CONFIG.TIMER_CFG <Timer Value> [current_design]
下面有另一种方法实现看门狗定时器的功能,省去了需要计算精确的 TIMER_CFG 计时值。
注:确保 golden、timer1、timer2 区域保持不变,升级只进行 update 区域更改。
cd C:/Users/arlen/Desktop/repo/Project/Fallback_test
source multiboot_address_table.tcl
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x00240000 [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design]
## 生成 mcs 文件
write_cfgmem -force -format mcs -size 32 -interface SPIx4 -loadbit {up 0x00000000 led_test_golden.bit up 0x00240000 led_test_update.bit} -loaddata {up 0x0023FC00 timer1.bin up 0x00480000 timer2.bin} multiboot_normal.mcs
## 生成 bin 文件
write_cfgmem -force -format bin -size 32 -interface SPIx4 -loadbit {up 0x00000000 led_test_golden.bit up 0x00240000 led_test_update.bit} -loaddata {up 0x0023FC00 timer1.bin up 0x00480000 timer2.bin} multiboot_normal.bin
write_cfgmem -force -format bin -size 32 -interface SPIx4 -loaddata {up 0x00000000 led_test_golden.bin up 0x00240000 led_test_update_no_fallback.bin up 0x0023FC00 timer1.bin up 0x00480000 timer2.bin} multiboot_update_no_fallback.bin
对应 Tcl 指令
write_cfgmem -format bin -size 32 -interface SPIx4 -loadbit {up 0x00000000 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/led_test_golden.bit" up 0x00240000 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/led_test_update.bit" } -loaddata {up 0x0023FC00 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/timer1.bin" up 0x00480000 "C:/Users/arlen/Desktop/repo/Project/Fallback_test/timer2.bin" } -file "C:/Users/arlen/Desktop/repo/Project/Fallback_test/multiboot_normal_GUI_gen.bin"
支持 4 种配置模式
MultiBoot 的两个程序都需包含 warm boot jump sequence,warm boot jump sequence 包含 WBSTRA(用于指定程序加载地址)、IPROG(用于重启 FPGA 配置并从 WBSTAR 指定的地址开始加载)
QuickBoot 程序包含 3 部分
QuickBoot header
critical switch word:用于指示 FPGA 是否执行 warm boot jump sequence
warm boot jump sequence:包含 WBSTRA(用于指定程序加载地址)、IPROG(用于重启 FPGA 配置并从 WBSTAR 指定的地址开始加载)
golden bitstream image area
update bitstream image area
QuickBoot 远程升级步骤
注:golden 和 QuickBoot hear 的第二部分内容 (warm boot jump sequence) 都不允许更改
写 NOR Flash 步骤
Bitstream 在 flash 中的位置(要适配 flash 最小擦除单位 segment)
FLASH 中的两个 bitstream 间要填充足够的数据,保证第一个程序加载完之前不会加载到下个 bitstream 的数据。
BpiFlashProgrammer.vhd is the programming state machine that implements the QuickBoot programming algorithm for BPI flash. The BpiFlashProgrammer interfaces directly with the BPI flash.
SpiFlashProgrammer.vhd: QuickBoot flash programmer state machine for SPI flash
SpiSerDes.vhd: Serializer/deserializer interface to the SPI bus
第 1 个 segment 为 warm boot jump sequence,跳转地址为第 2 个 segment 的最后一个 word (critical switch word),这样可以节省读完第一个 segment 的时间。
Xilinx design tools 生成的 bitstream 包含:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。