如何实现基于FPGA芯片的远程编程

时间:2022-10-10 05:43:03

如何实现基于FPGA芯片的远程编程

摘 要

对于采用FPGA做主控芯片的产品或模块,在线编程方法(ISP)造成的设备升级维护成本将随产品部署数量的增大而提高。本文研究了Xilinx Spartan系列FPGA的在应用中编程(IAP)方法,并讨论了其应用在无线通信系统中实现FPGA系统远程编程(远程升级)的方法。

【关键词】单FPGA系统 IAP 远程编程 系统升级 远程升级

随着FPGA工艺的持续改进,其性价比不断提高,越来越多的产品或模块采用FPGA作为主控芯片。单FPGA控制系统应用时一般采用ICP(In Circuitry Programming,在线编程)编程方法,但随着产品的部署,这种编程方法带来的设备升级成本越来越高。因为ICP在线加载方法必须依靠专用的仿真器和编程环境通过JTAG口对器件进行编程,需要开发人员现场拆机操作;而FPGA作为高可靠的嵌入式解决方案,其产品常常部署在恶劣环境中,甚至是人类无法到达的地方,给设备的升级维护造成了极大的困难。IAP(In Application Programming)即在应用编程,是指编程过程不会打断正常应用,对用户来讲是一种静默的编程方式,不需要专门的工具,也不需要拆机等操作。将IAP技术和无线通信相结合,可以实现远程网络编程,解决ICP方法带来的一系列问题。

1 FPGA的IAP依据

Xilinx系列FPGA支持主串、主并、从串、从并、JTAG、SPI、BPI等多种加载模式。传统一些设计中为了实现IAP编程,常采用从串或者从并的方法,这种方法需要额外增加一个MCU或CPLD负责加载工作,增加了成本和电路复杂度,并且MCU或CPLD本身也需要编程和升级。本文讨论的方法采用SPI加载方式,电路形式简单,硬件连接如下图1所示。图中FPGA系统通过通用串口与上位机相连,上位机可以是PC、MCU等控制器,用来启动FPGA的重配置时序并与编程逻辑交互提供可靠的编程数据。在IAP应用中与FPGA连接的网络模块或其他设备作为上位机,正常的通信接口作为编程数据口。

系统上电之后,FPGA根据加载配置线M2、M1、M0的设置(M[2:0]=[0,0,1])进入主机SPI加载模式;在主机SPI模式下,FPGA自主产生SPI FLASH的读时序从FLASH中读取数据编程FPGA;在配置结束后FPGA进入正常工作模式,并将SPI配置引脚释放为用户IO;在正常工作过程中,FPGA可通过作为用户IO的SPI配置引脚对FLASH进行读写,修改FPGA的配置文件;FLASH编程结束后,根据系统要求FPGA将产生自加载时序完成FPGA的重新编程。

2 IAP远程编程

上述IAP方法采用通用数据接口,对数据传输形式没有特殊要求。将此IAP方法应用在无线传输系统中,可以通过无线数据分发的方法实现设备的远程编程。在此,将无线系统中的设备简化为网络模块和FPGA系统,网络模块完成无线网络数据的传输,并且充当IAP中的上位机的作用,FPGA系统在收到编程数据之后自主进行IAP编程。网络模块和FPGA系统之间通过正常工作时的通信接口进行编程数据传输。由于IAP使用独立的硬件逻辑,所以系统可以在正常通信过程中完成编程。

2.1 编程数据的传输

无线通信系统模型如图2所示。

