• 沒有找到結果。

錯誤注入流程

在文檔中 中 華 大 學 (頁 42-45)

第四章 錯誤注入方法開發

4.1 錯誤注入流程

由於我們現在所面對的是一個系統平台,而不是單一的硬體平台,並且我們 主要採用的是事件驅動的錯誤注入方法,因此在正式進行錯誤注入的模擬之前我 們會對此系統平台進行一次完整性或是條件式的資料收集。所謂的條件式資料收 集主要是針對已經確定啟動條件組合的使用者而用,透過這種方式我們只需要收 集其事件相關的資訊以精簡資料收集時的資料量和時間。之所以會進行此動作主 要是將收集的資訊作為錯誤注入時的啟動條件,其流程圖如下圖 4-1。

圖 4-1 錯誤注入流程圖

如上圖所示,第一步驟會先進行資料的收集稱之為 Operational Profile,收集 完的事件會被步驟二作為錯誤注入的啟動條件。在判別是否啟動錯誤注入的運作 中首先會進行核對來確認是否該啟動錯誤注入程序,假使目前的條件就是錯誤注 入的啟動條件的話,錯誤注入模組便會進行錯誤的注入。當錯誤注入結束後會交 由下一個程序來判斷此錯誤是否屬於持續性的錯誤類型,是的話便會再下一次此 零件運作時進行錯誤注入,否的話則會是再次進行判斷是否有啟動錯誤注入的事 件,若是沒有的話則會交由最後的一項程序判斷此次模擬是否結束,結束後資料 收集零件便會將結果進行收集並做為分析時的依據。以下我們將各別對步驟一與

步驟二的方法進行講解:

步驟一:

步驟一主要是進行資料的收集,此步驟主要是透過一顆資料收集模組 Operational Profile Module (OPM) 來進行資料收集,此模組主要是將交易器為主 體加上資料收集功能後衍生出的零件其架構如圖 4.2(b)。此零件在交易器原有的 協定轉換之上加入了一些事件以及資料收集的程序,後面的錯誤注入模組也都是 以交易器為基礎所衍生出來的特殊用途零件,以便我們能進行完整的錯誤注入實 驗,圖 4.3 為此方法的虛擬程式碼 (pseudo code)。

圖 4-2 錯誤注入模組及其架構圖

由左到右分別是 4.2 (a)Transactor、4.2(b)OPM、4.2(c)FIM

while(1) {

int Master_ID; //所需資訊

fstream Operational_profiler_1(“Data1.txt”,ios::app); //將資料寫到對應檔案 fstream Operational_profiler_2(“Data2.txt”,ios::app); //將資料寫到對應檔案 port.getReadDataTrf(); //判斷是否有Read Data的Transfer 進行

Master_ID =port.getMasterId(); //取得目前使用bus的Master ID if(Master_ID == 1){

Operational_profiler_1<< port.getAddress()<<endl; //得到Address的資料

} //並寫入檔案

if(Master_ID == 2){

Operational_profiler_2<< port.getAddress()<<endl;

}

Protocol transform(); //將AHB slave端的protocol 轉成 PV send Transfer(); //呼叫set/get Read data的function Operational_profiler_1.close();

Operational_profiler_2.close();

wait();

}

圖 4-3 資料收集模組的虛擬程式碼

上圖所示的虛擬程式碼主要功能是將系統運作時不同主人端元件的位址資

訊分別儲存,透過不同的 Master_ID 我們能夠得知此次傳輸時的位址資訊是屬於 哪個主人端的。由於一個系統會有多顆零件而同一顆零件也可能擁有多種不同的 埠 (port),其中更是包含主人端或是僕人端,因此我們在進行第一步驟的資料收 集時就直接將資料分類動作也包含在其中,以此來提供錯誤注入啟動條件的設定 者有更明確的啟動條件,更能作為接下來故障模式分析時重要的分析資訊。

步驟二:

此部分主要就是進行錯誤啟動條件的比對及錯誤的注入,其架構圖如圖 4.2(c),此零件也是以交易器為主所衍生出的錯誤注入專用零件,主要是將原有 的協定轉換再加上了事件核對以及錯誤注入兩大部分。啟動條件中的事件種類主 要有以下幾種表 4.2,這些事件是以 ARM 公司的系統匯流排的運作為基礎提出 的啟動條件。在我們提出的錯誤注入方法中可以透過單一事件啟動錯誤注入,更 能夠透過組合事件來進行錯誤注入,關於事件驅動錯誤注入方式的探討我會在下 一個小節加以說明。

Type Value Address 32 bit value

Type Idle、Write、Read AccessSize 8、16、32、64

Group Single、BurstStart、BurstCont、BurstIdle

BurstLength WRAP4/INCR4、WRAP8/INCR8、WRAP16/INCR16、INCR BurstWrap INCR、WRAP

HPROT Opcode、Data、ProtectionType、Bufferable、Cacheable ReadData Int value

WriteData Int value MasterID Int value

表 4-2 事件項目表

圖 4-4 錯誤注入模組虛擬程式碼

上圖是錯誤注入模組的虛擬程式碼,上面的虛擬程式中錯誤注入的啟動條件 是屬於事件組合的類型,此組合事件是由表 4.2 中的傳輸型態 (Type)、傳輸位址 (Address) 以及主人端編號 (MasterID) 三種類型的事件組合作為錯誤注入的動 條件,當此事件發生時錯誤注入模組就會進行錯誤的注入程序。由於 CoWare 的 Platform Architect 將 Transactor 模組分成兩大類,分別是主人端用和僕人端用,

因此我們也分別將之實踐出資料收集和錯誤注入等功能。由於主人端所能掌控的 資訊較僕人端來的多,因此主人端的錯誤注入模組所能套用的錯誤注入模型相較 於僕人端會有更大的發揮空間,這也是我們往後研究的重點之ㄧ。

在文檔中 中 華 大 學 (頁 42-45)

相關文件