嚴丹



摘要 為給單片機實現EDAC功能,采用了FPGA進行編碼設計,設計了FPGA與單片機的硬件和軟件接口,將FPGA作為單片機數據與EDAC校驗數據之間的中轉編譯,實現了單片機系統內的EDAC校驗功能。
【關鍵詞】單片機 FPGA 單粒子翻轉 EDAC
1 引言
單片機80032在衛星、飛船等航天器上應用廣泛,常規的單片機系統由單片機、程序存儲器和數據存儲器組成,在航天器上應用時,程序存儲器可以使用不可擦除的PROM來實現功能,該類型程序存儲器大多具備單粒子翻轉免疫的功能,而對于數據存儲器SRAM,該類型器件的特性決定了器件本身無法免疫單粒子翻轉,因此在使用中存在單粒子翻轉導致數據位錯誤的現象發生,應用EDAC技術可實現對數據錯誤的檢二糾一,大幅度降低單粒子翻轉帶來的風險,考慮到單片機80C32無自帶的EDAC功能,需要使用FPGA來實現EDAC功能。
利用FPGA實現80C32的EDAC可辨別一位數據或校驗位錯誤,并能夠將正確的數據傳送到數據線中,但是具體對糾正后數據的SRAM回寫,如果采用FPGA實現,硬件上需要增加26根SRAM地址線,還需要增加60個左右的寄存器資源,同時亦存在FPGA回寫SRAM與單片機讀寫時序沖突的問題,所以對SRAM的回寫建議采用單片機軟件完成,FPGA只提供錯誤信息。對于二位及以上數據或校驗位的錯誤,不能實現糾正,只提供錯誤信息。
2 EDAC設計原理
(Error Detect And Correct)EDAC即錯誤檢測及糾正,在實現方法中存在多種編碼方式,比較常用的一種編碼方式是漢明碼,該編碼規則是一種線性分組碼。在實際應用中,比較常用的是(12-8)漢明碼編碼方式,但該編碼方式僅能糾一位錯誤,且無法區分兩位錯誤和一位錯誤的分別,因此在航天器上使用存在較大風險,而使用(13,8)改進版的漢明碼編碼方式可以實現檢兩位錯誤糾正一位錯誤,因此在使用中無風險,該編碼規則其原理如下:
對單片機的8位數據位按一定的編碼規則進行編碼,產生5位校驗碼組成13位數據位,編碼規則如下:
CD(4)= CD(3)○ CD(2)○ CD(1)○ CD(0)○ DT(7)○ DT(6)○ DT(5)○ DT(4)○ DT(3)○ DT(2)○ DT(1)○ DT(O);
CD(3)=DT(7)○ DT(6)○ DT(5)○ DT(4);
CD(2)=DT(7)○ DT(3)○ DT(2)○ DT(1);
CD(1)= DT (6)0 DT (5)○ DT (3)○ DT(2)○ DT (O);
CD(O)= DT (6)○ DT (4)○ DT (3)○ DT(1)○ DT (O)。
式中DT表示真實有效數據的數據位(共8位),CD表示編碼產生的校驗碼(共5位)。
當單片機讀取SRAM中的數據時,將SRAM中的真實數據和校驗碼同時讀取到FPGA中,FPGA將讀取到的數據位和校驗碼按上述編碼規則重新進行編碼,產生新的5位校驗碼,將使用讀取操作再通過編碼產生的新校驗碼和數據與從SRAM中讀取的數據和校驗碼進行異或比較運算,將異或運算出的結果組成向量組S,S=(S4,S3,S2,Sl,SO),根據運算出的不同向量S值,對照表1進行糾錯檢查。
在FPGA設計中,對于數據SRAM -位錯誤時,僅記錄錯誤信息放入專用寄存器中,不進行中斷響應,單片機可通過專用寄存器查詢數據錯誤情況并決定回寫時間,如發生兩位錯誤或者不可糾錯時則進行中斷處理,通過中斷口發送中斷信號給單片機。
3 外部接口設計
在現有硬件的基礎上,只需要增加一塊校驗SRAM,并擴展FPGA的外部連線即可滿足EDAC實現要求,如圖1所示。
4 FPGA功能設計
對于FPGA的設計,主要涉及到處理器寫總線和讀總線二種操作模式。
4.1 寫操作
t0:寫SRAM操作時的地址保持時間(至少137ns);
tl: FPGA完成校驗數據的邏輯操作時間(不大于50ns):
t2:實際寫SRAM(包括數據和校驗SRAM)的時間(至少200ns)。
FPGA檢測到WR低電平時,將數據SRAM的數據線接入到單片機的數據總線,將校驗SRAM的數據線接入到校驗數據組合邏輯中,如圖2所示。
4.2 讀操作
t0:單片機讀信號RD有效到SRAM數據有效的時間(60ns以下);
tl: FPGA完成EDAC功能的邏輯操作時間(50ns以下);
注:t0和t1的總時間應該小于單片機讀時序中RD變低到有效數據的最大延遲時間(16M時鐘下,時間為148ns)。
FPGA檢測到RD低電平時,將單片機的數據總線接入到EDAC組合邏輯中,將EDAC組合邏輯中的數據線接入到SRAM的數據線中。
FPGA檢測到RD上升沿時,檢測EDAC是否發生錯誤,并產生相應的錯誤信號輸出,如圖3所示。
4.3 單片機軟件接口
EDAC發生錯誤時,將寫入到相應的地址空間中,供單片機進行中斷或查詢。同時也增加不可糾錯計數器和可糾錯計數器,分別為8位,上電復位是為O,在有EDAC錯誤時,進行循環計數,單片機對計數器只能讀操作。
5 仿真分析結果
對EDAC設計的仿真如圖4-6所示,通過仿真表明EDAC功能正確。
6 結論
本文通過使用FPGA芯片實現了單片機系統的EDAC功能,在FPGA內部設計了EDAC運算和一位或兩位數據出錯計數功能,并在FPGA內部實現了單片機讀取數據的當前出錯地址存儲功能,達到了預期的設計要求。本設計成功應用在某型號智能處理器中,經長期運行驗證了本設計的正確性。
參考文獻
[1]陳微等.改進漢明碼檢錯糾錯技術的設計與實現[J].全國抗惡劣環境計算機學術年會,2006:192-199.