• 沒有找到結果。

不同層級的錯誤注入方法

在文檔中 中 華 大 學 (頁 33-41)

在第二章的相關研究中,我們整理收集了一些相關研究在SystemC上開發的 錯誤注入方法,接下來我們將針對這些相關研究所提出的錯誤注入方法以及我們 在工具中所使用的錯誤注入方法,做進一步的詳細說明。

以下將提出三種不同層級的錯誤注入方法,分別是:bus cycle accurate level、

untimed functional level 以及 timed functional level。[15]的作者針對這三種不同的 設計層級各設計了一個模組(Module),稱之為錯誤注入模組(FIM)。利用這三種 不 同 設 計 層 級 的 錯 誤 注 入 模 組 進 行 錯 誤 注 入 。 另 外[16] 的 作 者 針 對 timed functional level 設計錯誤注入的方法,主要是實踐在 CoWare Platform Architect[18]

提供的 Transactor 模組上。以下介紹的 Bus Cycle Accurate level 及 untimed functional level 的錯誤注入方法是以[15]為主;而 timed functional level 是以[16]

為主。

3-1 Bus Cycle Accurate Level

Bus Cycle Accurate這個設計層級是SystemC中較特殊的一層,因為在這個設 計層級的描述方式擁有精確的時間週期(clock cycle),其優點是在進行錯誤注入 時可得到較精確的結果,但缺點是會導致系統模擬的時間變慢。在本篇論文中,

Bus Cycle Accurate的設計層級是利用clock cycle當作錯誤注入的啟動條件,而模 組之間的溝通方式是透過sc_signal做連接。

Bus Cycle Accurate的錯誤注入方法是將每一個錯誤注入模組搭配一個2對1 多工器(multiplexer),如圖3-1所示。

圖3- 1 BCA 層級的錯誤注入模組示意圖

在進行錯誤注入實驗之前會先選擇錯誤目標點(fault target),決定之後會在該 目標點(某個IP)的輸出相接sc_signal上插入錯誤注入模組及多工器。每一個錯誤 注入模組內都會有一組錯誤注入清單(fault injection list),其中紀錄了每一筆要注 入錯誤的時間點、錯誤注入的值以及錯誤持續時間。錯誤注入模組會利用 SystemC所提供的標準函式(function) -sc_simulation_time()-在系統模擬時抓取模 擬時間。由於系統上的模擬時間對於所有的模組來說都是相同的,利用這個特 性,可以判斷送出正確與錯誤的資料時間點。當系統的模擬時間與錯誤注入清單 上面所列出的時間不符合,錯誤注入模組就會將Sel訊號輸出為’1’並傳送給多工 器,讓原來正確的資料經過;但若是系統模擬時間與錯誤注入清單上面的時間相 符合,代表錯誤注入模組要在這個時間點上注入錯誤,這時候錯誤注入模組就會 將Sel訊號輸出為’0’並傳送給多工器,將錯誤注入模組內設定的錯誤資料送出。

錯誤持續時間(fault duration)在這個設計層級是根據設計錯誤注入模組時的 參數設定來控制。若錯誤持續時間還沒有結束,錯誤注入模組會持續將Sel訊號 線輸出為’0’並傳送給多工器,所以在接下來的時間點也會輸出相同的錯誤資 料。直到錯誤持續時間結束,錯誤注入模組才會將Sel輸出為’1’,並恢復原來正 確的資料傳送。

3-2 Untimed Functional level

本篇論文在Transaction Level Models 中實現 untimed functional level 的錯誤 注入使用的是SystemC 函式庫中所提供的 FIFO 通道:sc_fifo,當有存取的動作 發生時,FIFO 就會自動啟動。

因為FIFO 不像 bus cycle accurate 一樣有精確的時間,而且 FIFO 在讀取、

