一種抗SEU存儲器電路的FPGA設(shè)計
對于圖2所示的內(nèi)存配置方案,當(dāng)系統(tǒng)工作在TMR模式時,所有的片選信號都被相同的信號驅(qū)動,這樣就構(gòu)成了TMR需要的3個16位內(nèi)存空間;而當(dāng)系統(tǒng)工作在漢明碼模式時,它們則ah、al、bh為一組,bl、ch、cl為另一組,并分別被相同的片選信號驅(qū)動,從而構(gòu)成了兩個獨立的(16+8)位的內(nèi)存空間。本設(shè)計采用了3片128 K×16bit的SRAM,如果設(shè)置每片SRAM的低4K×16bit空間工作在TMR模式,則從圖中可以看出,該SRAM芯片組中還有兩個124 K×(16+8) bit的空間可以工作于擴(kuò)展?jié)h明碼模式。
3 電路設(shè)計
基于上述內(nèi)存配置方案,本文設(shè)計了如圖3所示的抗SEU存儲器電路。該電路包含了4個功能模塊。
3.1 TMR模塊
在TMR工作模式下可完成數(shù)據(jù)的寫入操作和讀取操作中的冗余判決。如果在讀取過程中發(fā)現(xiàn)有一片RAM中的數(shù)據(jù)與其它三片不同,則對該片RAM進(jìn)行正確數(shù)據(jù)的回寫;如果發(fā)現(xiàn)三片RAM中的數(shù)據(jù)都不相同,則產(chǎn)生中斷信號。
3.2 擴(kuò)展?jié)h明碼模塊
在擴(kuò)展?jié)h明碼工作模式下,當(dāng)寫入數(shù)據(jù)時,則對其進(jìn)行編碼;當(dāng)讀取數(shù)據(jù)時,則對其進(jìn)行相應(yīng)的解碼,并判斷數(shù)據(jù)是否出錯。如果一位錯則自動回寫正確值,如果兩位以上的錯誤,則產(chǎn)生中斷信號。
3.3 模式選擇模塊
在該模塊內(nèi)部設(shè)置有一個32位的模式配置寄存器。通過給模式配置寄存器的低18位進(jìn)行預(yù)先置數(shù),可以設(shè)置檢錯糾錯電路的工作模式,同時也就設(shè)置了RAM的內(nèi)存配置情況。根據(jù)CPU的不同應(yīng)用要求,模式控制模塊可以讓檢錯糾錯電路在擴(kuò)展?jié)h明碼方式與TMR方式二者之間進(jìn)行靈活的切換。
3.4 控制邏輯模塊
該電路模塊可根據(jù)電路所處的檢錯糾錯模式來控制相應(yīng)的讀寫信號和內(nèi)存片選信號,以便正確訪問RAM內(nèi)容。
4 FPGA的編程與實現(xiàn)
接下來對每個模塊在設(shè)計過程的具體考慮進(jìn)行重點介紹。
4.1 TMR模塊
對于TMR模塊的設(shè)計較為簡單。需要特別指出的是,考慮到對電路有效性的驗證,在寫通道上另外添加了錯誤注入模塊。圖4所示是其設(shè)計框圖,圖中,ctrl_err為錯誤注入控制信號,當(dāng)ctrl_err為0時,表示不注入錯誤;當(dāng)ctrl_err為1時,表示注入錯誤。這樣可以通過對ct-rl_err信號的控制來實現(xiàn)對SEU效應(yīng)的模擬。add_err[7..0]為注錯數(shù)據(jù)信號。將add_err的低四位用0000~1111表示,可用于表示給數(shù)據(jù)添加錯誤的位置,它的高四位甩XX01~XX11表示,則可分別表示要給RAM組中的某個RAM添加錯誤。
4.2 擴(kuò)展?jié)h明碼模塊
擴(kuò)展?jié)h明碼模塊的設(shè)計主要包括編碼模塊、伴隨式生成模塊以及差錯校驗?zāi)K等。編碼模塊可使用式(1)進(jìn)行編碼,可生成r個校驗位。并將它們依次添加到碼元序列的第2i-1(其中i=0,…,r-1)個位置上。伴隨式生成模塊使用式(2)進(jìn)行解碼,可對應(yīng)生成校驗子S。差錯控制模塊可根據(jù)生成的校驗子S來判斷數(shù)據(jù)是否出錯,以及出錯的位數(shù),并用sef與def表示。如果數(shù)據(jù)沒有出現(xiàn)錯誤,則直接送出;如果數(shù)據(jù)中有一位出現(xiàn)錯誤,則對其進(jìn)行回寫,同時將修正的數(shù)據(jù)送出;如果兩位出現(xiàn)錯誤,則輸出中斷信號int。
評論