專利名稱:一種流水線型fpga回讀幀ecc電路的制作方法
技術領域:
本發明屬于FPGA配置安全技術領域,具體為一種流水線的FPGA回讀幀ECC( Error Correcting Code)漢明碼校驗檢錯糾錯電路。
背景技術:
傳統的FPGA (可編程邏輯門陣列)下載一般采用CRC (循環冗余校驗)進行配置數據的校驗,以檢驗FPGA的配置數據是否正確下載到編程點。但隨著FPGA的不斷開發和應用,例如SRAM型FPGA在太空中內部編程點容易因射線粒子的沖擊而發生翻轉,因此很有必要對編程點內的數據進行回讀,以糾正發生錯誤的編程點。漢明碼是1950年由美國貝爾實驗室提出來的,是第一個設計用來糾正錯誤的線性分組碼,漢明碼及其變型已廣泛應用于數字通信和數據存儲系統中作為差錯控制碼。漢明碼通過在通信的數據信息中插入一定的監督碼元來檢測和糾正發生錯誤的信息位。FPGA的ECC (錯誤檢測與糾正)校驗電路是對回讀的單幀數據進行漢明譯碼,傳統的方法是先存儲回讀的單幀數據然后再進行校驗,這種方法會造成額外的存儲資源開銷, 而且把一幀回讀數據全部同時進行異或運算會降低整個配置電路的速度。本發明所采用的流水線型幀ECC電路充分利用FPGA回讀數據的特征,在FPGA回讀幀數據的同時即完成單幀數據的ECC校驗,而且也不用額外的存儲資源,每一級流水線的延時相對于整個電路的延時而言是非常小的,不會影響到整個配置電路的速度。
發明內容
本發明目的在于提供一種高速、低功耗、低面積的FPGA回讀幀ECC電路。本發明提供的FPGA回讀幀ECC電路,可以根據不同的回讀總線位寬,回讀數據幀的長度來靈活地調整流水線的級數以及每級流水線的具體計算內容。設回讀總線位寬為M 位,每一幀包含N個有效數據,則FPGA回讀幀ECC電路設計為N級流水線,每級流水線的輸入數據為M位(如圖I所示);生成k個校驗位,k的值由公式(I)決定。每一級共用相同的時鐘、復位、數據端口。每一級的輸出作為下一級的輸入,第N級的輸出作為整個ECC電路的輸出。以回讀總線位寬為32位,每一幀包含40個有效數據為例(即M=32,N=40),則電路共需要40級流水線,每一級流水線輸入數據為32位。通過公式(I)計算可得共產生12位校驗位,每一級流水線在使能有效的情況下對輸入數據進行一定的異或運算,產生12位臨時的校驗位。這12位臨時校驗位傳輸給下一級,參與下一級的計算,以此順序往后傳遞,直到最后一級(第40級)計算完成,第40級計算輸出的12位校驗位作為整體漢明碼校驗計算結果(如圖I所示)。本發明的FPGA回讀幀ECC電路中,單級流水線的計算示意圖如圖2所示,每一級包含k個觸發器以及相應的組合邏輯,組合邏輯由異或計算單元組成,主要用于對上一級的校驗位輸出以及輸入的M位數據進行異或運算,每一個校驗位所對應的組合邏輯都不相同,但是相同位置的校驗位是隨著流水線傳遞的。因為第一級流水線不接收上一級流水線的輸入,所以第一級流水線的輸入端沒有來自上一級的P[(k-1) : O],除第一級流水線以外,每一級流水線都包含M位的數據輸入位,以及K位的上一級校驗位輸入,因為有了上一級校驗位的輸入,這樣才能保證計算的連續性和傳遞性。每一級流水線都是完成特定的異或計算功能,我們把漢明碼校驗計算的某些與當前流水線級相關的位放在當前流水線里面計算,這樣就把整體的計算分攤到了每一級去,而且計算結果往后傳遞,總能夠保證最后計算的完整性。除此以外每一級流水線還包括必要的使能控制端,時鐘,復位等信號,每一級流水線的使能端都不相同,通過一個全局移位寄存器來使能特定的流水線級。圖3是針對圖I的輸入端口給出的一個工作時序圖,復位信號Rst低有效,時鐘 Clk信號上升沿采樣使能En信號和數據Data [ (M-I) : O]。如圖3所示,時鐘上升沿采樣到第一個En有效之后啟動第一級流水線開始計算,第一級流水線對當前的輸入數據進行異或運算,計算之后的結果(臨時校驗位)傳遞給第二級流水線。在時鐘上升沿采樣到第二個 En有效之后啟動第二級流水線,第二級流水線把第一級計算的結果連同當前所輸入的有效數據一同進行異或計算,產生新的臨時校驗位傳遞給第三級。以此往后傳遞直到最后一級計算完成,使能Ecc_Valid信號有效,則整個漢明碼的計算過程就結束。采用流水線的方式最終生成校驗位的數量k是不會發生變化的,實際上就是對于每一個校驗位把高達幾百位的異或計算分成N次來計算,計算總的結果是不會變化的,每一級的輸出的寬度都是k,k的計算滿足以下公式
2k-1≥M*N+K
其中,M為回讀總線位寬,N為有效數據個數,k為校驗位個數。采用這樣的校驗位數能糾正一位錯誤,檢測兩位及兩位以上的錯誤。本發明的實現原理如圖4所示,圖中是以M=32,N=40,k=12為例進行的說明, PO-Pll表示校驗位,D0-D31表示數據位。圖中總共包含40個有效數據,正常的漢明碼校驗計算是把所有的數據位預先準備好然后再直接生成校驗位,本發明采用流水線的方式將每一個有效數據(圖4中的D0-D31)按照先后順序依次放入40級流水線里面進行計算,如第一個有效數據(對應圖4中的編號3,5,6,7,9-15,17-31,33-38)進入第一級參與運算,同時把結果傳輸給第二級,第二個有效數據(對應圖4中的編號39-63,65-71)進入第二級流水線參與運算,同時把結果傳輸給第三級,并以此類推,直到最后一級計算完成,整個漢明碼計算就結束了。本發明采用了流水線結構的ECC校驗電路,能夠避免幀數據存儲所造成的存儲資源開銷,把幾百位的異或計算分級實現,整個ECC電路的延時就會小很多,采用這種設計可以在FPGA回讀的過程中就完成計算。因此,這樣的ECC電路具有高速,低功耗,低面積特性。
圖I為ECC電路的整體結構視圖,共有N級,輸入位寬為M,生成k個校驗位,k的值由公式(I)決定。每一級共用相同的時鐘、復位、數據端口。每一級的輸出作為下一級的輸入,第N級的輸出作為整個ECC電路的輸出。
圖2為單級電路結構,每一級包含k個觸發器以及相應的組合邏輯,組合邏輯由異或計算單元組成,主要對上一級的校驗位輸出以及輸入的M位數據進行異或運算,每一個校驗位所對應的組合邏輯都不相同,但是相同位置的校驗位是隨著流水線傳遞的。圖3為一個全局操作時序圖,Rst信號為低有效,En信號為高有效,Ecc_Valid 信號高有效指示整個幀ECC過程是否結束,在完整的輸入一幀數據之后Parity [k-1:0]輸出校驗后的數據,并且ECC_Valid拉高一個周期指示輸出有效,中間的操作可以通過禁止使能位暫停。圖4是在M=32,N=40,k=12情況下的ECC流水線實現原理圖,圖中小方格上方的PO-Pll表示校驗位,小方格下方的D0-D31表示數據位,D0-D31剛好表示一個有效數據, N=40表示總共有40個有效數據,圖4表示一個整體的漢明碼校驗的數據位與校驗位的排列分布情況。
具體實施例方式整個ECC電路是在FPGA回讀過程中開啟工作的,FPGA編程下載電路執行回讀命令之后,FPGA內部編程點數據便以幀為單位從回讀總線上往用戶接口輸出,幀ECC電路也伴隨著數據的回讀開始進行校驗。但是其不影響整個配置電路,只是通過檢測回讀數據來指示回讀數據是否發生了錯誤。下面以N=40,M=32,即FPGA回讀總線位寬為32位,每幀包含40個有效數據為例進行說明。M*N = 1280,根據公式I計算可知共需要12位校驗碼,即k=12。 整個ECC計算流程如下
1、上電之后ECC電路處于復位狀態;
2、FPGA編程下載電路開始回讀數據,同時回讀數據有效指示信號,數據等送到ECC電路的輸入端口;
3、一幀40個32bit的數據完整的送入ECC電路之后,ECC電路輸出漢明校驗位。同時Ecc_Valid信號指示計算完成并持續一個周期,此刻Parity[ll:0]端口上的數據就是當前幀的漢明校驗碼;
4、下一幀數據繼續輸入ECC電路。再次重復步驟3;
5、整個回讀過程結束,ECC也不再計算直到進行下次回讀。
權利要求
1.一種流水線型FPGA回讀幀ECC電路,其特征在于設回讀總線位寬為M位,每一幀包含N個有效數據,則FPGA回讀幀ECC電路為N級流水線,每級流水線的輸入數據為M位;生成k個校驗位,k的值由公式(I)決定2k~- > >1 ^ H + k (O每一級共用相同的時鐘、復位、數據端口 ;每一級的輸出作為下一級的輸入,第N級的輸出作為整個ECC電路的輸出;所述N級流水線中,每一級流水線包含k個觸發器以及相應的組合邏輯,組合邏輯由異或計算單元組成,用于對上一級的校驗位輸出以及輸入的M位數據進行異或運算,每一個校驗位所對應的組合邏輯都不相同,但是相同位置的校驗位是隨著流水線傳遞;除此以外每一級流水線還包括使能控制端、時鐘、復位信號,每一級流水線的使能端都不相同,通過一個全局移位寄存器來使能特定的流水線級。
2.根據權利要求I所述的流水線型FPGA回讀幀ECC電路,其特征在于電路的輸入端口的工作時序為時鐘上升沿采樣到第一個使能En有效之后啟動第一級流水線開始計算, 第一級流水線對當前的輸入數據進行異或運算,計算之后的結果傳遞給第二級流水線;在時鐘上升沿采樣到第二個使能En有效之后啟動第二級流水線,第二級流水線把第一級計算的結果連同當前所輸入的有效數據一同進行異或計算,產生新的臨時校驗位傳遞給第三級;以此往后傳遞直到最后一級計算完成,使能Ecc_Valid信號有效,則整個漢明碼的計算過程就結束。
全文摘要
本發明屬于FPGA器件技術領域,具體為一種FPGA回讀幀ECC檢錯糾錯電路。該電路利用FPGA回讀數據總線的特征采用流水線結構將整體的漢明碼解碼計算分級實現,并根據FPGA單幀回讀有效數據的個數來決定流水線的級數,由流水線的級數以及回讀總線位寬來決定校驗位的個數,在FPGA回讀幀數據的同時即進行單幀數據的ECC校驗。將漢明碼校驗的整體計算轉換為分級計算實現,避免了額外的用于存儲FPGA回讀幀數據的資源,整體的路徑延時也會減少,因而可以提高電路的計算速度。
文檔編號G06F11/10GK102594334SQ20121000585
公開日2012年7月18日 申請日期2012年1月10日 優先權日2012年1月10日
發明者周灝, 來金梅, 毛勁松, 王元 申請人:復旦大學