存入資料時並不會固定在某一個時間週期,因此不能沿用bus cycle accurate 的錯 誤注入方法,所以作者在這裡提出了第二種錯誤注入的方法,並利用兩種事件當 作錯誤注入的驅動條件:

1. 讀取資料的次數

每一次讀取FIFO 內部的資料,錯誤注入模組內部的計數器就會累加,當 計數器的數值與錯誤注入模組中的錯誤注入清單所設定的數值相同,錯 誤注入模組就會將錯誤的值輸出。

2. 讀取資料的值

將每一筆讀取到的資料與錯誤注入模組內的錯誤注入清單(fault injection list)內設定好的資料比較,如果兩者的數值相等,錯誤注入模組就會將錯 誤的值輸出。

F I F O

F I F Event O

Check

FIM Correct Data

Data

Count

Error Data

Enable Duration Data Copy

圖3- 2 TLM Untimed Functional Level 的錯誤注入模組示意圖

在這個設計層級其錯誤注入模組的架構如圖3-2 所示。一共可分為三個主 要的模組:

1. Data Copy:

利用port->read()這個函式,將 FIFO 的資料讀取到模組內。除此之外,

在模組內部設置了一個計數器,每當讀取到一筆資料,計數器就會加

‘1’。並將資料複製成兩份之後再利用 port -> write()函式,把一份資料送 至Event Check 進行事件的判斷;把另外一份資料送至 FIM 作為正確的 資料存放。並且將剛剛計數器計數後的值,送至Event Check 進行事件 的判斷。

2. Event Check:

Event Check 在錯誤注入模組裡面所扮演的角色,是根據 Data Copy 模組 送過來的資料及計數值判斷是否要進行錯誤注入,其內部的架構如圖 3-3 所示。

Data Check

Count Check

Error Data 1 Duration 1 Enable 1

Mux Error Data 2

Event Check

Duration 2 Enable 2

圖3- 3 Event Check 內部架構示意圖 在Event Check 的內部又包含了三個主要的模組:

(1) Data Check:

Data Check 會負責判斷每一筆讀進來的資料,是否為錯誤注入清單 中設定的值。如果不是,Data Check 會將輸出訊號中的錯誤資料 (Error Data)、錯誤持續時間(Duration)和致能訊號(Enable)都設定 為’0’,告知錯誤注入模組現在沒有要進行錯誤注入的動作;反之 若判斷需進行錯誤注入,Data Check 就會將錯誤資料、錯誤持續時

間以及致能訊號都輸出成設定的錯誤資料。

(2) Count Check:

在Count Check 中,包含一組錯誤注入清單,紀錄要進行錯誤注入 的count 值。若計數器的 count 值不符合錯誤注入清單內的數值,

則錯誤資料、錯誤持續時間及致能訊號就會輸出為’0’;一旦收到 計數器送過來的count 值符合錯誤注入清單內的數值,Count Check 就會將錯誤資料、錯誤持續時間以及致能訊號輸出成設定的錯誤資 料。

(3) Mux:

這個模組是決定將Data Check 或是 Count Check 送出來的值輸出,

根據Data Check 跟 Count Check 的致能訊號線,決定將哪一個模組 送出來的值輸出,若Data Check 的致能訊號線=’1’而 Count Check 的致能訊號線為’0’,這個模組就會將 Data Check 的資料送出,但 若Data Check 跟 Count Check 的致能訊號線同時為’1’時,就要看設 計者當初在定義這兩種事件時的優先權誰的比較高。在本篇論文中 是將Data Check 的優先權設定高於 Count Check 的優先權,表 3-1 整理Event Check 中的各種情況,並藉由這個表格說明當 Data Check 跟 Count Check 的致能訊號線同時為’1’時,Event Check 的輸 出為何。

Data Enable Count Enable Error Data Duration Enable

0 0 0 0 0 0 1 Error Data 2 Duration 2 Enable 2

1 0 Error Data 1 Duration 1 Enable 1 1 1 Error Data 1 Duration 1 Enable 1

