?

基于FPGA 硬件的單粒子翻轉模擬技術

2021-09-20 10:26施聿哲白雨鑫
數據采集與處理 2021年4期
關鍵詞:故障注入觸發器腳本

施聿哲,陳 鑫,陳 凱,白雨鑫,張 穎

(南京航空航天大學電子信息工程學院,南京 211106)

引 言

隨著制造工藝的發展,集成電路特征尺寸減小,改變電路工作狀態所需要的能量閾值呈幾何級下降趨勢,使得集成電路更容易受到輻射照射的影響[1]。地球外層空間為強輻射環境[2],給航天設備中集成電路的正常運作帶來了極大的挑戰。輻照對集成電路可恢復性故障中最主要的影響為單粒子翻轉(Single event upset,SEU),表現為存儲單元中的比特位翻轉。因此,評估集成電路對SEU 的敏感性至關重要。

通常采用故障注入技術來模擬宇宙空間環境中SEU 對集成電路的影響,其中最經典的方法是將電路暴露在模擬的空間輻射環境中進行故障注入[3?4],以獲得與實際輻射環境下最為接近的實驗數據。但是這種方法存在損害電路的風險,且測試成本十分昂貴,通常只有在電路設計的最終測試階段才會采用?;谲浖抡娴墓收献⑷爰夹g則是輻射測試的有效替代方法。它支持多種類型的故障模型,實現方式非常靈活。文獻[5]提出了一種基于TCL 腳本在網表級電路中注入故障的方法,但是軟件仿真的時間開銷非常大,并不適用于超大規模集成電路(Very large scale integration,VLSI)輻射性能的評估。

現在廣泛采用基于FPGA 的硬件模擬技術的故障注入方法。FPGA 硬件模擬速度很快,能夠滿足VLSI 電路的評估需求,此外FPGA 還具有良好的可控性和可觀察性。此類方法又分為重配置和旁路注入。重配置首先回讀配置存儲器的比特文件,然后修改部分配置內容以模擬單粒子翻轉,再重新寫回配置存儲器[6?8]。該方法基于FPGA 的內部專用端口實現,沒有額外的資源開銷。但是重配置功能高度依賴FPGA 硬件的支持,比特文件配置FPGA 所消耗的時間很容易成為故障注入速度的瓶頸。旁路注入最常用的方式是復用掃描鏈,其故障注入速度可達到微秒級[9?10],相比重配置快了多個數量級,而且易于實現,可通過腳本直接在原始電路中插入。但復用掃描鏈是將故障經由掃描鏈串行移位至目標寄存器,該過程會增加非常明顯的時間開銷。另一種方式是修改觸發器結構[11?12]。文獻[11]通過修改FPGA 內建庫中構成電路的基本單元使電路具備故障注入功能,該方案理論上可達到的故障注入速度最快。但是重建庫是十分耗時的過程,需要將原始器件庫中的觸發器、RAM、邏輯門和乘法器等所有單元進行替換,而且器件庫和測試平臺是緊密聯系的,測試平臺的升級或者更替可能導致器件庫無法使用,因此技術的遷移性較差;所有寄存器單元還需要添加獨占式的故障輸入信號加以控制,硬件資源占用率非常高。文獻[12]通過對網表中所有的觸發器添加額外的組合邏輯和端口來注入故障,故障注入可以即時響應,所以注入速度相比掃描鏈更快,但該方案修改后的電路中每個觸發器需添加3 個查找表,額外的資源開銷也很大。

本文提出了一種基于旁路注入技術的快速故障注入方法。該方法可通過腳本自動化分析基于硬件描述語言編寫的寄存器傳輸級(Register transfer level,RTL)超大規模集成電路設計,并修改電路結構使之能夠從旁路注入故障,結合仿真結果證明腳本可適用于任意規模電路。同時巧用時分復用機制保證腳本修改后的電路的原始功能不受影響。腳本實現電路修改的過程簡單,耗時少,修改后電路增加的硬件資源開銷相對其他技術方案也較低,適用于VLSI 的評估。實驗結果證明了其故障注入速度可以達到納秒級別,具有優越的故障注入速度,在實際應用中具有不錯的前景。

1 旁路注入關鍵技術

