嵌入cpu的fpga及其启动方法

文档序号:6488179阅读:258来源:国知局
嵌入cpu的fpga及其启动方法
【专利摘要】本发明公开了一种嵌入中央处理器CPU的可编程门阵列FPGA及其启动方法,该方法包括:嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标闪存FLASH中获取启动FPGA的硬件程序;调用获取的硬件程序加载所述目标FLASH中的启动应用程序的引导程序后,启动所述CPU;调用启动的所述CPU执行所述引导程序,确定所述目标FLASH中的代码区和备份区;其中,所述代码区存储升级后的应用程序,所述备份区存储的升级前的应用程序;以及加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序。该方案中即使启动升级的应用程序失败,仍可以启动升级前的应用程序,从而可以保证FPGA能够正常工作。
【专利说明】嵌入CPU的FPGA及其启动方法
【技术领域】
[0001]本发明涉及通信【技术领域】,尤指一种嵌入中央处理器CPU的可编程门阵列FPGA及其启动方法。
【背景技术】
[0002]目前在嵌入式的无线通信基础设施等应用领域,要求集成芯片成本更低、功耗更低、尺寸更小,这些要求正在推动着现场可编程门阵列(Field Programmable Gate Array,FPGA)、中央处理器(Center Process Unit, CPU)、数字信号处理器(Digital SignalProcessing, DSP)等不同技术进行融合。
[0003]其中,常用的是同时使用独立的FPGA和CPU,但是这种模式存在很多缺陷:印刷电路板(Printed Circuit Board, PCB)所占面积较大,布线难度较高;功耗较大,散热效果不佳;FPGA和CPU之间的信号传输问题影响总体性能的发挥;硬件系统的复杂性增加了开发成本等等。
[0004]随着可编程片上系统(System On a Programmable Chip, S0PC)的发展,将CPU嵌入到FPGA中来取代同时使用独立的FPGA与CPU的模式,嵌入CPU的FPGA能够解决上述同时使用独立的FPGA与CPU模式下的各种缺陷,已成为业内的热点研究课题。
[0005]嵌入CPU的FPGA的启动方法是:预先将用于启动FPGA的硬件程序和CPU执行的应用程序整合在一起并存储在外设的目标闪存(FLASH)中,FPGA上电后,将存储于目标FLASH中且整合在一起的硬件程序和应用程序加载到FPGA中,完成FPGA的启动。一旦FPGA需要升级,也就是FPGA中的应用程序需要升级时,需要将原有的硬件程序和升级后的应用程重新整合在一起,并存储在目标FLASH中,然后加载到FPGA中,重新整合后的硬件程序和应用程序替代原有的整合在一起的硬件程序和应用程序,而原有的整合在一起的硬件程序和应用程序会被删除。若FPGA加载重新整合在一起的硬件程序和升级后的应用程序失败,也就是说FPGA升级失败,由于FPGA不能成功加载重新整合在一起的硬件程序和升级的应用程序,而原有整合在一起的硬件程序和应用程序已被删除,那么FPGA就无法正常启动。可见,现有的嵌入CPU的FPGA的启动方法,一旦FPGA升级失败,就会导致FPGA不能正常启动。因此,现有的嵌入CPU的FPGA的启动方法不能确保FPGA能够正常启动。

【发明内容】

[0006]本发明实施例提供一种嵌入中央处理器CPU的可编程门阵列FPGA及其启动方法,用以解决现有的嵌入CPU的FPGA的启动方法中存在的不能确保FPGA能够正常启动的问题。
[0007]一种嵌入中央处理器CPU的可编程门阵列FPGA的启动方法,包括:
[0008]嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标FLASH中获取启动FPGA的硬件程序;
[0009]调用获取的硬件程序加载所述目标FLASH中的启动应用程序的弓I导程序后,启动所述CPU ;
[0010]调用启动的所述CPU执行所述引导程序,确定所述目标FLASH中的代码区和备份区;其中,所述代码区存储升级后的应用程序,所述备份区存储的升级前的应用程序;以及
[0011]加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序。
[0012]一种嵌入中央处理器CPU的可编程门阵列FPGA,包括:
[0013]硬件程序获取单元,用于自身所在的嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标闪存FLASH中获取启动FPGA的硬件程序;
[0014]CPU启动单元,用于调用获取的硬件程序加载所述目标FLASH中的启动应用程序的引导程序后,启动所述CPU;
[0015]应用程序启动单元,用于调用启动的所述CPU执行所述引导程序,确定所述目标FLASH中的代码区和备份区;其中,所述代码区存储升级后的应用程序,所述备份区存储的升级前的应用程序;以及加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序。
[0016]本发明有益效果如下:
[0017]本发明实施例提供的嵌入CPU的FPGA及其启动方法,通过嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标闪存FLASH中获取启动FPGA的硬件程序;调用获取的硬件程序加载所述目标FLASH中的启动应用程序的弓I导程序后,启动所述CPU ;调用启动的所述CPU执行所述引导程序,确定所述目标FLASH中的代码区和备份区;其中,所述代码区存储升级后的应用程序,所述备份区存储的升级前的应用程序;以及加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序。该方案首先获取启动FPGA的硬件程序,调用硬件程序加载引导程序后启动CPU,然后调用CPU执行引导程序,确定出目标FLASH中的代码区和备份区,加载并启动代码区中的应用程序,若启动失败次数超过设定次数,则加载并启动备份区中的应用程序,该方案中即使启动升级的应用程序失败,仍可以启动升级前的应用程序,从而可以保证FPGA能够正常工作。
【专利附图】