远程编程数据传输的难点是,一是编程数据要保证零差错传输,二是满足多个用户并行传输。针对上述难点考虑的数据传输方法有两种。一种是在系统需要重编程时,基站搜索空闲信道,然后以群发的形式向在线的所有移动用户同时群发编程数据;第二种是,系统需要重编程时,移动用户主动请求编程数据。第一种方法可以同时升级整个群组,问题是可能每个移动台的信道环境不同,造成不同移动台接收到数据的错误比特不同,为了数据保证零差错传输,基站需要为所有的错误比特重传,当群组容量较大或者电磁环境复杂时传输效率将大大降低。第二种方法相当于是对移动用户进行了筛选和排队,只对申请到编程逻辑信道的用户进行编程,移动台主动发起请求的方法也大大降低了基站的管理难度,可以适应不同的网络拓扑。本文采用第二种方法。

编程流程如下图3所示。编程前,将编程文件存放在基站的物理存储器上,并置位编程标识数组A[N],其中N为群组中移动台的数量。接入的移动台查询对应的编程标识位,如果需要编程则向基站申请编程数据,基站用空闲信道与申请的移动台建立点对点的数据连接,如果没有空闲信道则将申请的移动台加入编程队列,如果有多个空闲信道则同时响应多个申请。编程成功后,基站将对应的编程标识位清零。

编程过程占用的信道为业务之外的空闲逻辑信道,在编程过程中,如果有业务需求,编程过程会被中断并进入中断编程排队,一旦重新获得空闲逻辑信道则继续编程过程,直到编程完成。基站根据编程标识数组A[N]对群组的移动台用户进行编程状态监视和管理。

2.2 编程实现

网络模块将数据无差错接收完成后,将编程文件存放于移动台本地存储器,并触发编程过程,编程流程如下图4所示。FLASH芯片AT45DB321D采用标准页模式时每页容量为528BYTE,即N=528。

编程的实现主要包括以下几个步骤。

(1)网络模块产生编程数据。网络模块读取本地存储器上的编程文件,解析、打包和添加校验之后将数据以特定帧格式发送个FPGA系统。

(2)网络模块与FPGA系统通信。网络模块发送编程启动命令,获得应答之后开始向FPGA发送编程数据包,FPGA对收到的数据进行校验,校验成功则申请下一个数据包,否则申请重发。当发送完FLASH一页大小数据之后,网络模块通知FPGA结束一页数据的写时序。等待FLASH当前页写入完成之后,网络模块继续发送下一页数据,直到编程数据发送完成。

(3)FLASH编程。FLASH选用ATMEL的AT45DB321D,此芯片支持页编程方法,即芯片先通过SPI将数据锁入缓存器Buffer中,然后再将缓存数据写入主存储器的特定页中。FPGA接收完一页数据之后,将使能信号拉高结束数据当前写周期。FLASH检测到使能信号上升沿时,先将主存储器当前页的一整页数据擦除,然后再将Buffer中数据写入,擦除和数据写入当前页都有芯片自己完成而不需要外部时序。

(4)FPGA重配置。在FLASH编程结束之后,FPGA产生一个低电平脉冲控制FPGA芯片的PROG_B引脚初始化加载进程完成FPGA的重配置。至此,整个编程过程结束。

3 结论

本文将FPGA的IAP方法与无线传输相结合实现了FPGA系统的远程编程,大大缩短了系统的升级维护成本。

以Xilinx的XC3S1400A为例,其编程文件大小为580KB,网络的数据速率38.4kbps,文件的传输时间约为120秒,而FPGA自身的编程过程不会占用任何业务资源。所以一台设备的编程成本为120秒钟的空闲信道资源,在空闲信道资源较多的情况下可以进行多台设备并行编程。由于采用了业务中断机制,编程占用的信道资源不会对正常业务造成影响,对用户是透明的。这与传统的需要明显人为操作的编程方式相比,大大减少了人力、时间和资金成本,同时避免了维修过程对企业形象造成的不良影响。

作者简介

冯跃辉(1984-),男,广东省广州市人,供职于中国电子科技集团公司第七研究所,工程师。

作者单位

中国电子科技集团公司第七研究所 广东省广州市 510310

上一篇:实时路况在机顶盒上的图形化显示方案 下一篇:VPN技术在计算机网络中的应用研究