旁路注入原理是在原有的設計基礎上,通過添加額外的組合邏輯,使待測電路具備故障注入功能。

1.1 旁路注入故障的單觸發器結構

原始觸發器結構和旁路注入觸發器結構分別如圖1(a)和圖1(b)所示。enable 控制電路是否處于故障注入模式:enable 處于有效狀態時,電路處于故障注入模式,故障數據(Faulty data)會輸出到觸發器的輸入端;否則,enable處于無效狀態,電路處于正常工作模式,原始數據(Data)送給觸發器采樣。

圖1 單觸發器結構Fig.1 Structure of flip?flop

故障數據的類型由故障類型選通信號組決定,該信號組有3 根信號線,分別是單比特翻轉(Reverse)、單比特固定1(Stuck?at?1)和單比特固定0(Stuck?at?0),且在同一時間只有一根信號線有效。為了降低故障數據產生電路的資源開銷,本文巧妙地利用了四輸入查找表(LUT4)的內部結構,將正常數據和故障類型選通信號作為查找表的輸入,并將對應故障類型數據作為輸出,因此只需1 個查找表即可完成故障數據的產生。

1.2 任意觸發器故障注入流程

VLSI 電路中觸發器數目眾多,需要逐個標識,以實現對指定的任意觸發器進行故障注入操作。任意觸發器故障注入流程如圖2 所示。首先遍歷電路所有模塊中的觸發器,然后依次分配唯一的ID 編號。故障注入時,首先根據ID 確定待注入故障的觸發器,使能該觸發器的en?able,然后選擇故障類型產生錯誤數據,在觸發器采樣時注入故障數據。其余未匹配的觸發器仍舊正常工作,不受故障注入過程的影響。此外,通過該故障注入流程可以對任意電路進行任意位置的故障注入,不受電路規模限制。

圖2 任意觸發器故障注入流程Fig.2 Fault injection process of arbitrary flip?flop

1.3 時分復用機制

由于觸發器只在邊沿采樣數據,對時序有很高的要求,這給故障注入帶來挑戰。此外,故障注入時也不能影響處于正常工作狀態的觸發器。為了確保能夠穩定可靠的注入故障,本設計采用時分復用機制。將時間劃分為故障注入時間clk_div1 和正常運作時間clk_div2。在clk_div1 下執行故障注入;在clk_div2下執行電路的原始邏輯。

圖3 所示的是時分復用機制下,單比特翻轉故障的注入過程。t1時刻ID 匹配觸發器,enable 變為有效狀態;t2時刻故障類型輸入為reverse,因此觸發器的輸出發生了翻轉。此外,若clk為系統設定頻率的兩倍,還可保持電路原有的數據吞吐率。

圖3 時分復用機制Fig.3 Time division multiplexing mecha?nism

2 自動化處理腳本設計

本章介紹如何通過腳本編程,對RTL 級的設計代碼進行再處理,實現旁路注入故障相關操作。所有工作均通過腳本自動化執行,電路分析時間開銷小,且不受電路規模的限制。

2.1 提取觸發器的腳本設計

提取觸發器的腳本流程分析過程如圖4 所示。首先檢索待測電路中所有的觸發器,檢索依據是所有觸發器均需要基于關鍵字reg 進行定義。檢索后進一步文本處理可以得到觸發器的名稱和其對應的位寬。其次是過濾邏輯類型。SEU 影響的是電路的時序邏輯,所以只需處理時序邏輯的語句塊。檢索依據是基于時鐘邊沿的關鍵字(posedge 和negedge)。然后從觸發器隊列中移除非時序邏輯的觸發器。最后還需要過濾冗余觸發器,通常包括定義后卻未使用的觸發器。處理后的觸發器列表再根據觸發器位寬分配一定的ID 范圍,再加上控制時鐘、所屬模塊等相關信息即可輸出完整正確的觸發器列表。

圖4 提取觸發器的腳本流程Fig.4 Script flow of flip?flop ex?traction

2.2 旁路注入邏輯的腳本設計

旁路注入邏輯的腳本偽代碼如算法1 所示。首先遍歷所有的時序邏輯塊,檢索每個邏輯塊中的觸發器變量以及分配的ID 范圍,然后將表1 中第1 行到第6 行的旁路注入相關邏輯插入到對應時序邏輯塊中,將原始邏輯放在第7 行else 的分支中。最后,在輸入輸出端口聲明處添加ID 和故障類型選通信號作為輸入端口。