【附图说明】
[0018]图1为本发明实施例中嵌入CPU的FPGA的启动方法的流程图;
[0019]图2为本发明实施例中嵌入CPU的FPGA的结构示意图;
[0020]图3为本发明实施例中优选的嵌入CPU的FPGA的启动方法的流程图。
【具体实施方式】
[0021]针对现有的嵌入CPU的FPGA的启动方法中存在的不能确保FPGA能够正常启动的问题,本发明实施例提供的嵌入CPU的FPGA的启动方法,该方法的流程如图1所示,执行步骤如下:
[0022]SlO:嵌入CPU的FPGA上电后,从目标FLASH中获取启动FPGA的硬件程序。
[0023]目标FLASH中的硬件程序、引导程序和应用程序都是独立存储的,这样就可以独立加载,当应用程序需要升级时,只要将应用程序升级就可以了,而无需更新硬件程序和引导程序。[0024]硬件程序是用来加载硬件资源的,因此需要首先获取硬件程序。
[0025]Sll:调用获取的硬件程序加载目标FLASH中的启动应用程序的引导程序后,启动CPU。
[0026]获取硬件程序后,调用该硬件程序来加载引导程序,引导程序是应用程序启动前运行的一段小程序,为运行应用程序做准备。
[0027]S12:调用启动的CPU执行引导程序,确定目标FLASH中的代码区和备份区;其中,代码区存储升级后的应用程序,备份区存储升级前的应用程序。
[0028]在目标FLASH中设有代码区和备份区,代码区中存储的是升级后的应用程序,备份区中存储的是升级前的应用程序,升级前的应用程序是可以成功启动的,在调用启动的CPU执行引导程序时,首先需要确定其中的代码区和备份区。
[0029]S13:加载并启动代码区的应用程序,若启动失败次数大于设定次数,加载并启动备份区的应用程序。
[0030]在加载应用程序时,首先加载代码区的应用程序,因为代码区的应用程序是升级后的应用程序,当代码区的应用程序加载后不能成功启动时,且启动失败次数超过设定次数时,为了保证FPGA即使升级不成功仍然能够正常工作,就需要加载并启动备份区中的应用程序,因为备份区中的应用程序是升级前能够成功启动的,所以加载备份区中的应用程序一定能够保证FPGA能够正常工作。
[0031]其中设定次数可以根据实际需要进行设置,可以设置为1、2、3、4等等数值。
[0032]该方案首先获取启动FPGA的硬件程序,调用硬件程序加载引导程序后启动CPU,然后调用CPU执行引导程序,确定出目标FLASH中的代码区和备份区,加载并启动代码区中的应用程序,若启动失败次数超过设定次数,则加载并启动备份区中的应用程序,该方案中即使启动升级的应用程序失败,仍可以启动升级前的应用程序,从而可以保证FPGA能够正常工作。
[0033]具体的,上述Sll中的调用获取的硬件程序加载目标FLASH中的启动应用程序的引导程序,具体包括:调用获取的硬件程序产生应用程序空间和引导空间;以及将目标FLASH中的启动应用程序的弓丨导程序加载到引导空间中。
[0034]在加载引导程序时,可以首先调用硬件程序产生应用程序空间和引导空间,其中应用程序空间是为了存放应用程序的,引导空间是为了存放引导程序的。然后将目标FLASH中存储的引导程序加载到引导空间中就可以了。当然也可以采用其他方式。
[0035]具体的,上述S12中的确定目标FLASH中的代码区和备份区,具体包括:初始化目标FLASH的接口,通过初始化的接口读取目标FLASH中的代码区地址和备份区地址;根据代码区地址和备份区地址确定目标FLASH中的代码区和备份区。
[0036]具体的,上述S13中的加载并启动代码区的应用程序,若启动失败次数大于设定次数,加载并启动备份区的应用程序,具体包括:将代码区的应用程序加载到应用程序空间中并启动;若启动成功,将目标FLASH中的标识信息更新为启动成功标识;若启动失败,将标识信息增加设定值,确定增加设定值后的标识信息小于设定次数时,将代码区的应用程序重新加载到应用空间中并启动;确定增加设定值后的标识信息大于设定次数时,将备份区的应用程序加载到应用空间中并启动,将标识信息更新为启动成功标识。
[0037]可以在目标FLASH中设置标识信息,假设为bootstat,初始的时候bootstat可以设为O,在加载并启动代码区的应用程序时,若启动成功将bootstat更新为启动成功标识,假设启动成功标识为55AA ;若启动失败,可以将bootstat增加1,那么bootstat就变为1,如果设定次数为3,当bootstat变为4以后,就不再尝试加载代码区中的应用程序了,也就是说不再对FPGA进行升级,直接加载备份区中的应用程序即可。设立仅仅是以设定次数是3为例进行说明的,当然也可以是其他数值,判断过程都是一样的,这里就不再说明是其他数据的情况了。
[0038]基于同一发明构思,本发明实施例提供一种嵌入中央处理器CPU的可编程门阵列FPGA,结构如图2所示,包括:
[0039]硬件程序获取单元20,用于自身所在的嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标闪存FLASH中获取启动FPGA的硬件程序。
[0040]CPU启动单元21,用于调用获取的硬件程序加载目标FLASH中的启动应用程序的弓I导程序后,启动CPU。
[0041]应用程序启动单元22,用于调用启动的CPU执行引导程序,确定目标FLASH中的代码区和备份区;其中,代码区存储升级后的应用程序,备份区存储的升级前的应用程序;以及加载并启动代码区的应用程序,若启动失败次数大于设定次数,加载并启动备份区的应用程序。
[0042]具体的,上述CPU启动单元21,具体包括:调用获取的硬件程序产生应用程序空间和引导空间;以及将目标FLASH中的启动应用程序的引导程序加载到引导空间中。
[0043]具体的,上述应用程序启动单元22,具体用于:初始化目标FLASH的接口,通过初始化的接口读取目标FLASH中的代码区地址和备份区地址;根据代码区地址和备份区地址确定目标FLASH中的代码区和备份区。
[0044]具体的,上述应用程序启动单元22,具体用于:将代码区的应用程序加载到应用程序空间中并启动;若启动成功,将目标FLASH中的标识信息更新为启动成功标识;若启动失败,将标识信息增加设定值,确定增加设定值后的标识信息小于设定次数时,将代码区的应用程序重新加载到应用空间中并启动;确定增加设定值后的标识信息大于设定次数时,将备份区的应用程序加载到应用空间中并启动,将标识信息更新为启动成功标识。
[0045]下面以一个具体实施例说明上述嵌入CPU的FPGA的启动方法,如图3所示,具体执行步骤如下:
[0046]S30:嵌入CPU的FPGA上电后,从目标FLASH中获取硬件程序。
[0047]S31:调用获取的硬件程序产生应用程序空间和引导空间,将目标FLASH中的启动应用程序的弓I导程序加载到引导空间中。
[0048]其中应用程序空间可以表示为Appram,引导空间可以表示为BootiOm,引导程序可以表不为bootloader。
[0049]S32:启动 CPU。
[0050]S33:调用启动的CPU执行引导程序,初始化目标FLASH的接口。
[0051 ] 继续沿用上例,调用启动的CPU执行bootloader,也就是将寄存器指向bootrom基址,CPU就可以执行bootrom中的bootloader 了。
[0052]S34:通过初始化的接口读取目标FLASH中的代码区地址和备份区地址。
[0053]在目标FLASH中存储的是代码区地址和备份区地址,因此,需要首先通过初始化的接口读取代码区地址和备份区地址。
[0054]S35:根据代码区地址和备份区地址确定目标FLASH中的代码区和备份区。
[0055]根据代码区地址和备份区地址,就可以找到目标FLASH中的代码区和备份区了。
[0056]S36:将代码区的应用程序加载到应用程序空间中并启动,若启动成功,执行S37 ;否则,执行S38。
[0057]将代码区的应用程序加载到Appram中,然后启动。
[0058]S37:将目标FLASH中的标识信息更新为启动成功标识。
[0059]如果启动成功,可以将bootstat更新为55AA,下次启动的时候就可以直接加载代码区的应用程序了。
[0060]S38:将标识信息增加设定值,判断增加设定值后的标识信息是否小于设定次数,若是,执行S36 ;否则,执行S39。
[0061]S39:将备份区的应用程序加载到应用空间中并启动。
[0062]如果启动失败,可以将bootstat加I,这里可以假设bootstat的初始值为O,然后判断加I后的bootstat是否小于3。如果小于,就可以再次尝试加载代码区中的应用程序,也就是升级后的应用程序;如果大于,就不用再尝试了,直接加载备份区中的应用程序,因为备份区中的应用程序是升级前的,是一定可以加载成功的,这就保证了即使FPGA升级失败,仍可以使用升级前的应用程序正常工作。而在现有技术中,一旦FPGA升级失败,FPGA将不能正常工作。本发明中的方案可以确保FPGA升级失败后仍能正常启动。
[0063]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种嵌入中央处理器CPU的可编程门阵列FPGA的启动方法,其特征在于,包括: 嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标FLASH中获取启动FPGA的硬件程序; 调用获取的硬件程序加载所述目标FLASH中的启动应用程序的引导程序后,启动所述CPU ; 调用启动的所述CPU执行所述引导程序,确定所述目标FLASH中的代码区和备份区;其中,所述代码区存储升级后的应用程序,所述备份区存储升级前的应用程序;以及 加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序。
2.如权利要求1所述的方法,其特征在于,调用获取的硬件程序加载所述目标FLASH中的启动应用程序的引导程序,具体包括: 调用获取的硬件程序产生应用程序空间和引导空间;以及 将所述目标FLASH中的启动应用程序的引导程序加载到所述弓丨导空间中。
3.如权利要求1所述的方法,其特征在于,确定所述目标FLASH中的代码区和备份区,具体包括: 初始化所述目标FLASH的接口,通过初始化的接口读取所述目标FLASH中的代码区地址和备份区地址; 根据所述代码区地址和所述备份区地址确定所述目标FLASH中的代码区和备份区。
4.如权利要求2所述的方法,其特征在于,加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序,具体包括: 将所述代码区的应用程序加载到所述应用程序空间中并启动; 若启动成功,将所述目标FLASH中的标识信息更新为启动成功标识; 若启动失败,将所述标识信息增加设定值,确定增加设定值后的所述标识信息小于所述设定次数时,将所述代码区的应用程序重新加载到所述应用空间中并启动;确定增加设定值后的所述标识信息大于设定次数时,将所述备份区的应用程序加载到所述应用空间中并启动,将所述标识信息更新为所述启动成功标识。
5.一种嵌入中央处理器CPU的可编程门阵列FPGA,其特征在于,包括: 硬件程序获取单元,用于自身所在的嵌入中央处理器CPU的可编程门阵列FPGA上电后,从目标闪存FLASH中获取启动FPGA的硬件程序; (PU启动单元,用于调用获取的硬件程序加载所述目标FLASH中的启动应用程序的引导程序后,启动所述CPU ; 应用程序启动单元,用于调用启动的所述CPU执行所述引导程序,确定所述目标FLASH中的代码区和备份区;其中,所述代码区存储升级后的应用程序,所述备份区存储的升级前的应用程序;以及加载并启动所述代码区的应用程序,若启动失败次数大于设定次数,加载并启动所述备份区的应用程序。
6.如权利要求5所述的FPGA,其特征在于,所述CPU启动单元,具体包括: 调用获取的硬件程序产生应用程序空间和引导空间;以及 将所述目标FLASH中的启动应用程序的引导程序加载到所述弓丨导空间中。
7.如权利要求5所述的FPGA,其特征在于,所述应用程序启动单元,具体用于:初始化所述目标FLASH的接口,通过初始化的接口读取所述目标FLASH中的代码区地址和备份区地址; 根据所述代码区地址和所述备份区地址确定所述目标FLASH中的代码区和备份区。
8.如权利要求6所述的FPGA,其特征在于,所述应用程序启动单元,具体用于: 将所述代码区的应用程序加载到所述应用程序空间中并启动; 若启动成功,将所述目标FLASH中的标识信息更新为启动成功标识; 若启动失败,将所述标识信息增加设定值,确定增加设定值后的所述标识信息小于所述设定次数时,将所述代码区的应用程序重新加载到所述应用空间中并启动;确定增加设定值后的所述标识信息大于设定次数时,将所述备份区的应用程序加载到所述应用空间中并启动,将所述标识信息更新为所述启动成功标识。
【文档编号】G06F9/445GK103631674SQ201210307016
【公开日】2014年3月12日 申请日期:2012年8月24日 优先权日:2012年8月24日
【发明者】吴栩龙, 左延麟 申请人:京信通信系统(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1