本发明涉及程序加载技术领域,具体地说,尤其涉及一种用于实现FPGA程序动态升级及自加载的装置及方法。
背景技术:
通信系统大都由多个分机组成,每个分机内部都有各自的信号处理模块,都对应着相应的程序。随着通信系统向集成化、综合化的方向发展,对FPGA的使用有更高的要求,不但要求FPGA程序能进行远程动态升级,还必须在规定时间内完成快速加载运行。
普通的FPGA静态升级法是通过JTAG口把FPGA程序烧写到官方制定的适配FLASH中。此种方法缺点是要使用JTAG口,连线多,不利于产品后期的动态维护和升级,通常在开发阶段使用,比如烧一些十分高可靠性的成熟程序等。该方法的优点是FPGA程序加载速度快,上电后FPGA会进行自加载运行,不需要外部干预。
常规的标准C开发系统,都有成熟的动态升级和加载方法。FPGA程序由于用硬件语言编写,现在普遍方法还是通过第三方目标器件来协助完成,比如利用常见的处理器DSP或CPLD等逻辑器件模拟标准SPI时序或BPI进行程序升级和加载。升级的时候是通过DSP等器件接收用户程序,然后烧写到指定的FLASH中;加载的时候通过DSP等器件模拟SPI或者BPI时序把FLASH中的数据加载到FPGA中去。
采用处理器进行协助的方法,可以满足FPGA程序动态升级的要求,但会耗费多余的硬件资源。同时,综合化通信系统通常要求分机设备在几秒中内完成程序加载,如果用第三方器件模拟时序把程序加载到FPGA内存中去,近百兆的数据花费几十秒钟,采用自加载只需要1~2秒,所以该方法无法满足快速加载的需求。因为DSP或者其它处理芯片,都是通过软件模拟时序的方式把存储于外部FLASH或者DDR等器件的程序搬移到FPGA中,在加载时间和可靠性上,无法与通过FPGA芯片自身完成加载的方法相比。
技术实现要素:
为解决以上问题,本发明提供了一种用于实现FPGA程序动态升级及自加载的装置及方法,用以实现FPGA程序动态升级及自加载。
根据本发明的一个方面,提供了一种用于实现FPGA程序动态升级及自加载的装置,包括:
FLASH,设置于FPGA外部,
其中,在所述FLASH内部设置有可自动加载到FGPA中运行的引导程序,在监测到FPGA程序升级指令时,所述引导程序自动接收用户升级程序数据,完成FLASH程序烧写并把升级成功的用户程序自动加载入FPGA中运行。
根据本发明的一个实施例,所述引导程序包括:
串口监测子程序,用于监测FPGA通信串口,以实现FPGA与外部设备的数据交互;
程序烧写子程序,用于将通过通信串口接收到的用户程序烧写入FLASH;
复位子程序,用于在FLASH烧写完成后使FPGA自动复位;
跳转子程序,用于在FPGA自动复位后自动加载FLASH中的用户程序。
根据本发明的一个实施例,所述引导程序存储在FLASH中零开始的空间,用户程序通过所述引导程序升级到FLASH任意地址空间。
根据本发明的一个实施例,所述FLASH与FPGA通过SPI通信接口连接。
根据本发明的一个实施例,待程序升级的FPGA的一输出端口与自身复位端口连接,以使得FLASH烧写完成后通过所述输出端口向所述自身复位端口发出自复位信号。
根据本发明的一个实施例,所述引导程序由硬件语言编写,在产品开发阶段烧写入FLASH中。
根据本发明的另一个方面,还提供了一种用于实现FPGA程序动态升级及自加载的方法,包括:
存储于FLASH中的引导程序自动加载到FPGA中并启动,以侦测是否有升级指令;
如侦测到有升级指令,FPGA通过引导程序接收升级指令,并根据升级指令在FLASH中擦除及烧写用户程序;
在FLASH烧写完成用户程序后,所述引导程序将升级成功的用户程序自动加载入FPGA中运行。
根据本发明的一个实施例,在FLASH烧写完成用户程序后还包括FGPA通过引导程序发出自复位信号,FPGA基于自复位信号进行复位后将升级成功的用户程序自动加载入FPGA中。
根据本发明的一个实施例,根据升级指令在FLASH中烧写用户程序之后还包括校验步骤,用以判断用户程序烧写是否成功。
根据本发明的一个实施例,存储于FLASH中的引导程序自动加载到FPGA中并启动后,在预定时间内未检测到升级指令则跳转至已存储的用户程序入口。
本发明的有益效果:
本发明不但可以实现常规的程序动态升级功能,而且保证了程序启动时间不受任何影响,可以达到自加载启动的速度完全仅由FPGA器件所决定。本发明法在实际应用中,不会带来任何额外的硬件开销,使用灵活,扩展性强,便于综合化、小型化通信系统中的多分机模块使用,适合需要快速展开工作的系统设备。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要的附图做简单的介绍:
图1是根据本发明的一个实施例的总体框架结构图;
图2是根据本发明的一个实施例的FPGA引导程序架构图;
图3是根据本发明的一个实施例的图1所示装置的操作流程示意图;
图4是根据本发明的一个实施例的方法流程图;
图5是根据本发明的一个实施例的FPGA引导程序升级用户程序的算法流程图;以及
图6是根据本发明的一个实施例的FPGA引导程序自加载用户程序的算法流程图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
本发明结合静态和动态升级方法的优点,提出了一种可以通过FPGA完成动态升级及自加载程序的装置及方法,不但可以实现程序动态升级还可以提高加载速度。系统硬件结构简单、使用灵活,适合于综合系统中需要实现动态升级及快速启动的分机设备。
如图1所示为根据本发明的一个实施例的系统总体框架图,以下参考图1来对本发明进行详细说明。
该用于实现FPGA程序动态升级的装置包括闪存FLASH,其设置于FPGA外部。FLASH是存储芯片的一种,通过特定的程序可以修改里面的数据,不仅具备电子可擦除可编程的性能,还可以快速读取数,使数据不会因为断电而丢失。其中,在FLASH内部设置有可自动加载到FGPA中运行的引导程序,在监测到FPGA程序升级指令时,引导程序自动接收用户升级程序数据,完成FLASH程序烧写并把升级成功的用户程序自动加载入FPGA中运行。
如图1所示,该装置仅由待升级的FPGA和FLASH组成,FPGA的IO口线和FLASH数据关键直接相连,中间没有任何辅助器件,不会带来任何额外的硬件开销,便于综合化、小型化通信系统中的多分机模块使用。FPAG可以采用Xilinx或Altera厂家生产的芯片。
通过引导程序将用户程序写入FLASH中,FPGA从FLASH中加载用户程序,使得FPGA程序加载速度快,并且不需使用连线较多的JTAG接口,方便FPGA后期程序动态维护和升级。
在本发明的一个实施例中,该引导程序包括串口监测子程序、程序烧写子程序、复位子程序和跳转子程序四个子程序,如图2所示。其中,串口监测子程序用于监测FPGA通信串口,以实现FPGA与外部设备的数据交互;程序烧写子程序用于将通过通信串口接收到的用户程序烧写入FLASH;复位子程序用于在FLASH烧写完成后使FPGA自动复位;跳转子程序用于在FPGA自动复位后自动加载FLASH中的用户程序。通过以上引导程序的四个子程序可以实现FPGA程序动态升级。
在本发明的一个实施例中,FLASH与FPGA通过SPI通信接口连接。FLASH具有标准SPI接口,FPGA和FLASH之间通过标准的四线SPI接口相连。在FPGA和FLASH芯片上都有专门的四线定义,一对一连接起来形成标准SPI接口,按此种方式连接FPGA和FLASH芯片,FPGA程序在复位FPGA后自动完成程序加载,加载速度是最快的。如图1所示,FPGA和FLASH之间通过标准的四线SPI接口相连,SPI的4线串口分别是CSB(片选)、SCK(时钟)、S01(数据输入)和S02(数据输出)。
在本发明的一个实施例中,引导程序存储在FLASH中零开始的空间,用户程序通过引导程序升级到FLASH任意地址空间。该引导程序使用硬件编程语言完成,在产品开发阶段通过JTAG口烧写到FLASH零地址开始的空间去,用户程序可在产品交付后通过引导程序升级到FLASH任意地址。由于引导程序是在零地址开始的空间,而用户程序在FLASH其它空间,所以在升级过程中,出现任何意外情况,比如擦写FLASH出现异常断电,都不会对引导程序有任何破坏,此时只需要重新复位FPGA还可以继续升级或引导用户程序。
如图1所示,JTAG口由FPGA的四个管脚引出,包含TDO(数据输出),TDI(数据输入),TMS(模式选择),TCK(时钟),通过这四个信号可以在底层完成对FPGA的仿真、调试和烧写,这是开发FPGA必配的接口。另外,FPGA通过RS232异步升级串口接收升级数据,该串口由FPGA上的两个普通IO脚引出RX(接收数据)和TX(发送数据),可以实现和PC机间的数据收发,底层串口程序需要通过编程FPGA实现。
在本发明的一个实施例中,待程序升级的FPGA的一输出端口与自身复位端口连接,以使得FLASH烧写完成后通过输出端口向自身复位端口发出自复位信号。具体的,如图1所示,FPGA的一个普通IO脚和FPGA自身的复位管脚PROGRAM_B相连,带升级成功后,普通IO脚输出一个低脉冲,导致FPGA复位,从而完成自加载,其效果等同于上电复位。
本发明与传统的利用DSP等处理器配合升级方式相比,由于没有任何一个多余器件,利用该方法不但可以实现常规的程序动态升级功能,而且保证了程序启动时间不受任何影响,可以达到自加载启动的速度完全仅由FPGA器件所决定。该方法在实际应用中,不会带来任何额外的硬件开销,便于综合化、小型化通信系统中的多分机模块使用,优异的加载速度更是适合需要快速展开工作的系统设备,使用灵活,扩展性强。
如图3所示为采用图1所示装置的操作流程示意图。当需要动态升级程序时,首先在PC机上打开升级软件,通过RS232异步串口发送升级命令,此命令是按周期发送的,以便下位机FPGA能准时侦测到此命令。然后重新上电FPGA,此时FPGA就可以及时捕获到升级命令。当FPGA收到此命令后,会回传约定联机命令给PC机,PC机软件会显示正确的联机提示。接着,可以在PC机上选择需要升级的用户程序,并发送给FPGA。FPGA启动烧写过程,包括擦除、校验等步骤,如果成功会及时发送相应命令给PC机,最后进行自复位,把FPGA程序加载到FPGA自身内存中去,FPGA就处于正常工作状态。
根据本发明的另一个方面,还提供了一种用于实现FPGA程序动态升级及自加载的方法,如图4所示为根据本发明的一个实施例的方法流程图,如图5所示为对应图4的一个算法实现流程图,以下参考图4和图5来对本方法进行详细说明。
首先,存储于FLASH中的引导程序自动加载到FGPA中并启动,以侦测是否有升级指令。当FPGA需要升级程序时,首先通过外部触发或重新加电来复位FPGA,存储于FLASH中的引导程序会自动加载到FPGA中运行并开启,此时运行在FPGA内部的是引导程序,它会侦测升级命令,如果PC机串口软件向FPGA发送了升级指令,那么它会自动接收PC机发来升级数据
接下来,如侦测到有升级指令,FPGA通过引导程序接收升级指令,并根据升级指令在FLASH中擦除及烧写用户程序。具体的,如果有升级指令,那么向PC机发出联机指令,接收PC机的控制。PC机会发出擦除FLASH某地址开始空间的指令,引导程序会执行擦除操作,并把结果报给PC机,正确无误后,PC机会发送用户程序数据。引导程序接收用户程序数据,并进行烧写。
如果在预定时间内,引导程序没有侦测到升级命令,那么会启动跳转指令直接进入已存储的用户程序,如图6所示。
通常情况下,为保证程序烧写成功,在FLASH中烧写用户程序之后还包括校验步骤。通常采用CRC回对校验,如果CRC不成功,需要进行多次重复烧写。
最后,在FLASH烧写完成用户程序后,引导程序将升级成功的用户程序自动加载入FPGA中运行。通常,如果FLASH烧写成功则向PC机发送成功命令,同时启动自复位命令,完成自复位操作,从而把写入到FLASH中的用户程序调入到FPGA内存中运行。此外,用户程序升级过程中,PC机和引导程序之间需要进行多次的通信数据交互,此过程有通信异常处理机制,如果出现通信问题,则由专门故障提示模块进行处理。
虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。