算法1旁路注入邏輯偽代碼

(1)if ID matched then

// 觸發器ID 匹配

(2)if reverse then // 單比特翻轉

(3)D ←~D

//觸發器的數值翻轉

(4)else if Stuck?at?0 then //單比特固定0

(5)D ←0

//觸發器數值變為0

(6)else D ←1

//觸發器數值變為1

(7)else D ←D //原始邏輯

2.3 時分復用邏輯的腳本設計

單比特觸發器加入旁路注入邏輯比較簡單,可以直接通過if?else 的分支語句實現。但對多比特觸發器而言,通過分支語句對多比特觸發器某一位注入故障會導致該觸發器的其他位也無法正常工作。為此,本文巧妙地設計時分復用機制,在時間上錯開故障注入過程和電路正常工作過程。時分復用邏輯偽代碼如算法2 所示。

算法2時分復用邏輯偽代碼

(1)if(clk_div1 ==1)then //故障注入時間

(2)故障注入

(3)else 執行正常邏輯//正常運作時間

進一步設計電路來驗證腳本功能的正確性,選擇1 位寄存器來實現產生方波信號的電路。將設計的HDL 模型通過腳本處理,處理前后的邏輯如圖5 所示。

圖5 腳本插入故障邏輯前后對比Fig.5 Comparison of the original logic and the modified logic

圖5(b)中的err_data 代表故障數據,可通過組合邏輯實現。組合邏輯的表達式為

式中:Y表示2.3 輸出的故障數據;X表示當前觸發器的數值;A、B、C分別代表3 類故障(單比特固定0,單比特固定1 和單比特翻轉)。邏輯功能和門級電路的設計相吻合,在ID 匹配時對目標觸發器注入故障,且在任意時刻只能有一種故障類型有效。

3 實驗結果

3.1 仿真驗證

為驗證腳本功能的正確性,本文選取經過腳本處理后的4 比特循環計數器作為待測電路進行測試,從低位到高位依次分配ID(1~4)。對ID 為1 的觸發器cnt[0]在某一時刻注入一次故障,以單比特翻轉reverse 為例,仿真波形結果如圖6 所示。

從圖6 可見,當ID 為0 時,此時無觸發器被選中,電路處于正常工作狀態;當ID 為1 時,cnt[0]被選為故障注入對象,該觸發器進入故障注入模式。隨后在clk 的上升沿,檢測到故障類型輸入reverse 有效,此時對觸發器注入一次故障,使得cnt 的計數值從7 跳變為了6。進一步觀察,可發現計數器值發生改變的原因是cnt[0]的值從1 變為了0,而cnt 的高三位仍保持正常狀態。由此可驗證腳本的自動化流程可以使電路具備正確的故障注入功能。

圖6 故障注入仿真Fig.6 Fault injection simulation

3.2 板級測試

為進一步驗證本文提出的設計方案對于復雜電路系統的適用性,采用經典的MIPS 32 位處理器的測試電路進行實測[13]。測試平臺為Xilinx 的Zynq[14]xc7z035ffg676?2 SoC。整個測試系統的框架如圖7 所示。

首先由PC 配置故障參數給Zynq 的PS 端,參數主要包括ID 和故障類型。然后PS 端根據參數產生故障向量并下發給PL 端的故障注入控制器,其中故障向量不僅包含了PC 配置的基本參數,還包含了執行次數和故障注入時間等信息。實驗時參考設計和待測設計同時執行一個運算程序,故障注入控制器在執行過程中對待測設計注入故障,隨后由故障監控器比較二者的運算結果,如果結果不一致則判定錯誤發生,并將結果保存到存儲器,最后由PS 讀取故障結果數據。

實驗從資源開銷和速度兩方面來評估性能。在資源開銷方面,處理器主要分為取指、譯碼、執行、存儲和寫回5 個模塊,故只需對這5 個模塊的原始資源和修改后的資源開銷進行對比,具體如表1所示。

表1 原始邏輯和修改后的邏輯資源開銷對比Table 1 Comparison of resource cost between the original and modified logics

