讓一顆SRAM型FPGA在太空長期穩定運行的難度,就類似練成獨孤九劍的難度。
SRAM型FPGA的抗輻照加固設計包括芯片工藝、Die加固和芯片應用層面加固。本文主要討論芯片應用層面的加固方法,包括外置刷新和FPGA內部軟件抗輻加固。
今日登壇做法,貧道首先從FPGA資源角度來介紹不同資源對應的解決辦法,更清楚的表明外置刷新和三模冗余是解決SEE的有效辦法。然后從解決辦法到解決措施,講具體是如何去實現刷新和三模冗余。最后是介紹如何驗證刷新是否有效,如何驗證三模冗余是否有效。
圖1 SRAM型FPGA的抗輻照加固設計
01
SRAM型FPGA的資源及其發生SEU故障分類
如表1所示,SRAM型FPGA資源包括配置SRAM,內部的塊RAM(BRAM),觸發器CLB DFF,全局時鐘網絡,DSP和高速串行接口GT。每種資源都有其特點和對應SEU解決辦法。
表1 SRAM型FPGA的資源及其發生SEU概率說明
1.1?配置SRAM(CRAM)
CRAM的特點占芯片面積達到30%,發生SEU的概率很大。由于CRAM里面含有很多無效位,因此CRAM發生SEU可能不會導致FPGA功能異常。但是隨著時間的累積,越來越多的CRAM發生SEU,那么FPGA功能一定會錯。這種累積錯誤可以通過刷新Scrub來解決。
有兩點值得注意,第一個是累積錯誤是在刷新周期的下一個周期解決,在用戶時鐘周期內該累積錯誤可能被時序電路捕獲,提升刷新頻率有助于緩解該問題。第二個是即使累積錯誤是在刷新周期的下一個周期解決,累積錯誤帶來的時序邏輯錯誤也可能沒有辦法恢復。
因此僅僅使用刷新的方法是不能解決CRAM的SEU所帶來的功能異常問題,推薦刷新+三模冗余的方法來提升FPGA可靠性。
圖2 CRAM SEU帶來的時序邏輯錯誤
DRP CRAM指的是用戶可以使用的CRAM資源,包括分布式RAM、移位寄存器SRL、MMCM/DCM/PLL DRP參數、高速串行接口Serdes DRP 參數等。DRP CRAM一般不能被刷新,因為一旦刷新就會恢復成初始值,影響用戶功能。但是如果DRP CRAM的值是固定不變的,那么則可以通過刷新來進行加固。
1.2?BlockRAM
FPGA內部含有大量的BlockRAM資源,占芯片面積也比較大,而且無法刷新。如果BRAM發生了SEU那該怎么辦呢?
如果BRAM用作SRAM緩存或者FIFO緩存且允許出錯的情況下,那么BRAM可以不做加固,不允許出錯或者可靠性有要求的情況下,BRAM也可以進行加固。如果BRAM用作儲存ROM程序,那么BRAM就必須進行加固。
BRAM錯誤屏蔽加固的方法包括ECC和TMR,這兩種方法無法修復錯誤本身。ECC基于SECEDC糾一檢二碼只能糾正SBU錯誤,無法糾正錯誤累積導致的MBU。TMR無法解決錯誤累積導致的TMR兩份以上同一地址同一位同時失效的問題。
BRAM錯誤修復加固的方法包括ECC回寫和TMR回寫,可以部分或者完全糾正錯誤數據并回寫正確數據。ECC回寫基于Read-Modify-Write機制可糾正SBU數據并回寫正確數據。TMR回寫基于確定性方式掃描RAM存儲空間,可糾正并修復SBU/MBU數據錯誤,避免數據錯誤累積,可靠性最高。
圖3 系列FPGA BRAM不同加固方案翻轉數據比較
1.3?CLB DFF
觸發器的有效加固方法是三模冗余,根據可靠性高低,細分為“3Reg+3Voter”,“3Reg+1Voter”和“3Reg”三種。
流水寄出器如果允許短暫出錯,那么可以不做加固,需要增強可靠性可以選擇“3Reg+1Voter”或“3Reg”。
圖4 TMR-“3Reg”
圖5 TMR“3Reg+1Voter”
Feedback Loop Register特別是狀態機,可靠性要求很高,推薦采用“3Reg+3Voter”。
圖6 “3Reg+3Voter”
防止TMR中兩路Reg同時翻轉,還可以采用物理隔離的方法,簡單有效的方法一是時鐘網絡做三模,那么兩路Reg由于時鐘網絡不一樣,會被放在不同的Slice中去。方法二是使用Area Group約束,UCF中的寫法如下:
圖7 Area Group約束解決MBU問題
1.4?高速串行接口SerDes
Serdes的加固方案比較復雜,篇幅有限,主要說明一下Serdes里面的參數該如何加固。Serdes里面的參數特別多,而且很多都是可動態配置的,屬于DRP CRAM。
當發現Serdes功能異常的時候,設計師可以通過用戶邏輯對DRP CRAM進行重配置,然后對Serdes進行復位操作來恢復功能。
02
SRAM型FPGA SEU解決措施
2.1?外置刷新芯片方案
圖8 外置刷新方案
刷新分為外部刷新和內部刷新,關于兩者比較細節,將在后續的文章中進行描述。今天主要介紹外部刷新方案,通常用外置專用刷新芯片或者反熔絲FPGA來實現外部刷新。
專用刷新芯片必須是抗輻照的,優點是刷新和重構功能已實現、設計簡單。反熔絲FPGA的優點是可以實現用戶自定義的功能。反熔絲FPGA的缺點設計復雜度高,PCB面積大,而且一次燒寫增加了設計風險。
值得一提的是聽說最近國內出了一款專用刷新芯片,功能比較強大,支持各種系列的FPGA,支持大容量存儲器,支持1553B、CAN等多種重構接口,而且還能實現用戶自定義的功能,可以說是業界佼佼者。
2.2?FPGA軟件抗輻照加固設計方案
抗輻照加固軟件設計的主要功能是實現三模冗余,實現過程可分為代碼層面和網表層面。下面就兩個不同的層面進行設計的優缺點進行說明。
代碼層面大體有兩種具體的做法:
第一種是設計師把關鍵的模塊代碼復制三份+表決器,這種方法的優點就是簡單和靈活。缺點是模塊越多設計效率越低,模塊越大可靠性越低以及TMR代碼存在被工具優化的可能。
第二種做法是借助第三方的EDA工具,可以解決可靠性低和代碼被優化的問題,能提高設計效率,但是由于面向的是代碼層面,對IP的加固沒有辦法實現,支持的應用場景受限。第三方的EDA工具更合適的定位應該是一種輔助,幫助設計師完成最終的設計,不能完全交給其來實現。
網表層面加固借助專用的高可靠設計軟件,這種方法的優點是能夠面向所有的應用場景。由于網表層面能夠進行細粒度的三模冗余,而且加固后不會被優化掉,因此可靠性最高。高可靠設計軟件的EDA效率、部分三模冗余的支持能力與主流的FPGA EDA軟件的兼容程度,大體這三個方面會決定整個設計流程可實現性、效率和用戶體驗度。高可靠設計軟件做的好的話,那整個加固設計可以完全交由其來實現,工程師會覺得福利滿滿。
圖9 網表層面實現加固設計
03
SRAM型FPGA SEU解決措施效果驗證
3.1?刷新有效性驗證
3.1.1)Verify操作:
通過JTAG執行Verify操作可以知道FPGA里面的位流和Golden位流是否一樣,是很常見的驗證手段。要執行Verify操作,首先在生成位流的時候,得在settings里面勾選-mask_file。
圖10 mask文件生成方法
選中device右鍵verify_device,執行完在Tcl_console看日志。
圖11 執行verify device操作
圖12 verify驗證位流正常
圖13 verify驗證位流錯誤
完整的驗證刷新有效的過程,首先執行一次verify操作確認加載是成功的。然后通過故障注入工具注入錯誤,執行第二次verify操作可以看到verify結果報錯。接著執行完刷新操作,第三次執行verify操作可以看到verify結果正確。
3.2?三模有效性驗證
3.2.1)網表級功能仿真
三模后的網表功能仿真結果應該和三模前的網表仿真結果一樣。如果結果不一樣,結合仿真也可以找到出問題的地方,迭代三模設計。
高可靠設計軟件會在軟件層面做大量的案例測試,保證形式驗證結果一樣,功能仿真結果肯定也一樣。
在Vivado中執行仿真的方法如下:
首先open the synthesized design,然后再tcl console中輸入:
3.2.2)網表ECO功能驗證
Vivado IDE ECO:
圖14 Vivado ECO流程
Vivado軟件的ECO功能很強大,不再一一描述了。驗證三模功能是否有效,可以簡單修改TR0電路里面LUT里面的值,這樣行為和TR1/TR2不一樣,但是通過多數表決器Voter,輸出結果還是正確的。
ISE: FPGA_EDITOR
修改網表編輯模式為Read Write;
通過IO觀測內部信號;
通過ncd2xdl和xdl2ncd命令修改ILA觀測內部信號;
快速生成bit文件,驗證功能。
圖12 FPGA editor的使用
戰術總結
抬眼望去,對面零星的幾盞燭火也熄滅了,又是連肝幾個晚上,給各位兄弟姐妹分享了SRAM型FPGA加固的措施,目前從實際效果上來看,外置刷新和三模冗余仍是目前解決SRAM型FPGA SEU的有效辦法。
審核編輯:劉清
評論
查看更多