抗SEU存儲(chǔ)器的設(shè)計(jì)的FPGA實(shí)現(xiàn)
3.1 TMR模塊
在TMR工作模式下可完成數(shù)據(jù)的寫(xiě)入操作和讀取操作中的冗余判決。如果在讀取過(guò)程中發(fā)現(xiàn)有一片RAM中的數(shù)據(jù)與其它三片不同,則對(duì)該片RAM進(jìn)行正確數(shù)據(jù)的回寫(xiě);如果發(fā)現(xiàn)三片RAM中的數(shù)據(jù)都不相同,則產(chǎn)生中斷信號(hào)。
3.2 擴(kuò)展?jié)h明碼模塊
在擴(kuò)展?jié)h明碼工作模式下,當(dāng)寫(xiě)入數(shù)據(jù)時(shí),則對(duì)其進(jìn)行編碼;當(dāng)讀取數(shù)據(jù)時(shí),則對(duì)其進(jìn)行相應(yīng)的解碼,并判斷數(shù)據(jù)是否出錯(cuò)。如果一位錯(cuò)則自動(dòng)回寫(xiě)正確值,如果兩位以上的錯(cuò)誤,則產(chǎn)生中斷信號(hào)。
3.3 模式選擇模塊
在該模塊內(nèi)部設(shè)置有一個(gè)32位的模式配置寄存器。通過(guò)給模式配置寄存器的低18位進(jìn)行預(yù)先置數(shù),可以設(shè)置檢錯(cuò)糾錯(cuò)電路的工作模式,同時(shí)也就設(shè)置了RAM的內(nèi)存配置情況。根據(jù)CPU的不同應(yīng)用要求,模式控制模塊可以讓檢錯(cuò)糾錯(cuò)電路在擴(kuò)展?jié)h明碼方式與TMR方式二者之間進(jìn)行靈活的切換。
3.4 控制邏輯模塊
該電路模塊可根據(jù)電路所處的檢錯(cuò)糾錯(cuò)模式來(lái)控制相應(yīng)的讀寫(xiě)信號(hào)和內(nèi)存片選信號(hào),以便正確訪問(wèn)RAM內(nèi)容。
4 FPGA的編程與實(shí)現(xiàn)
接下來(lái)對(duì)每個(gè)模塊在設(shè)計(jì)過(guò)程的具體考慮進(jìn)行重點(diǎn)介紹。
4.1 TMR模塊
對(duì)于TMR模塊的設(shè)計(jì)較為簡(jiǎn)單。需要特別指出的是,考慮到對(duì)電路有效性的驗(yàn)證,在寫(xiě)通道上另外添加了錯(cuò)誤注入模塊。圖4所示是其設(shè)計(jì)框圖,圖中,ctrl_err為錯(cuò)誤注入控制信號(hào),當(dāng)ctrl_err為0時(shí),表示不注入錯(cuò)誤;當(dāng)ctrl_err為1時(shí),表示注入錯(cuò)誤。這樣可以通過(guò)對(duì)ct-rl_err信號(hào)的控制來(lái)實(shí)現(xiàn)對(duì)SEU效應(yīng)的模擬。add_err[7..0]為注錯(cuò)數(shù)據(jù)信號(hào)。將add_err的低四位用0000~1111表示,可用于表示給數(shù)據(jù)添加錯(cuò)誤的位置,它的高四位甩XX01~XX11表示,則可分別表示要給RAM組中的某個(gè)RAM添加錯(cuò)誤。
4.2 擴(kuò)展?jié)h明碼模塊
擴(kuò)展?jié)h明碼模塊的設(shè)計(jì)主要包括編碼模塊、伴隨式生成模塊以及差錯(cuò)校驗(yàn)?zāi)K等。編碼模塊可使用式(1)進(jìn)行編碼,可生成r個(gè)校驗(yàn)位。并將它們依次添加到碼元序列的第2i-1(其中i=0,…,r-1)個(gè)位置上。伴隨式生成模塊使用式(2)進(jìn)行解碼,可對(duì)應(yīng)生成校驗(yàn)子S。差錯(cuò)控制模塊可根據(jù)生成的校驗(yàn)子S來(lái)判斷數(shù)據(jù)是否出錯(cuò),以及出錯(cuò)的位數(shù),并用sef與def表示。如果數(shù)據(jù)沒(méi)有出現(xiàn)錯(cuò)誤,則直接送出;如果數(shù)據(jù)中有一位出現(xiàn)錯(cuò)誤,則對(duì)其進(jìn)行回寫(xiě),同時(shí)將修正的數(shù)據(jù)送出;如果兩位出現(xiàn)錯(cuò)誤,則輸出中斷信號(hào)int。
需要注意的是,擴(kuò)展?jié)h明碼模式下的地址信號(hào)需要進(jìn)行額外的處理。由于本設(shè)計(jì)采用了128K×16bit的SRAM芯片,它有17位地址信號(hào)。但是,正如上面提到過(guò)的,SRAM芯片組中將有4KB的存儲(chǔ)空間工作于TMR模式,還有248KB的存儲(chǔ)空間將工作于擴(kuò)展?jié)h明碼模式,而248KB的空間需要18位地址信號(hào),這就要求有一個(gè)對(duì)地址信號(hào)進(jìn)行變換的模塊。當(dāng)?shù)刂沸∮?KB 時(shí),電路工作于TMR模式下而無(wú)需對(duì)地址進(jìn)行變換;當(dāng)?shù)刂反笥诘扔? KB同時(shí)小于128 KB時(shí),電路工作于擴(kuò)展?jié)h明碼模式,地址信號(hào)會(huì)選中第一個(gè)124 Kx(16+8)bit的空間,此時(shí)也無(wú)需地址變換;而當(dāng)?shù)刂反笥诘扔?28 KB,電路也工作于擴(kuò)展?jié)h明碼模式下,此時(shí)地址信號(hào)應(yīng)選中第二個(gè)124 Kx(16+81bit的空間,此時(shí)則應(yīng)將地址值加上4KB,然后取新的地址的低17位加到第二個(gè)124 Kx (16+8) bit的存儲(chǔ)空間上即可。
在上述TMR和擴(kuò)展?jié)h明碼模塊的設(shè)計(jì)中,對(duì)出錯(cuò)數(shù)據(jù)的回寫(xiě)是設(shè)計(jì)中的重點(diǎn)和難點(diǎn),主要應(yīng)考慮是否回寫(xiě)和何時(shí)回寫(xiě)兩個(gè)問(wèn)題。這兩個(gè)問(wèn)題可由時(shí)序控制模塊來(lái)解決。它主要根據(jù)CPU的控制信號(hào),適時(shí)的發(fā)出錯(cuò)誤標(biāo)示輸出使能信號(hào)flag_oe,從而改變CPU對(duì)RAM的讀寫(xiě)狀態(tài),完成
修正數(shù)據(jù)的正確回寫(xiě)。
另外,電路中的錯(cuò)誤標(biāo)示信號(hào)對(duì)整體設(shè)計(jì)的穩(wěn)定性至關(guān)重要。為了保證錯(cuò)誤標(biāo)示信號(hào)的穩(wěn)定,可在雙向傳輸門(mén)B的讀入端加一個(gè)鎖存器,鎖存器的鎖存使能端也可由時(shí)序控制模塊的flag_latch來(lái)控制。
4.3 模式選擇模塊
模式選擇模塊用于接收來(lái)自CPU的配置信號(hào)config和片選信號(hào)cs_fpga,以便將32位的配置數(shù)據(jù)寫(xiě)入配置寄存器。該寄存器的低18位數(shù)據(jù)為模式配置數(shù)據(jù),地址信號(hào)通過(guò)與該數(shù)據(jù)進(jìn)行比較,可使小于該地址的存儲(chǔ)器空間工作于TMR模式,大于該地址的存儲(chǔ)空間工作于擴(kuò)展?jié)h明碼模式。
本電路采用軟件故障注入法來(lái)進(jìn)行電路的有效性驗(yàn)證,所以,在電路設(shè)計(jì)中,可將模式配置寄存器的其余14位用于注入外部干擾數(shù)據(jù),并將其連接到ctrl_err與add_err信號(hào),以用來(lái)進(jìn)行軟件故障的注入,模擬SEU對(duì)電路的影響。
4.4 控制邏輯模塊
該模塊可接收模式選擇模塊的模式信號(hào)mode,以對(duì)TMR模塊和擴(kuò)展?jié)h明碼模塊輸出的讀寫(xiě)信號(hào)和片選信號(hào)進(jìn)行選擇,然后輸出到RAM芯片的引腳上去,從而實(shí)現(xiàn)CPU對(duì)RAM的正確訪問(wèn)。尤其是當(dāng)電路工作于擴(kuò)展?jié)h明碼模式時(shí),還需根據(jù)地址信號(hào)判斷當(dāng)前對(duì)哪個(gè)124 Kx (16+8)bit的存儲(chǔ)空間片選有效。其具體電路如圖5所示。
評(píng)論