可見修改后電路總共消耗的LUT 增加了69.8%,觸發器的開銷幾乎沒有增加。寫回模塊不含有觸發器,腳本處理前后沒有變化。而文獻[9]使用掃描鏈處理類似規模電路(觸發器數目為418,LUT 為2 322)時,觸發器的開銷增加130.1%~360.8%,LUT 增加的開銷為42.8%~237.9%;文獻[10]的掃描鏈在處理電路(觸發器數目為530,LUT 為1 543)時,觸發器和LUT 增加的開銷分別為33.9% 和29.1%;文獻[11]采用修改內置庫的方式處理電路(觸發器數目為3 991,LUT 為3 482)增加了1.5 倍的LUT 資源;文獻[12]使用旁路注入處理小規模電路(觸發器數目為119,LUT 為362)增加了143.1% 的LUT。比較后可發現本文方案的資源開銷相比大多數方案較小,對測試平臺的要求較低。

考慮到工藝的發展以及電路規模的增大,以一定的面積開銷來換取快速故障注入的實現是可以接受的。

在速度性能方面,實驗設定為每個時鐘周期都對選定的某個觸發器注入故障,可計算系統的最快故障注入速度。測試覆蓋全部1 712 個觸發器,參考設計工作頻率為100 MHz,待測設計由于時分復用需將頻率設置為200 MHz。測試結果如表2 所示,其中模擬時間包括電路執行程序,測試向量的配置和下發以及數據分析的全部開銷。雖然PS 平均每次生成和發送測試向量產生了5.96μs 左右的開銷,但故障注入速度依然達到6.8 ns/故障,非常接近系統的工作頻率。其中生成每個測試向量所需時間為定值,如果待測電路的執行時間越長,系統等待新測試向量的開銷就更小,故障注入速度也會越快。

表2 故障注入測試結果Table 2 Fault injection test results

進一步比較本文所提及的其他故障注入技術,對速度進行對比,結果如表3 所示。

表3 速度性能對比Table 3 Speed performance comparison

由于各類方案的待測電路規模、執行時間和時鐘頻率各不相同,表3 中新增了故障注入速度(歸一化為ns)和時鐘頻率(ns)的比值以便于直觀比較,比值越小說明故障注入速度和電路的工作頻率越接近,相對更快。文獻[9,10]雖然注入方式一致,但文獻[9]優化了故障注入機制,減少了主機和測試平臺的交互,因此具備速度優勢;文獻[10]則通過串口傳輸故障激勵,造成時間開銷太大?;趻呙桄湹姆绞较鄬τ诒疚姆桨冈谒俣刃阅苌先耘f存在明顯差距。文獻[11]的故障注入方式雖然較快,但測試平臺中包含兩塊FPGA,其中一塊用于和主機的數據通信和故障檢測,另一塊用于實現故障電路,二者通過接口相連,導致整體數據鏈路過長,造成速度不理想。同理,文獻[12]雖然采取和本文同樣的實現方式,但故障激勵的傳輸開銷太大,導致速度偏慢。本文通過網口傳輸故障配置參數,PS 自動生成故障激勵,減少了和主機的通信頻率,并通過AXI 總線傳遞給PL,顯著縮短了故障向量的傳輸開銷,降低了系統的等待時間。數據結果表明,本文技術方案的故障注入速度相比現有的方案高了2~3 個數量級。

4 結束語

本文提出了一種適用于VLSI 電路的快速故障注入方法,通過腳本自動完成電路分析和旁路注入故障邏輯的修改。最后選取復雜的微處理器設計驗證性能,實驗結果表明,本方法故障注入速度可以達到108個故障/s,可滿足超大規模集成電路的單粒子效應故障注入的模擬需求。

猜你喜歡
故障注入觸發器腳本
酒駕
模擬訓練裝備故障注入系統研究
嵌入式系統故障注入技術研究
Multisim13仿真軟件在觸發器中的應用分析
安奇奇與小cool 龍(第二回)
一種多類型總線故障注入系統設計*
觸發器在酒店管理系統中的應用
自動推送與網站匹配的腳本
某型自動裝彈機故障注入系統研究
幾種常見觸發器工作方式的討論
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合