?

基于Qt的Verilog故障注入工具設計與實現

2019-01-30 02:23康俊杰于健海
實驗技術與管理 2019年1期
關鍵詞:分析器故障注入標識符

王 潔, 康俊杰, 侯 剛, 于健海

(1. 大連理工大學 軟件學院, 遼寧 大連 116620; 2. 遼寧省泛在網絡與服務軟件重點實驗室, 遼寧 大連 116620; 3. 梧州學院 電子與信息工程學院, 廣西 梧州 543002)

電子產品在復雜多變的應用環境中發生故障的可能性增大,微處理器的可靠性和穩定性受到極大挑戰[1-2]。容錯技術能夠有效保障微處理器的可靠性,但如何驗證容錯技術的有效性則是需要研究的問題[3-4]。故障注入是一種靈活、方便且易于操作的有效驗證容錯的技術,通過對電路注入故障,能夠反饋微處理器注入故障后的反應,設計人員可記錄故障數據并分析處理,最終用于評價容錯機制的可靠性[5-7]。本文提出了基于Qt的Verilog故障注入工具VBFIT的設計方案,利用VBFIT可以實現Verilog HDL代碼的掃描,通過語法語義分析對寄存器變量精確定位,用戶能夠根據自己的需求選取變量并對微處理器進行故障注入,以研究容錯技術的可靠性。

1 總體框架設計

電路的模擬故障注入主要有2種方式:一是通過仿真器命令進行故障注入,這種方式易于實現;二是改變源代碼,從模型內部生成故障,這種方式較為復雜,但能夠實現更多故障模型[8-9]。為了滿足設計人員研究微處理器容錯性能需求,VBFIT通過掃描Verilog設計源文件直接對源代碼注入故障,具體功能如下:

(1) 源代碼掃描分析:掃描整個Verilog工程文件,獲得每個模塊中的變量定義以及例化關系;

(2) 故障注入:根據使用者選擇的故障點自動修改設計源文件;

(3) 圖像顯示:以圖像化的方法顯示故障注入的效果,并對結果進行分析。

故障注入工具主要分為2部分:(1)用于提供與用戶交互的界面程序;(2)用于處理原工程文件、輸出新的工程文件的后臺執行程序。VBFIT工具總體框架設計如圖1所示。

圖1 總體框架設計

用戶選擇需要故障注入的工程后,界面程序將該路徑傳送給后臺程序,后臺程序將該文件路徑進行掃描,通過語法語義分析器對Verilog源文件進行解析,并將每一個故障注入點以語法樹的形式展現給用戶。用戶輸入故障注入參數后,通過故障注入管理器,利用故障注入宏對源文件進行故障注入,生成新的工程文件。對新生成的工程文件進行模擬仿真,分析結果后反饋給用戶,用于容錯性能的評價。

2 功能模塊設計

從總體框架設計可以看出,VBFIT主要是由圖形界面、語法語義分析器以及故障注入管理器等功能模塊組成。

2.1 VBFIT圖形界面

圖形界面主要用于與用戶交互,以圖形化界面向用戶展現工程文件的故障注入過程。通過圖形界面,用戶可將整個Verilog工程文件導入VBFIT工具,經過語法語義分析器處理后對用戶展示可進行故障注入的每個位置。用戶通過故障注入管理器輸入故障參數,即可完成故障注入,最終生成新的源文件,用于容錯性能測試。表1為圖形界面的功能說明。

表1 VBFIT圖形界面各模塊的功能

2.2 語法語義分析器

語法語義分析器主要對Verilog文件進行解析,確定各個module間的層次關系,生成模型的語法分析列表,建立每個基本元素的語法樹,最終得到所有可能的故障注入點。

以簡單的Verilog語法語義分析器為例。該分析器并不對Verilog語言進行錯誤檢查和編譯,而只是對原文件進行掃描。識別器中可以注入故障的模塊、寄存器、線網等基本電路元件,從而建立整個注入對象的語法結構樹。

語法語義分析器包括代碼掃描,保留字識別,標識符的識別、添加和修改、變量屬性獲取等4個子功能。為了保證對Verilog HDL靈活的語言規則的適配度,代碼掃描功能采用了按字符掃描的方法,利用正則表達式、非確定性自動機(NFA)對Verilog HDL進行描述[10-12]。

Verilog代碼中的保留字、標識符和空白的正則表達式定義如下:

Reservedword=module| if | while | for | always@ | output | input | endmodule | initial | begin |end | reg | wire | parameter | assign |

Letter = [a-zA-z]

Digit = [0-9]

Identifer = (Letter | _ )(Letter | Digit | _)*

Whitespace = (newline | blank | tab |comment)+

