摘要:对于采用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 |