一种以太网在线更新FPGA目标程序的方法
2016-11-09沈潇波颜科峰陈子龙
沈潇波 颜科峰 陈子龙
(第七一五研究所,杭州,310023)
一种以太网在线更新FPGA目标程序的方法
沈潇波 颜科峰 陈子龙
(第七一五研究所,杭州,310023)
为了解决现有水声通信系统中FPGA目标程序不能在线更新的问题,提供一种在线更新目标程序的方法及系统。待更新的目标程序经由以太网传输链路发送至包含FPGA的传输节点,FPGA通过SPI协议,将目标程序写入flash;重新上电后,FPGA从flash中读取新的目标程序,完成目标程序在线更新。该方法支持单个节点的更新及多个节点批量更新,具有良好的工程应用价值。
水声通信系统;FPGA;目标程序;SPI协议;在线更新
通常情况下,FPGA必须在上电阶段,从外部存储器读取目标程序,加载配置后才能运行。对于目标程序的在线更新,意味着在FPGA正常运行期间,通过FPGA自身或者其他控制器去主动修改外部存储器的内容;待下次重新上电后,FPGA才能加载配置更新后的目标程序。本文从实际工程应用出发,给出了一种以太网作为传输链路,通过上位机在线更新目标程序的方法和系统。
1 问题描述
在水声通信系统中,传输节点示意如图1所示,传输链路无法实现对FPGA目标程序在线更新。本文描述的水声通信系统由以太网作为传输链路连接各个节点,每个节点均具备中继转发功能;工作状态下,“节点1”的水声信号经由N-1级节点转发至上位机;其余N-1个节点的水声信号以此类推,最终,所有水声信号由节点N传至上位机。
图1 传输节点示意图
以Xilinx Spartan-3E系列FPGA为例进行描述。通常情况,FPGA上电主动从Xilinx PROM中读取目标程序,加载配置后运行。当需要更新Xilinx PROM目标程序时,将节点结构件拆除,通过专用JTAG接口在Xilinx ISE环境下完成对目标程序的更新,工作流程烦琐,且无法实现节点1至节点N批量更新。根据文献[1]所述,Xilinx Spartan-3E 系列FPGA支持第三方厂家生产的SPI(Serial Peripheral Interface)flash存储目标程序,替换Xilinx PROM功能。通过以太网传输链路将目标程序通过SPI协议反向从FPGA写入flash,待重新上电后,FPGA从flash中读取新的目标程序,实现在线更新的目标,流程如图2。
图2 以太网更新程序操作步骤
2 SPI协议
当使用SPI协议配置Xilinx FPGA,FPGA作为主设备,SPI flash作为从设备,如图3所示。FPGA通过SCK时钟控制时序,当选通信号SS有效时,数据MOSI随时钟节拍从FPGA至flash;同一时钟周期,数据MISO从flash至FPGA。
图3 SPI配置框图
FPGA上电后,主动从flash读取目标程序,加载配置后运行。当需要更新目标程序时,FPGA通过传输链路接收目标程序,以SPI协议对flash进行擦除、读写操作,实现对flash内容的更新。
3 MCS格式解析
支持第三方SPI flash的Xilinx FPGA目标程序为MCS格式。一个MCS目标文件由多段记录组成,每段记录包含三部分:“9字符前缀”、“内容”及“校验和”;其中“9字符前缀”为:1个字符“起始”(:)用于表征该段记录的开始;2个字符“字节数”用于表征该段记录的“内容”所包含的字节数;4字节“地址”;2字节“记录类型”[2,3]。
Xilinx FPGA目标程序主要使用3类“记录类型”,格式如图4:Data Record,表示向flash写入目标程序;End of File Record,表示目标程序结束;Extended Linear Address Record,设置偏置地址值。
图4 记录类型
一个MCS目标程序先由“04- Extended Linear Address Record”设置flash存储空间的偏置地址;随后是若干段“00-Data Record”将每段的“内容”写入指定地址的flash存储空间;接着由“04-Extended Linear Address Record”设置新的存储空间的偏置地址;若干段“00-Data Record”写入新偏置地址的flash存储空间;最后,由“01-End of File Record”表示整个目标程序结束。
4 流程控制
当需要在线更新目标程序时,首先上位机通过以太网发送“擦除”指令给FPGA,FPGA收到指令对flash进行擦除操作,擦除完成后反馈确认信息给上位机;上位机收到确认信息后,将待更新的目标程序以段为单位发送至FPGA,FPGA解析后对flash进行“写入”操作,直至目标程序结束;待FPGA完成所有“写入”操作,进行校验操作,读取“写入”的内容,以段为单位回传至上位机,上位机将收到的内容与发送的目标程序进行比对,校验正确表明flash目标程序更新成功。更新目标流程如图5所示。
图5 更新目标程序流程图
5 结论
本文所述的以太网在线更新目标程序的方法解决了水声通信系统中节点FPGA目标程序无法在线升级的问题。针对结构封闭,不易拆装的场合,在线升级目标程序操作简便实用,提高了代码更新的效率,使得批量生产和维护变得容易,具备良好工程应用价值。该方法已经应用于具体设备中。设计的在线更新方法,需要确保代码更新期间设备保持供电,一旦操作过程掉电,将导致新的目标程序“写入”失败,同时旧的程序已被“擦除”,必须重新通过JTAG下载程序。今后可以考虑外挂两片flash,切换操作,保证掉电情况下,至少有目标程序可以加载,直至更新成功。
[1] Stephanie Tapp. Configuring Xilinx FPGAs with SPI Serial Flash[Z]. 2010.
[2] Xilinx.PROMGen - Description of PROM/EEPROM file formats: MCS[Z]. 2012.
[3] Xilinx. Spartan-3 Generation Configuration User Guide[Z]. 2009.