將識別到的元素名稱存在符號表中,用于識別各個元素之間的層次關系。根據分隔符和空白格對掃描到的單詞進行判斷(是否為關鍵字、標識符、數字等);保留字和標識符的識別功能通過容器(vector)類進行實現,通過對兩個容器的增、刪、改、查,對保留字和標識符進行添加、識別和修改;變量屬性的獲取主要是通過對已定義的標識符進行識別,然后再進行對單個標識符的屬性修改,對于新定義標識符,會有相應的默認屬性。根據掃描結果建立語法樹,并通過圖形界面展示給設計人員用于故障注入。

2.3 故障注入管理器

如圖2所示,故障注入管理的主要功能是獲取故障注入節點,與用戶交互故障模型、故障周期、故障位等參數,并將參數傳給底層函數,再利用底層函數將該故障精準注入。

圖2 故障注入管理器工作原理

在故障注入管理器圖形界面,用戶可設置故障注入的參數有故障位、故障模型(置1,置0,翻轉等)、故障注入周期等。用戶收到Verilog語法語義分析器返回的數據后,根據該數據選擇故障需要注入的位置,同時設置故障注入的周期和所注入的故障模型。將該數據提交給故障注入管理器后,管理器會判斷用戶提供的參數是否合法,如不合法(數據位不存在,或缺少相關參數等),將提示用戶重新提交參數。

3 實驗結果和分析

VBFIT工具是基于Qt平臺開發的,整個程序功能部分代碼使用C++語言開發。C++語言中特有的類定義及文件操作功能,可以方便對源代碼進行掃描分析并存儲信息。為保證將工程的詳細信息輸出給用戶,主窗口采用了多呈現區域的設計,分別將模塊、代碼、變量在3個區域分別用樹狀圖、文本框、列表方式顯示給用戶。

進行故障注入的實驗對象為四位全加器,利用Xilinx公司的ISE開發套件生成四位全加器的Verilog源代碼,將源代碼導入VBFIT中進行故障注入,生成新的源代碼。

四位全加器原始代碼

always@(posedge clk or negedge nrst) begin

if(!nrst)

begin

en_tmp <= 4’hE;

end

else

begin

en_tmp <= {en_tmp[2:0],en_tmp[3]}; end end assignen = en_tmp; endmodule

新生成的四位全加器代碼如下:

//A BIT_FAULT INJECTED count <= count + 1; if(count ==12) begin en_tmp <= ({en_tmp[2:0],entmp[3]})^(1<<2); end else begin en_tmp <={en_tmp[2:0],entmp[3]}; end end end assignen = en_tmp; endmodule

在進行故障注入時,選擇對en_tmp變量的第3位、在第12個時鐘周期發生位翻轉故障,該部分代碼與未進行故障注入時的代碼進行比對,發現在聲明部分首先添加了一個周期計數器count,用來計算代碼注入的周期;在原來en_tmp的賦值語句處進行了代碼重構,使原變量的值根據故障類型進行重新運算,從而達到故障注入的目的。

為對比顯示故障注入效果,將兩個工程文件進行模擬仿真,得到仿真波形圖(見圖3和圖4)。

圖3 未故障注入時的模擬波形

圖4 故障注入后波形

從圖3中的波形可知,在第17個周期,系統輸出結果為6+7的數值,s值為13正確;從圖4可以看出,注入故障后,在第12個時鐘周期,en_tmp的值發生了錯誤,本應為0111,卻為0011,第三位發生了位翻轉故障,同時第17個時鐘周期輸出的6+7的計算結果為5是錯誤的,證明了VBFIT實現了有效的故障注入。

4 結語

本文基于Qt平臺設計了VBFIT故障注入工具,通過對Verilog HDL代碼的掃描,能夠實現簡易的語法語義分析,得到各個信號和寄存器的語法樹,并以圖形化的方式展示給用戶。通過故障注入管理器,用戶可以實現對信號的精確故障注入,滿足用戶多種故障注入需求,從而實現對電路容錯機制的可靠性測試與評價。對于復雜的工程文件,需要加強對原代碼的實現能力,自動識別更多種語法結構,同時也需要增加更多功能,更好地滿足用戶的需求。

猜你喜歡
分析器故障注入標識符
基于底層虛擬機的標識符混淆方法
模擬訓練裝備故障注入系統研究
基于區塊鏈的持久標識符系統①
酒精分析器為什么能分辨人是否喝過酒
SM4算法前四輪約減輪故障注入分析
一種多類型總線故障注入系統設計*
多邊形電極線形離子阱質量分析器的結構與性能
應用于詞法分析器的算法分析優化
列車MVB總線故障注入研究
科研人員唯一標識符的理論研究現狀剖析
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合