表3- 1 Event Check 的輸出狀態選擇表

3. FIM:

這個模組的功能,根據Event Check 送出來的致能訊號,決定是要送正 確的資料還是經過錯誤注入的資料。當致能訊號為’0’,代表 Data Check 和Count Check 都沒有啟動錯誤注入,這時候錯誤注入模組會將原來系 統中正確的資料輸出;若致能訊號為’1’,根據 Event Check 所送出的資 料來決定錯誤注入模組要輸出什麼資料。接下來要判斷錯誤持續時間的 值,若錯誤持續時間的值不等於 0,代表還要繼續傳送錯誤的資料,每 傳送一筆資料錯誤持續時間的值就會減 1,直到錯誤持續時間的值等 於’0’,這時候就不再送出錯誤的資料。

3-3 Timed Functional Level:Transactor 的錯誤注入方法

Open SystemC Initiative (OSCI)將 SystemC 中的 TLM 分成下列三種設計層 級:Programmers View (PV)、Programmers View with Timing (PV+T)、以及 Cycle Callable (CC)。設計層級越高代表其抽象層級越高、模擬速度越快。這裡的 PV 等同於TLM 的 untimed functional level;PV+T 等同於 TLM 的 timed functional level。

由於在 SystemC 上面有許多的設計層級,而不同的設計層級使用不同的 protocol。當設計者利用 SystemC 設計系統時,可能會將多個設計層級以及多個 不同的protocol 加以混合使用。為了使不同設計層級的模組之間能夠互相溝通,

訊 息 的 傳 遞 需 要 透 過 有 橋 樑(bridge) 功 能 的 零 件 做 不 同 層 級 的 轉 換 , 而 Transactor[20]就是其中之一。

在[21]的研究中,針對 AMBA Bus 提出了新的錯誤注入方法,透過修改 CoWare Platform Architect[18] 中 矽 智 產 零 件 庫 (IP library)[22] 所 提 供 的 Transactor,達到資料收集以及錯誤注入的功能,其系統架構圖如 3-6 所示。在圖 3-6 中,Master 元件是屬於 PV+T 的設計層級並使用 AMBA protocol;Slave 元件 是屬於PV 的設計層級並使用 PV protocol。為了溝通兩種不同 protocol 之間的訊

號,因此利用Transactor 連接 PV 與 PV+T 設計層級。

圖3- 4 Transactor 錯誤注入模組架構示意圖

這個新的方法,主要分為兩個階段:第一階段是透過 operational profile module(OPM)收集資料;第二階段是利用 fault injection module(FIM)進行錯誤注 入,其詳細過程如下所述:

第一階段:

一開始先利用產生出來的operational profile modules,進行 AMBA Bus 上的 訊號收集,這些訊號包括:位址(address)訊號、資料(data)訊號、以及控制(control) 訊號。收集這些訊號主要是為了之後進行錯誤注入實驗時,可以提供錯誤注入模 組(FIM)選擇事件驅動的依據。

第二階段:

利用第一階段所收集到的資料,針對進行 FMEA 分析所需的事件,產生相 對應的錯誤注入模組。在這錯誤注入模組裡,除了原有的Transactor 架構外,還 包含了event check 和 fault injection 兩個功能:Event check 的目標事件主要根據 第一階段在AMBA Bus 可收集到的訊號,如表 3-2 所示。而這些事件,除了可以 單一輸入之外,也可以進行事件之間的組合,可以讓設計者針對更詳細的狀況進

行FMEA 的分析。當 AMBA Bus 產生設計者所選擇的事件類型時,錯誤注入模 組會將原來設定的錯誤狀況注入,例如:當address = “0x80000000”時,我們會 將設定好的錯誤值”0x70000000”取代原來的位址值。

事件類型 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

表3- 2 AMBA Bus 訊號總表

在文檔中 中 華 大 學 (頁 33-41)

相關文件