Xilinx远程固件升级(一)——QuickBoot方案

Xilinx 7系FPGA远程更新方案------QuickBoot方式远程更新bit

一、远程更新背景和架构

对于非ZYNQ系列的常规FPGA来说,对于bit的更新一般使用JTAG进行烧录。而作为商用产品,想要进行OTA升级时,使用JTAG的升级方式显然不适合,因此,采用了Xilinx官方提供的QuickBoot方式进行能够更新固件,根据xapp1081的描述得知该方式的系统结构图如图1所示。

图1 远程升级结构图

图2 系统构成图

由图1可以看出,该远程升级方案支持以太网、PCIe、USB、SD卡、串口等方式实现,通过这些通信方式将需要更新的bit文件发送到FLASH中,当重新上电后,FPGA会自动从FLASH中读取新的bit文件。

二、远程更新工作原理

FLASH中存储两套可执行文件,分别为GOLDEN bits和UPDATE bits文件,其中GOLDEN bits和UPDATE bits都具备远程更新功能。

可执行文件initial.mcs中包含header 、GOLDEN bits和UPDATE bits文件,header文件中具备开关切换和地址跳转功能,可引导FPGA启动GOLDEN bits或者UPDATE bits文件。

具体如下:

header地址空间为0x000000000x00001020,其中切换开关为0x00000FFC0x00000FFF四字节,ON为0xAA995566,OFF通常为0xFFFFFFFF;地址跳转为0x00001008~0x0000100B四字节,此为UPDATE bits文件的起始地址。

可执行文件update.mcs只具备一套update程序。

initial.mcs和update.mcs是通过bit文件调用脚本生成的,initial.mcs文件是update.mcs文件的两倍大小,具体大小通过脚本进行指定。

将initial.MCS通过VIVADO烧写至FLASH中后,FPGA上电后启动逻辑会判断切换开关是否为0xAA995566,如果是,则读取地址跳转,进行跳转,启动UPDATE程序;如果不是,则继续读取大数据,判断到GOLDEN程序中的0xAA995566,启动GOLDEN程序。无论是GOLDEN还是UPDATE程序,都具备程序更新功能,即UPDATE损坏时,可通过GOLDEN进行更新UPDATE程序,UPDATE程序未损坏时可通过UPDATE更新自己。

三、具体实现

1、客户端服务器建立

本设计采用KC705平台实现,通过AXI_ETHERNET IP核实现mac功能,在SDK中使用echo server API调用LWIP协议创建服务器,PC端采用适合项目要求的工具开发上位机软件,使用TCP/IP协议实现客户端与服务器建立。

LWIP协议中每包数据最大1500字节,因此上位机中选择实际有效数据为1280字节,再加16字节协议头。

2、软核程序固化

程序在Vivado软件下生成system.bit文件,导入到SDK中生成软核.elf的可执行文件,在SDK中通过program FPGA中选择当前工程的.bit、.mmi和.elf文件生成download.bit,此download.bit为融合了FPGA程序和软核程序的最终文件,通过program FPGA可将程序烧写至FLASH中,也可以在VIVADO中生成mcs或者bin文件,将程序烧写至FLASH中。

3、软核AXI总线实现

软核通过网络收到PC机发送的数据包,需要通过AXI总线将数据发送至FLASH 烧写功能的IP,AXI总线具备字节读写和内存数据拷贝功能,函数如下:

static INLINE u32 Xil_In32(UINTPTR Addr);

static INLINE u32 Xil_Out32(UINTPTR Addr);

void Xil_MemCpy(void* dst, const void* src, u32 cnt);

4、FLASH烧写IP

目前FLASH型号为N25Q256,采用X1模式进行烧写。在FLASH中,地址空间为0x01FFFFFF,每个地址对应一个字节。在.vhd文件中,每次烧写一个字节,AXI总线收到数据后调整数据顺序,按字节烧写至FLASH中。

5、远程更新文件生成

1)将download.bit生成download.mcs文件和download.bin文件

cd 盘符:/工程文件夹/bin1

write_cfgmem -format bin -size 32 -interface SPIx1 -checksum -loadbit "up 0x0 download.bit" download.bin

cd 盘符:/工程文件夹/bin1

write_cfgmem -format mcs -size 32 -interface SPIx1 -checksum -loadbit "up 0x0 download.bit" download.mcs

其中

:-format支持bin和mcs文件两种格式。

2)通过download.mcs生成download_initial.mcs和download_update.mcs

exec xilPerl 盘符:/工程文件夹/bin1/MakeSpiFlashProgrammerMcsFiles.pl --imagesize 60 盘符:/工程文件夹/bin1/download.mcs

其中:

download_initial.mcs可用于直接烧写FLASH,包含header、GOLDEN 和UPDATE。

--imagesize,单位为Mbit, 可指定生成的download_initial.mcs和download_update.mcs文件大小,60Mbit = 7.5MB,即download_update.mcs为7.5MB,download_initial.mcs为15MB,

地址分配为0x000000000x00001020-1为header,其中跳转地址为0x007F0000,0x000010200x007F0000-1 为GOLDEN程序空间,0x007F0000~0x00F00000-1为UPDATE程序空间。

3)将download_update.mcs转化为download_update.bin文件

promgen -p bin -r download_update.mcs -o download_update.bin

其中;

FLASH IP烧写中不具备将mcs文件转化为bin文件功能,因此需要通过ISE将mcs转化成bin文件。

download_update.bin可直接用于远程更新。

相关推荐
星夜离尘562 天前
FPGA 32 位字拆成 8 位字节:keep、last 与 ready/valid 背压下的多拍序列化
fpga开发·verilog
花月mmc3 天前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
LabVIEW开发5 天前
LabVIEW FPGA 编程:少编译几次的办法(系列 04/05)
fpga开发·labview
cmc10286 天前
318.关于在ip内部封装PLL,MMCM的注意事项
fpga开发
LabVIEW开发6 天前
LabVIEW CompactRIO 编程模式怎么选(系列 02/05)
fpga开发·labview
FPGA小迷弟6 天前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
码农小韩7 天前
FPGA学习(二)——LED闪烁
fpga开发·verilog·fpga·led·组合逻辑·分频设计
9527华安8 天前
FPGA纯verilog实现DP视频接口,支持2K60帧分辨率,提供3套工程源码和技术支持
fpga开发·音视频·dp
ChaseVLSI8 天前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
9527华安9 天前
FPGA实现ARINC818总线协议,基于GT Transceivers Wizard高速收发器,提供7套工程源码和技术支持
fpga开发·transceivers·arinc818