一種內(nèi)置crc校驗碼的fpga配置文件生成方法
【專利摘要】本發(fā)明提供一種內(nèi)置CRC校驗碼的FPGA配置文件生成方法,該方法包括如下步驟:以EDA工具生成的FPGA配置文件為基礎,按照特征值讀取配置文件中所包含的FPGA配置信息,并按幀計算其對應的CRC校驗碼;在配置文件中搜索空白區(qū)域;將計算得到的配置幀CRC校驗碼寫入搜索得到的空白區(qū)即可完成內(nèi)置CRC校驗碼的FPGA配置文件生成,本發(fā)明能充分利用原始FPGA配置文件中的空閑資源,在不帶來額外軟硬件開銷的基礎下實現(xiàn)FPGA校驗信息和配置信息的同時同地存儲,并且計算過程不依賴于特定的FPGA芯片物理結(jié)構(gòu),便于硬件資源有限的平臺實現(xiàn)FPGA配置信息回讀校驗達成系統(tǒng)容錯目的,具有廣泛的應用前景。
【專利說明】—種內(nèi)置CRC校驗碼的FPGA配置文件生成方法
【技術(shù)領域】
[0001]本發(fā)明涉及一種內(nèi)置CRC校驗碼的FPGA配置文件生成方法,屬于FPGA電路的可靠性設計【技術(shù)領域】。
【背景技術(shù)】
[0002]一直以來SRAM型FPGA由于其內(nèi)部配置寄存器易受單粒子效應影響而產(chǎn)生錯誤的原因,在應用于宇航等對可靠性有較高要求的場合時必須通過配置文件回讀的方式進行檢錯。常見的配置文件檢錯方法有兩種。一種是全文逐比特比較,二是利用FPGA內(nèi)部固有的配置檢錯資源對配置信息進行校驗。全文比較方法雖然簡單,但需要大量外部存儲空間用于存放配置文件和對應的掩碼文件,不適合于宇航任務等軟硬件資源受限的環(huán)境。由于不是所有型號的FPGA都配備了內(nèi)部檢錯資源,且該資源的結(jié)構(gòu)和功能實現(xiàn)方式未公開,方法二的可靠性、安全性很難驗證,普適性不佳。
[0003]由于SRAM型FPGA固有的可靠性弱點,我國空間飛行器控制計算機中均未使用過SRAM型FPGA,缺乏對SRAM型FPGA配置文件在軌檢錯技術(shù)的應用,這大大制約了我國空間飛行器控制計算機技術(shù)的發(fā)展。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的技術(shù)解決問題是:克服現(xiàn)有技術(shù)的缺點,提供一種內(nèi)置CRC校驗碼的FPGA配置文件生成方法,該方法在SRAM型FPGA配置文件的空白區(qū)填充預先計算的配置幀CRC校驗碼的方式,從而在不增加額外硬件開銷的前提下實現(xiàn)了 FPGA配置文件校驗信息的生成與存儲,提高了使用SRAM型FPGA系統(tǒng)的可靠性,該方法實現(xiàn)簡單、適用范圍廣、可靠性聞。
[0005]本發(fā)明的上述目的通過如下技術(shù)方案予以實現(xiàn):
[0006]一種內(nèi)置CRC校驗碼的FPGA配置文件生成方法,所述FPGA的配置信息按幀方式存儲于配置文件中,包括如下步驟:
[0007](I)、遍歷原始FPGA配置文件查找特征值,并依據(jù)所述特征值對應的數(shù)據(jù)類型對文件數(shù)據(jù)進行操作處理,其中:
[0008]如果查找到的特征值為所述原始FPGA配置文件中的配置信息起始字符串,則判斷所述特征值后存儲的信息為FPGA有效配置信息,即判定所述配置文件為合法的FPGA配置文件,讀取的FPGA配置信息幀并進行CRC校驗碼計算;
[0009]如果查找到特征值為配置幀分隔符,則判定已完成I幀F(xiàn)PGA配置信息的讀取,停止CRC校驗碼計算,并將所述FPGA配置信息幀的CRC校驗碼保存在臨時文件中;
[0010]如果查找到特征值為無效數(shù)據(jù)時,則判定所述FPGA配置文件中在所述特征值處為空閑區(qū)域,并對所述空閑區(qū)域進行標記;
[0011](2)當標記得到滿足CRC校驗碼填充要求的連續(xù)空閑區(qū)域時,則將所述臨時文件中的CRC校驗碼填充在所述空閑區(qū)域內(nèi),得到內(nèi)嵌CRC校驗碼的FPGA配置文件,并標記所述CRC校驗碼在所述FPGA配置文件中的存放位置。
[0012]上述的內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,在步驟(2)中,標記得到滿足CRC校驗碼填充要求的連續(xù)空閑區(qū)域,具體實現(xiàn)方法如下:
[0013](2a)、采用反向讀取方式對FPGA配置文件進行讀取,如果讀取到的特征值為無效數(shù)據(jù),則判斷所述配置文件中在所述特征值處為空閑區(qū)域,則將空閑區(qū)域統(tǒng)計數(shù)加1,如果讀取到的特征值不是無效數(shù)據(jù),則將空閑區(qū)域統(tǒng)計數(shù)置0,其中,所述空閑區(qū)域統(tǒng)計數(shù)的初值為O;
[0014](2b)、按照步驟(2a)的空閑區(qū)域統(tǒng)計數(shù)計數(shù)方法進行計數(shù),當所述空閑區(qū)域統(tǒng)計數(shù)等于設定的長度時,則記錄參與所述空閑區(qū)域統(tǒng)計數(shù)累加的空閑區(qū)域地址。
[0015]上述的內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,在步驟(2)中標記所述CRC校驗碼在所述FPGA配置文件中的存放位置,采用如下的方法實現(xiàn):將所述CRC校驗碼的存放位置的地址保存在文件中,在FPGA配置文件讀取時利用所述文件中保存的地址進行CRC檢驗碼讀取。
[0016]上述的內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,在步驟(2)中標記所述CRC校驗碼在配置文件中的存放位置,采用如下的方法實現(xiàn):在所述CRC校驗碼的存放位置的起始地址先填寫弓I導碼再填寫CRC校驗碼,在所述FPGA配置文件讀取時根據(jù)所述弓I導碼識別并提取CRC檢驗碼。
[0017]上述的內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,在步驟(I)中,采用正向讀取的方法查找代表配置信息起始字符串的特征值。
[0018]本發(fā)明與現(xiàn)有技術(shù)相比有益效果為:
[0019](I)、本發(fā)明采用離線計算配置幀CRC校驗信息的方式,用戶可以靈活選擇需要參與計算的配置幀數(shù)量和具體算法,有效避免了全文逐比特比對方法的盲目性;
[0020](2)、本發(fā)明將校驗信息直接嵌入原始配置文件,實現(xiàn)了校驗信息和配置信息的融合,達到了了在僅有配置信息存儲空間的前提下同時實現(xiàn)配置與校驗信息同時同地存儲的目的;
[0021](3)、本發(fā)明采用外置CRC校驗碼的形式,繞過了 FPGA內(nèi)部檢錯資源,實現(xiàn)了 FPGA配置信息校驗的器件無關性,使得內(nèi)部不具備檢錯資源的FPGA也能實現(xiàn)對配置文件的檢錯。
[0022](4)、本發(fā)明可以在向配置文件中填充校驗信息之前,預先寫入校驗信息引導碼,使得在串行存儲器環(huán)境下軟件可以通過對引導碼進行匹配的方式而不是對訪存次數(shù)進行計數(shù)的方式快速找到校驗信息存儲位置,減少軟件開發(fā)難度,節(jié)省軟件資源。
【專利附圖】
【附圖說明】
[0023]圖1為本發(fā)明內(nèi)置CRC校驗碼的FPGA配置文件生成方法總體流程圖。
[0024]圖2為本發(fā)明中FPGA配置信息幀的CRC校驗碼計算流程圖。
[0025]圖3為本發(fā)明中在FPGA配置文件中標記得到連續(xù)空閑區(qū)域的處理流程圖。
【具體實施方式】
[0026]本發(fā)明通過對EDA工具生成的FPGA配置文件進行處理。首先,本發(fā)明觀察到由EDA工具生成的FPGA配置文件中實際包含了大量與用戶邏輯無關的無效數(shù)據(jù),可以提供大量文件空間用于存儲額外的信息。本發(fā)明充分利用原始配置文件中無用的數(shù)據(jù),并結(jié)合成熟的檢錯算法,實現(xiàn)了在不增加任何存儲空間開銷和對FPGA所要實現(xiàn)的用戶邏輯無影響的情況下,將FPGA配置文件和配置校驗文件同時同地存放的功能,有助于提高FPGA的工作可靠性。其次,本發(fā)明提出了一種通過配置文件特征值來確認文件內(nèi)容的方法,可以擁有比傳統(tǒng)的字節(jié)計數(shù)方法更加優(yōu)異的靈活性、簡便性并能有效提高文件內(nèi)容檢索效率。再次,本發(fā)明觀察到實際FPGA配置文件中,無效數(shù)據(jù)區(qū)多出現(xiàn)在配置文件末尾部分。因此提出了一種“逆序搜索統(tǒng)計”方法用于查找FPGA配置文件中的空白區(qū)域。與正向搜索方法相比可以有效縮短空白區(qū)查找時間,提高運算速度和效率。最后,本發(fā)明觀察到對FPGA配置文件中無效數(shù)據(jù)的更改并不會影響FPGA的配置過程和改變FPGA所要實現(xiàn)的用戶邏輯,因而可以使用計算得到的FPGA配置幀CRC校驗碼覆蓋這些無用數(shù)據(jù),而不需額外的存儲空間。
[0027]本發(fā)明提供了一種內(nèi)置CRC校驗碼的FPGA配置文件生成方法,這種方法適用于FPGA配置信息按幀方式存儲的文件,如圖1所示的本發(fā)明方法的處理流程圖,該方法的具體包括如下步驟:
[0028](I)、遍歷原始FPGA配置文件查找特征值,并依據(jù)所述特征值對應的數(shù)據(jù)類型對文件數(shù)據(jù)進行操作處理,其中,所述特征值為FPGA配置文件中用于標示文件中存放數(shù)據(jù)的類型的字符或字符串,數(shù)據(jù)存放在對應的特征值之后;本發(fā)明的通過對特征值進行識別對不同類型的數(shù)據(jù)進行相應的操作,具體的識別和處理方法如下:
[0029]如圖2所示,如果在正向遍歷過程中查找到的特征值為所述原始FPGA配置文件中的配置信息起始字符串,則判斷所述特征值后存儲的信息為FPGA有效配置信息,即判定所述配置文件為合法的FPGA配置文件,讀取的FPGA配置信息幀并進行CRC校驗碼計算;其中,F(xiàn)PGA有效配置信息為FPGA對應于實現(xiàn)用戶邏輯功能的配置文件內(nèi)容;
[0030]如果在正向遍歷過程中查找到特征值為配置幀分隔符,則判斷已完成I幀F(xiàn)PGA配置信息的讀取,則停止CRC校驗碼計算,并將所述FPGA配置信息幀的CRC校驗碼保存在臨時文件中;
[0031]如果在反向遍歷過程中查找到特征值為無效數(shù)據(jù)時,則判斷所述FPGA配置文件中在所述特征值處為空閑區(qū)域,并對所述空閑區(qū)域進行標記;該空閑區(qū)域可用于填充CRC校驗碼,以達到節(jié)省存儲空間的目的;
[0032](2)當標記得到滿足CRC校驗碼填充要求的連續(xù)空閑區(qū)域時,則將所述臨時文件中的CRC校驗碼填充在所述空閑區(qū)域內(nèi),得到內(nèi)嵌CRC校驗碼的FPGA配置文件,并標記所述CRC校驗碼在配置文件中的存放位置,這種方法可以確保在實現(xiàn)數(shù)據(jù)填充的同時又不影響FPGA的正常配置信息。
[0033]其中,在該步驟中標記CRC校驗碼在配置文件中的存放位置存在兩種處理方法,其中:
[0034]標記方法1:將所述CRC校驗碼在FPGA配置文件中的存放位置的地址保存在文件中,在FPGA配置文件讀取時利用所述文件中保存的地址進行CRC檢驗碼讀??;
[0035]標記方法2:在所述CRC校驗碼的存放位置的起始地址先填寫引導碼再填寫CRC校驗碼,在所述FPGA配置文件讀取時通過識別所述引導碼提取CRC檢驗碼。
[0036]本發(fā)明采用“逆序搜索統(tǒng)計”方法查找原始FPGA配置文件中的連續(xù)空白區(qū)域,用來存放CRC校驗碼,如圖3所示的處理流程圖,該方法的具體實現(xiàn)步驟如下:
[0037](2a)、采用反向讀取方式對FPGA配置文件進行讀取,如果讀取到的特征值為無效數(shù)據(jù),則判斷所述配置文件中在所述特征值處為空閑區(qū)域,則將空閑區(qū)域統(tǒng)計數(shù)加1,如果讀取到的特征值不是無效數(shù)據(jù),則將空閑區(qū)域統(tǒng)計數(shù)置0,其中,所述空閑區(qū)域統(tǒng)計數(shù)的初值為O;
[0038](2b)、按照步驟(2a)的空閑區(qū)域統(tǒng)計數(shù)計數(shù)方法進行計數(shù),當所述空閑區(qū)域統(tǒng)計數(shù)等于設定的長度時,則記錄參與所述空閑區(qū)域統(tǒng)計數(shù)累加的空閑區(qū)域地址;其中,如果采用標記方法I標記CRC校驗碼在FPGA配置文件中存放位置,則該步驟中的設定長度等于臨時文件中CRC校驗碼的長度之和;如果采用標記方法2標記CRC校驗碼在FPGA配置文件中的存放位置,則該步驟中的設定長度等于引導碼長度加上臨時文件中CRC校驗碼長度之和。
[0039]實施例:
[0040]本實施例中,F(xiàn)PGA配置文件生成方法具體步驟如下:
[0041 ] 步驟1:使用EDA工具生成FPGA原始配置文件;
[0042]步驟2:讀取FPGA原始配置文件;
[0043]步驟3:在FPGA原始配置文件中正向搜索配置信息起始字符串并記錄該字符串在配置文件中的偏移地址As ;
[0044]步驟4:所記錄的偏移地址As開始,連續(xù)讀取配置文件中的數(shù)據(jù)并計算其CRC校驗碼,同時更新偏移地址As為當前在FPGA原始配置文件中讀取的地址;
[0045]步驟5:在檢測到幀分隔符后停止計算CRC校驗碼并將已算出的校驗碼存入臨時文件;
[0046]步驟6:若軟件檢測到無效數(shù)據(jù)則停止計算CRC校驗碼并將已算出的校驗碼存入臨時文件并記錄該臨時文件中字符串的總長度1。,否則轉(zhuǎn)步驟4 ;
[0047]步驟7:軟件由文件尾部開始逆向搜索原始FPGA配置文件,并建立空白區(qū)統(tǒng)計計數(shù)器,該計數(shù)器默認值為0,該計數(shù)器的值記為Nb ;
[0048]步驟8:若軟件檢測到I字節(jié)無效數(shù)據(jù)(例如全O)則將空白區(qū)統(tǒng)計計數(shù)器的值增加1,然后繼續(xù)逆向搜索原始FPGA配置文件;
[0049]步驟9:若軟件檢測到I字節(jié)有效數(shù)據(jù)(例如非O)則將空白區(qū)統(tǒng)計計數(shù)器的值清0,然后轉(zhuǎn)步驟8 ;
[0050]步驟10:軟件將空白區(qū)統(tǒng)計計數(shù)器的值和CRC臨時文件的長度I。進行比對,若Nb彡Ic則記錄當前狀態(tài)下無效數(shù)據(jù)在原始FPGA配置文件中的地址Ab。
[0051]步驟11:由地址Ab開始,將CRC臨時文件中的數(shù)據(jù)按照字節(jié)方式寫入原始FPGA配置文件。
[0052]其中步驟7-10與步驟3-6為同時進行。對于步驟11中所進行的操作,由于采用的方法是對原始配置文件中無用數(shù)據(jù)進行更改,因此不會增加原始文件的長度和所占存儲空間的大小,且不會破壞原始配置文件中所攜帶的FPGA配置信息和與FPGA器件之間的對應關系,故而不會不影響該配置下載到FPGA的過程和下載后FPGA的具體功能。
[0053]通過以上描述可以看出,本發(fā)明通過利用FPGA配置文件中無用的數(shù)據(jù),在不增加任何存儲空間開銷和對FPGA所要實現(xiàn)的用戶邏輯無影響的情況下,將FPGA配置文件和配置校驗文件同時同地存放的功能,能夠省去需要進行FPGA配置文件回讀校驗的系統(tǒng)中用于存放掩碼文件的存儲器,在提供同樣設計可靠性的前提下,節(jié)省了大量硬件資源,提高了電路可靠性,簡化了電路設計,降低了整機功耗和體積。本發(fā)明具有以下有益的效果:
[0054]首先,所述方案充分利用FPGA原始配置文件中的無效數(shù)字資源實現(xiàn)信息存儲,在達到存儲校驗信息目的的同時,不會帶來額外的存儲空間開銷。
[0055]同時,本發(fā)明所述方法只需要對FPGA原始配置文件進行I次遍歷即可同時完成配置幀CRC校驗碼計算和空白區(qū)查找,其時間復雜度為O (V),其中V為配置幀和空白區(qū)搜索次數(shù)中的最大值,且V不會超過原始配置文件的總長度。即該方法計算耗時與用戶邏輯的復雜度和所選FPGA器件的規(guī)模正相關。相對于已有方法,本發(fā)明所述方法只需要剛好滿足存儲要求的空白空間即可完成存儲,存儲空間利用率高。
[0056]另外,本發(fā)明在進行FPGA配置幀讀取和空白區(qū)搜索的過程中所使用的方法能夠?qū)崿F(xiàn)在滿足特定特征碼條件的情況下(例如不再讀取到幀分隔符)實現(xiàn)自動停止或退出。與需要遍歷完整個FPGA配置文件的方法相比,本專利所提出的方法,完成相同目標所需的時間更短,效率更高。
[0057]最后,本發(fā)明所使用的區(qū)域為FPGA配置文件中的空白區(qū),對其數(shù)據(jù)的更改對FPGA所要實現(xiàn)的用戶邏輯和配置文件到FPGA的下載過程沒有影響,對電路時序也沒有改變,因而不會帶來額外的性能開銷。
[0058]以上所述,僅為本發(fā)明最佳的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術(shù)領域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。
[0059]本發(fā)明說明書中未作詳細描述的內(nèi)容屬于本領域?qū)I(yè)技術(shù)人員的公知技術(shù)。
【權(quán)利要求】
1.一種內(nèi)置CRC校驗碼的FPGA配置文件生成方法,所述FPGA的配置信息按幀方式存儲于配置文件中,其特征在于包括如下步驟: (1)、遍歷原始FPGA配置文件查找特征值,并依據(jù)所述特征值對應的數(shù)據(jù)類型對文件數(shù)據(jù)進行操作處理,其中: 如果查找到的特征值為所述原始FPGA配置文件中的配置信息起始字符串,則判斷所述特征值后存儲的信息為FPGA有效配置信息,即判定所述配置文件為合法的FPGA配置文件,讀取FPGA配置信息幀并進行CRC校驗碼計算; 如果查找到特征值為配置幀分隔符,則判定已完成I幀F(xiàn)PGA配置信息的讀取,停止CRC校驗碼計算,并將所述FPGA配置信息幀的CRC校驗碼保存在臨時文件中; 如果查找到特征值為無效數(shù)據(jù)時,則判定所述FPGA配置文件中在所述特征值處為空閑區(qū)域,并對所述空閑區(qū)域進行標記; (2)當標記得到滿足CRC校驗碼填充要求的連續(xù)空閑區(qū)域時,則將所述臨時文件中的CRC校驗碼填充在所述空閑區(qū)域內(nèi),得到內(nèi)嵌CRC校驗碼的FPGA配置文件,并標記所述CRC校驗碼在所述FPGA配置文件中的存放位置。
2.根據(jù)權(quán)利要求1所述的一種內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,其特征在于:在步驟(2)中,標記得到滿足CRC校驗碼填充要求的連續(xù)空閑區(qū)域,具體實現(xiàn)方法如下: (2a)、采用反向讀取方式對FPGA配置文件進行讀取,如果讀取到的特征值為無效數(shù)據(jù),則判斷所述配置文件中在所述特征值處為空閑區(qū)域,則將空閑區(qū)域統(tǒng)計數(shù)加1,如果讀取到的特征值不是無效數(shù)據(jù),則將空閑區(qū)域統(tǒng)計數(shù)置O,其中,所述空閑區(qū)域統(tǒng)計數(shù)的初值為O ; (2b)、按照步驟(2a)的空閑區(qū)域統(tǒng)計數(shù)計數(shù)方法進行計數(shù),當所述空閑區(qū)域統(tǒng)計數(shù)等于設定的長度時,則記錄參與所述空閑區(qū)域統(tǒng)計數(shù)累加的空閑區(qū)域地址。
3.根據(jù)權(quán)利要求1所述的一種內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,其特征在于:在步驟(2)中標記所述CRC校驗碼在所述FPGA配置文件中的存放位置,采用如下的方法實現(xiàn):將所述CRC校驗碼的存放位置的地址保存在文件中,在FPGA配置文件讀取時利用所述文件中保存的地址進行CRC檢驗碼讀取。
4.根據(jù)權(quán)利要求1所述的一種內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,其特征在于:在步驟(2)中標記所述CRC校驗碼在配置文件中的存放位置,采用如下的方法實現(xiàn):在所述CRC校驗碼的存放位置的起始地址先填寫引導碼再填寫CRC校驗碼,在所述FPGA配置文件讀取時根據(jù)所述引導碼識別并提取CRC檢驗碼。
5.根據(jù)權(quán)利要求1所述的一種內(nèi)置CRC校驗碼的FPGA配置文件的生成方法,其特征在于:在步驟(I)中,采用正向讀取的方法查找代表配置信息起始字符串的特征值。
【文檔編號】G06F11/10GK104461764SQ201410782611
【公開日】2015年3月25日 申請日期:2014年12月16日 優(yōu)先權(quán)日:2014年12月16日
【發(fā)明者】董暘暘, 施蕾, 楊孟飛, 胡洪凱, 葉有時, 趙云富, 馮丹, 劉波, 程照強, 張紹林, 劉鴻瑾, 張洪華 申請人:北京控制工程研究所