一种内置crc校验码的fpga配置文件生成方法
【专利摘要】本发明提供一种内置CRC校验码的FPGA配置文件生成方法,该方法包括如下步骤:以EDA工具生成的FPGA配置文件为基础,按照特征值读取配置文件中所包含的FPGA配置信息,并按帧计算其对应的CRC校验码;在配置文件中搜索空白区域;将计算得到的配置帧CRC校验码写入搜索得到的空白区即可完成内置CRC校验码的FPGA配置文件生成,本发明能充分利用原始FPGA配置文件中的空闲资源,在不带来额外软硬件开销的基础下实现FPGA校验信息和配置信息的同时同地存储,并且计算过程不依赖于特定的FPGA芯片物理结构,便于硬件资源有限的平台实现FPGA配置信息回读校验达成系统容错目的,具有广泛的应用前景。
【专利说明】—种内置CRC校验码的FPGA配置文件生成方法
【技术领域】
[0001]本发明涉及一种内置CRC校验码的FPGA配置文件生成方法,属于FPGA电路的可靠性设计【技术领域】。
【背景技术】
[0002]一直以来SRAM型FPGA由于其内部配置寄存器易受单粒子效应影响而产生错误的原因,在应用于宇航等对可靠性有较高要求的场合时必须通过配置文件回读的方式进行检错。常见的配置文件检错方法有两种。一种是全文逐比特比较,二是利用FPGA内部固有的配置检错资源对配置信息进行校验。全文比较方法虽然简单,但需要大量外部存储空间用于存放配置文件和对应的掩码文件,不适合于宇航任务等软硬件资源受限的环境。由于不是所有型号的FPGA都配备了内部检错资源,且该资源的结构和功能实现方式未公开,方法二的可靠性、安全性很难验证,普适性不佳。
[0003]由于SRAM型FPGA固有的可靠性弱点,我国空间飞行器控制计算机中均未使用过SRAM型FPGA,缺乏对SRAM型FPGA配置文件在轨检错技术的应用,这大大制约了我国空间飞行器控制计算机技术的发展。
【发明内容】
[0004]本发明的技术解决问题是:克服现有技术的缺点,提供一种内置CRC校验码的FPGA配置文件生成方法,该方法在SRAM型FPGA配置文件的空白区填充预先计算的配置帧CRC校验码的方式,从而在不增加额外硬件开销的前提下实现了 FPGA配置文件校验信息的生成与存储,提高了使用SRAM型FPGA系统的可靠性,该方法实现简单、适用范围广、可靠性闻。
[0005]本发明的上述目的通过如下技术方案予以实现:
[0006]一种内置CRC校验码的FPGA配置文件生成方法,所述FPGA的配置信息按帧方式存储于配置文件中,包括如下步骤:
[0007](I)、遍历原始FPGA配置文件查找特征值,并依据所述特征值对应的数据类型对文件数据进行操作处理,其中:
[0008]如果查找到的特征值为所述原始FPGA配置文件中的配置信息起始字符串,则判断所述特征值后存储的信息为FPGA有效配置信息,即判定所述配置文件为合法的FPGA配置文件,读取的FPGA配置信息帧并进行CRC校验码计算;
[0009]如果查找到特征值为配置帧分隔符,则判定已完成I帧FPGA配置信息的读取,停止CRC校验码计算,并将所述FPGA配置信息帧的CRC校验码保存在临时文件中;
[0010]如果查找到特征值为无效数据时,则判定所述FPGA配置文件中在所述特征值处为空闲区域,并对所述空闲区域进行标记;
[0011](2)当标记得到满足CRC校验码填充要求的连续空闲区域时,则将所述临时文件中的CRC校验码填充在所述空闲区域内,得到内嵌CRC校验码的FPGA配置文件,并标记所述CRC校验码在所述FPGA配置文件中的存放位置。
[0012]上述的内置CRC校验码的FPGA配置文件的生成方法,在步骤(2)中,标记得到满足CRC校验码填充要求的连续空闲区域,具体实现方法如下:
[0013](2a)、采用反向读取方式对FPGA配置文件进行读取,如果读取到的特征值为无效数据,则判断所述配置文件中在所述特征值处为空闲区域,则将空闲区域统计数加1,如果读取到的特征值不是无效数据,则将空闲区域统计数置0,其中,所述空闲区域统计数的初值为O;
[0014](2b)、按照步骤(2a)的空闲区域统计数计数方法进行计数,当所述空闲区域统计数等于设定的长度时,则记录参与所述空闲区域统计数累加的空闲区域地址。
[0015]上述的内置CRC校验码的FPGA配置文件的生成方法,在步骤(2)中标记所述CRC校验码在所述FPGA配置文件中的存放位置,采用如下的方法实现:将所述CRC校验码的存放位置的地址保存在文件中,在FPGA配置文件读取时利用所述文件中保存的地址进行CRC检验码读取。
[0016]上述的内置CRC校验码的FPGA配置文件的生成方法,在步骤(2)中标记所述CRC校验码在配置文件中的存放位置,采用如下的方法实现:在所述CRC校验码的存放位置的起始地址先填写弓I导码再填写CRC校验码,在所述FPGA配置文件读取时根据所述弓I导码识别并提取CRC检验码。
[0017]上述的内置CRC校验码的FPGA配置文件的生成方法,在步骤(I)中,采用正向读取的方法查找代表配置信息起始字符串的特征值。
[0018]本发明与现有技术相比有益效果为:
[0019](I)、本发明采用离线计算配置帧CRC校验信息的方式,用户可以灵活选择需要参与计算的配置帧数量和具体算法,有效避免了全文逐比特比对方法的盲目性;
[0020](2)、本发明将校验信息直接嵌入原始配置文件,实现了校验信息和配置信息的融合,达到了了在仅有配置信息存储空间的前提下同时实现配置与校验信息同时同地存储的目的;
[0021](3)、本发明采用外置CRC校验码的形式,绕过了 FPGA内部检错资源,实现了 FPGA配置信息校验的器件无关性,使得内部不具备检错资源的FPGA也能实现对配置文件的检错。
[0022](4)、本发明可以在向配置文件中填充校验信息之前,预先写入校验信息引导码,使得在串行存储器环境下软件可以通过对引导码进行匹配的方式而不是对访存次数进行计数的方式快速找到校验信息存储位置,减少软件开发难度,节省软件资源。
【专利附图】
【附图说明】
[0023]图1为本发明内置CRC校验码的FPGA配置文件生成方法总体流程图。
[0024]图2为本发明中FPGA配置信息帧的CRC校验码计算流程图。
[0025]图3为本发明中在FPGA配置文件中标记得到连续空闲区域的处理流程图。
【具体实施方式】
[0026]本发明通过对EDA工具生成的FPGA配置文件进行处理。首先,本发明观察到由EDA工具生成的FPGA配置文件中实际包含了大量与用户逻辑无关的无效数据,可以提供大量文件空间用于存储额外的信息。本发明充分利用原始配置文件中无用的数据,并结合成熟的检错算法,实现了在不增加任何存储空间开销和对FPGA所要实现的用户逻辑无影响的情况下,将FPGA配置文件和配置校验文件同时同地存放的功能,有助于提高FPGA的工作可靠性。其次,本发明提出了一种通过配置文件特征值来确认文件内容的方法,可以拥有比传统的字节计数方法更加优异的灵活性、简便性并能有效提高文件内容检索效率。再次,本发明观察到实际FPGA配置文件中,无效数据区多出现在配置文件末尾部分。因此提出了一种“逆序搜索统计”方法用于查找FPGA配置文件中的空白区域。与正向搜索方法相比可以有效缩短空白区查找时间,提高运算速度和效率。最后,本发明观察到对FPGA配置文件中无效数据的更改并不会影响FPGA的配置过程和改变FPGA所要实现的用户逻辑,因而可以使用计算得到的FPGA配置帧CRC校验码覆盖这些无用数据,而不需额外的存储空间。
[0027]本发明提供了一种内置CRC校验码的FPGA配置文件生成方法,这种方法适用于FPGA配置信息按帧方式存储的文件,如图1所示的本发明方法的处理流程图,该方法的具体包括如下步骤:
[0028](I)、遍历原始FPGA配置文件查找特征值,并依据所述特征值对应的数据类型对文件数据进行操作处理,其中,所述特征值为FPGA配置文件中用于标示文件中存放数据的类型的字符或字符串,数据存放在对应的特征值之后;本发明的通过对特征值进行识别对不同类型的数据进行相应的操作,具体的识别和处理方法如下:
[0029]如图2所示,如果在正向遍历过程中查找到的特征值为所述原始FPGA配置文件中的配置信息起始字符串,则判断所述特征值后存储的信息为FPGA有效配置信息,即判定所述配置文件为合法的FPGA配置文件,读取的FPGA配置信息帧并进行CRC校验码计算;其中,FPGA有效配置信息为FPGA对应于实现用户逻辑功能的配置文件内容;
[0030]如果在正向遍历过程中查找到特征值为配置帧分隔符,则判断已完成I帧FPGA配置信息的读取,则停止CRC校验码计算,并将所述FPGA配置信息帧的CRC校验码保存在临时文件中;
[0031]如果在反向遍历过程中查找到特征值为无效数据时,则判断所述FPGA配置文件中在所述特征值处为空闲区域,并对所述空闲区域进行标记;该空闲区域可用于填充CRC校验码,以达到节省存储空间的目的;
[0032](2)当标记得到满足CRC校验码填充要求的连续空闲区域时,则将所述临时文件中的CRC校验码填充在所述空闲区域内,得到内嵌CRC校验码的FPGA配置文件,并标记所述CRC校验码在配置文件中的存放位置,这种方法可以确保在实现数据填充的同时又不影响FPGA的正常配置信息。
[0033]其中,在该步骤中标记CRC校验码在配置文件中的存放位置存在两种处理方法,其中:
[0034]标记方法1:将所述CRC校验码在FPGA配置文件中的存放位置的地址保存在文件中,在FPGA配置文件读取时利用所述文件中保存的地址进行CRC检验码读取;
[0035]标记方法2:在所述CRC校验码的存放位置的起始地址先填写引导码再填写CRC校验码,在所述FPGA配置文件读取时通过识别所述引导码提取CRC检验码。
[0036]本发明采用“逆序搜索统计”方法查找原始FPGA配置文件中的连续空白区域,用来存放CRC校验码,如图3所示的处理流程图,该方法的具体实现步骤如下:
[0037](2a)、采用反向读取方式对FPGA配置文件进行读取,如果读取到的特征值为无效数据,则判断所述配置文件中在所述特征值处为空闲区域,则将空闲区域统计数加1,如果读取到的特征值不是无效数据,则将空闲区域统计数置0,其中,所述空闲区域统计数的初值为O;
[0038](2b)、按照步骤(2a)的空闲区域统计数计数方法进行计数,当所述空闲区域统计数等于设定的长度时,则记录参与所述空闲区域统计数累加的空闲区域地址;其中,如果采用标记方法I标记CRC校验码在FPGA配置文件中存放位置,则该步骤中的设定长度等于临时文件中CRC校验码的长度之和;如果采用标记方法2标记CRC校验码在FPGA配置文件中的存放位置,则该步骤中的设定长度等于引导码长度加上临时文件中CRC校验码长度之和。
[0039]实施例:
[0040]本实施例中,FPGA配置文件生成方法具体步骤如下:
[0041 ] 步骤1:使用EDA工具生成FPGA原始配置文件;
[0042]步骤2:读取FPGA原始配置文件;
[0043]步骤3:在FPGA原始配置文件中正向搜索配置信息起始字符串并记录该字符串在配置文件中的偏移地址As ;
[0044]步骤4:所记录的偏移地址As开始,连续读取配置文件中的数据并计算其CRC校验码,同时更新偏移地址As为当前在FPGA原始配置文件中读取的地址;
[0045]步骤5:在检测到帧分隔符后停止计算CRC校验码并将已算出的校验码存入临时文件;
[0046]步骤6:若软件检测到无效数据则停止计算CRC校验码并将已算出的校验码存入临时文件并记录该临时文件中字符串的总长度1。,否则转步骤4 ;
[0047]步骤7:软件由文件尾部开始逆向搜索原始FPGA配置文件,并建立空白区统计计数器,该计数器默认值为0,该计数器的值记为Nb ;
[0048]步骤8:若软件检测到I字节无效数据(例如全O)则将空白区统计计数器的值增加1,然后继续逆向搜索原始FPGA配置文件;
[0049]步骤9:若软件检测到I字节有效数据(例如非O)则将空白区统计计数器的值清0,然后转步骤8 ;
[0050]步骤10:软件将空白区统计计数器的值和CRC临时文件的长度I。进行比对,若Nb彡Ic则记录当前状态下无效数据在原始FPGA配置文件中的地址Ab。
[0051]步骤11:由地址Ab开始,将CRC临时文件中的数据按照字节方式写入原始FPGA配置文件。
[0052]其中步骤7-10与步骤3-6为同时进行。对于步骤11中所进行的操作,由于采用的方法是对原始配置文件中无用数据进行更改,因此不会增加原始文件的长度和所占存储空间的大小,且不会破坏原始配置文件中所携带的FPGA配置信息和与FPGA器件之间的对应关系,故而不会不影响该配置下载到FPGA的过程和下载后FPGA的具体功能。
[0053]通过以上描述可以看出,本发明通过利用FPGA配置文件中无用的数据,在不增加任何存储空间开销和对FPGA所要实现的用户逻辑无影响的情况下,将FPGA配置文件和配置校验文件同时同地存放的功能,能够省去需要进行FPGA配置文件回读校验的系统中用于存放掩码文件的存储器,在提供同样设计可靠性的前提下,节省了大量硬件资源,提高了电路可靠性,简化了电路设计,降低了整机功耗和体积。本发明具有以下有益的效果:
[0054]首先,所述方案充分利用FPGA原始配置文件中的无效数字资源实现信息存储,在达到存储校验信息目的的同时,不会带来额外的存储空间开销。
[0055]同时,本发明所述方法只需要对FPGA原始配置文件进行I次遍历即可同时完成配置帧CRC校验码计算和空白区查找,其时间复杂度为O (V),其中V为配置帧和空白区搜索次数中的最大值,且V不会超过原始配置文件的总长度。即该方法计算耗时与用户逻辑的复杂度和所选FPGA器件的规模正相关。相对于已有方法,本发明所述方法只需要刚好满足存储要求的空白空间即可完成存储,存储空间利用率高。
[0056]另外,本发明在进行FPGA配置帧读取和空白区搜索的过程中所使用的方法能够实现在满足特定特征码条件的情况下(例如不再读取到帧分隔符)实现自动停止或退出。与需要遍历完整个FPGA配置文件的方法相比,本专利所提出的方法,完成相同目标所需的时间更短,效率更高。
[0057]最后,本发明所使用的区域为FPGA配置文件中的空白区,对其数据的更改对FPGA所要实现的用户逻辑和配置文件到FPGA的下载过程没有影响,对电路时序也没有改变,因而不会带来额外的性能开销。
[0058]以上所述,仅为本发明最佳的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
[0059]本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。
【权利要求】
1.一种内置CRC校验码的FPGA配置文件生成方法,所述FPGA的配置信息按帧方式存储于配置文件中,其特征在于包括如下步骤: (1)、遍历原始FPGA配置文件查找特征值,并依据所述特征值对应的数据类型对文件数据进行操作处理,其中: 如果查找到的特征值为所述原始FPGA配置文件中的配置信息起始字符串,则判断所述特征值后存储的信息为FPGA有效配置信息,即判定所述配置文件为合法的FPGA配置文件,读取FPGA配置信息帧并进行CRC校验码计算; 如果查找到特征值为配置帧分隔符,则判定已完成I帧FPGA配置信息的读取,停止CRC校验码计算,并将所述FPGA配置信息帧的CRC校验码保存在临时文件中; 如果查找到特征值为无效数据时,则判定所述FPGA配置文件中在所述特征值处为空闲区域,并对所述空闲区域进行标记; (2)当标记得到满足CRC校验码填充要求的连续空闲区域时,则将所述临时文件中的CRC校验码填充在所述空闲区域内,得到内嵌CRC校验码的FPGA配置文件,并标记所述CRC校验码在所述FPGA配置文件中的存放位置。
2.根据权利要求1所述的一种内置CRC校验码的FPGA配置文件的生成方法,其特征在于:在步骤(2)中,标记得到满足CRC校验码填充要求的连续空闲区域,具体实现方法如下: (2a)、采用反向读取方式对FPGA配置文件进行读取,如果读取到的特征值为无效数据,则判断所述配置文件中在所述特征值处为空闲区域,则将空闲区域统计数加1,如果读取到的特征值不是无效数据,则将空闲区域统计数置O,其中,所述空闲区域统计数的初值为O ; (2b)、按照步骤(2a)的空闲区域统计数计数方法进行计数,当所述空闲区域统计数等于设定的长度时,则记录参与所述空闲区域统计数累加的空闲区域地址。
3.根据权利要求1所述的一种内置CRC校验码的FPGA配置文件的生成方法,其特征在于:在步骤(2)中标记所述CRC校验码在所述FPGA配置文件中的存放位置,采用如下的方法实现:将所述CRC校验码的存放位置的地址保存在文件中,在FPGA配置文件读取时利用所述文件中保存的地址进行CRC检验码读取。
4.根据权利要求1所述的一种内置CRC校验码的FPGA配置文件的生成方法,其特征在于:在步骤(2)中标记所述CRC校验码在配置文件中的存放位置,采用如下的方法实现:在所述CRC校验码的存放位置的起始地址先填写引导码再填写CRC校验码,在所述FPGA配置文件读取时根据所述引导码识别并提取CRC检验码。
5.根据权利要求1所述的一种内置CRC校验码的FPGA配置文件的生成方法,其特征在于:在步骤(I)中,采用正向读取的方法查找代表配置信息起始字符串的特征值。
【文档编号】G06F11/10GK104461764SQ201410782611
【公开日】2015年3月25日 申请日期:2014年12月16日 优先权日:2014年12月16日
【发明者】董暘暘, 施蕾, 杨孟飞, 胡洪凯, 叶有时, 赵云富, 冯丹, 刘波, 程照强, 张绍林, 刘鸿瑾, 张洪华 申请人:北京控制工程研究所