• 沒有找到結果。

錯誤注入工具開發流程

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

接下來我們將針對在錯誤注入工具中會使用到的每一道命令,說明此命令及 其內部各個參數所代表的意義。下表4-2 彙整所有命令的名稱、內部參數、命令 及各個參數的解釋。

首先,針對命令中會使用到的符號進行定義:

<>:括弧內的 item 是必須要填入的參數。

[]:括弧內的 item 是可選擇性的填入。

命令名稱 (Command name)

參數 (Parameters)

命令和參數解釋

add_to_systemc_include_

path

<dir> 增 加 一 個 資 料 夾 的 名 字 到 SystemC 的 include path。

dir:

定義為資料夾的名字。

create_bridge_from_block <block>

<masterPort>

<slavePort>

將block 轉換成 bridge。

block:

定義為 block instance 的名 字。

masterPort:

定義為master port。

slavePort:

定義為slave port。

create_connection 1. <name>,

<begin>,

<end>

2. <name>,

<ports>

建立新的連線,連接的方式 有下列幾種:

1. bus 與 bus 之間的連線或 是bus 與元件上的 port 之 間的連線。

3. <name>,

<hierarchicalInstance>,

<ports>

2. 一列的 ports 全部連接到 同一個元件上的port。

name:

新連線的名字。

begin:

定義為begin port。

end:

定義為end port。

ports:

定義為一列的ports。

hierarchicalInstance:

定義為hierarchical instance。

get_connected_port <port> 從輸入的 port 去找到另外一 個連接的port。

port:

定義為port 的名字。

get_param_value <item>,

<set>,

<param>

取得item 內的參數。

item:

包括a block instance, a port, a instance port protocol…等。

set:

定義為參數集合的名字。

param:

定義為參數的名字。

get_port_protocol <port> 取得port 的 protocol。

port:

定義為port 的名字。

instantiate_block <block>,

<parentInstance>,

<newInstance>

從系統函式庫中取出一個元 件加入系統。

block:

定 義 為 系 統 函 式 庫 中 的 元 件。

parentInstance:

定義為新的 instance 要被加 入 到 哪 一 個 hierarchical block。

newInstance:

定義為新加入的 instance 名 字。

list_connections <hierarchical instance> 列出 hierarchical instance 上 所有的連線。

list_instances [instance] 列出系統上所有的 instances 或 是 被 指 定 的 hierarchical instance。

instance;

定義為hierarchical instance。

list_ports <item> [withMonitors] 列出item 上所擁有的 port 的 名稱。

item:

包括a library block, a block instance, a connection…等。

withMonitors:

只 有 item 被 設 定 為 connection 時,若 withMonitor 設定為 true,連線上 monitor 的port 也會被列出來。

load_all_modules <files> 載入模組。

files:

定義為含模組的檔案名稱。

load_system <file> [merge] 載入系統。

file:

包含能夠載入到 Platform 系 統中所有相關資料的檔案。

merge:

這個系統是否已經被合併到 其他存在的系統中。

remove_connection <connection> 移除連線。

connection:

連線的名字。

remove_instance <instance> 移除instance instance:

instance 名字。

rename_connection <old>

<new>

重新命名連線名稱。

old:

原來的連線名字。

new:

改變後的連線名字。

set_block_port_protocol <blockPort>

<protocol>

設定port 的 protocol。

blockPort:

定義為block port。

protocol:

定義為protocol。

表4- 2 命令彙整表 4-2 錯誤注入工具設計流程簡介

接下來將針對此篇論文中所開發的錯誤注入工具,進行詳細的說明。下圖 4.1 為整個錯誤注入工具的設計流程示意圖。

Fault Injection Modules CoWare Architect

Platform

OPM generation

Execute scripts to insert OPMs automatically

FIM generation

Execute scripts to insert FIMs automatically

Simulation and operational profile for

FMEA analysis

FMEA Analysis Simulation

Operational profile for FIM generation

Items Selection : I. FIM generator II. FMEA analysis Execute scripts to

collect fault targets and relative data

Choose level : BCA level, Untimed level

or Timed level

Choose fault distribution

I.Weibull II.Uniform

Input the simulation time,

duration...etc.

I

II

Select fault targets

Event formation and event choice: single event or event

combination I.connected port

II.port type III.protocol ...etc.

Select AHB or APB for Timed level Select fault targets

OPM

BCA level Untimed level

Choose level : BCA level Untimed level

Timed level

Input the number of fault injection

campaigns Select AHB or APB

for Timed level Timed level BCA or

Untimed level

Input the number of

masters

Timed level

圖4- 1 錯誤注入工具之設計流程示意圖 在圖4-1 的設計流程主要可分為三個部份:

(一) CoWare Platform Architect

第一個部份,我們使用CoWare Platform Architect 所提供的命令擷取系統內

部的相關資訊,像是:instance name, port name, protocol…等。透過我們另外 開發的script 產生器(script generator),輔助使用者根據要擷取的資料,產生 不同的 script。但 script 中所包含的不同命令之間有其順序存在。若沒有遵 照以下命令的執行順序,則此script 就無法順利在 CoWare Platform Architect 上執行。除此之外,依據不同的設計層級所使用的錯誤注入方法,必須執行 不同的命令。

在BCA 和 untimed functional level 執行的命令順序如下所列:

(1) 使用 command ”list_connections”擷取系統中所有的錯誤注入目標(fault targets)。

(2) 使用 command “list_ports”擷取錯誤注入目標前後連接的連接埠名稱(port name)。

(3) 使用 command “get_port_protocol”和”get_param_value”擷取連接埠的通 訊 協 定 以 及 連 接 埠 內 部 的 資 訊 , 像 是 :AddressingMode, Category, Direction, MasterSlaveness, addree_width, data_width。

而Timed functional level 的執行需依循以下順序:

(1) 使用 command ”list_instances”擷取系統中所有 instance 的名稱。

(2) 使用 command “list_ports”擷取錯誤注入目標(fault targets)上的連接埠名 稱(port name)。

(3) 使用 command “get_connected_port”和”get_param_value”擷取錯誤注入目 標上各個連接埠所連接到的目標以及內部的資訊,像是AddressingMode, Category, Direction, MasterSlaveness, Address_width, Data_width。

將執行shall script 後的結果存入檔案中,提供驗證工具在產生 OPM 及 FIM 時的資訊輸入。

(二) OPM

第 二 個 部 份 , 利 用 錯 誤 注 入 工 具 自 動 產 生 Operational Profile

untimed functional level,因為是以模組之間的連線作為錯誤注入目標,加入 OPM 之前必須先把原來的連線切斷;而 timed functional level,是以 Transactor 作為錯誤注入目標,其原本系統架構裡就已經存在,只需將OPM 取代原來 的錯誤注入目標即可。執行系統模擬並收集所有流經OPM 的資料及訊號,

為第三部份要產生錯誤注入模組(FIM)提供相關的資訊。錯誤注入工具產生 OPM 的步驟如下:

(1) 執行錯誤注入工具,選擇產生 Operational Profile Module,並從三種設計 層級中,選擇其中一層。

(2) 選取要收集資料的錯誤注入目標。若設計層級選擇是 timed functional level,由於有兩種不同的匯流排(Bus)種類,所以要告知工具產生那一種 匯流排要使用的OPM。除此之外,一條匯流排上可能有多個 master,所 以使用者必須要輸入 master 個數。在此設計層級,我們要收集每一個 master 送出的所有訊號,包括:address、data、以及 control signals,在 表3-2 中,列出了 Transactor 可以抓取到的所有訊號,並根據不同的訊號 類型分別儲存,之後要對系統進行分析時,只需要根據要分析的事件讀 取相關的檔案。

(3) 產生對應層級的 OPM。

(4) 根據產生出來的 OPM 設計層級不同,在 CoWare Platform Architect 上所 要執行的script 也不盡相同。

對BCA 和 Untimed functional level 所執行的 script 包含下列命令:

(i) add_to_systemc_include_path (ii) load_all_modules

(iii) instantiate_block (iv) remove_connection (v) create_connection

而對timed functional level 的 script 中包含的命令則為:

(i) add_to_systemc_include_path (ii) load_all_modules

(iii) remove_instance

(iv) create_bridge_from_block (v) set_block_port_protocol (vi) instantiate_block

(vii) create_connection (5) 執行系統模擬。

(6) 收集系統模擬後的資料,像是:transaction count, address, data, control signals…等。

(三) Fault Injection Modules

第三個部份,利用OPM 所收集到的資料,根據不同的設計層級像是:BCA、

untimed functional and timed functional level 以及不同的錯誤注入驅動方式:

時間驅動和事件驅動,自動產生對應的錯誤注入模組。錯誤注入工具的使用 步驟如下:

(1) 執行錯誤注入工具,選擇產生 Fault Injection Module(FIM),並從三種設計 層級中,挑選其中一種。使用者可根據需求決定一次模擬要注入的錯誤個 數。

(2) 若使用者選擇 BCA level,工具提供了 Weibull 和 uniform 兩種錯誤分佈模 組給使用者選擇;而untimed functional level 因為無時間觀念,在這個設 計層級是採取事件驅動方式;在timed functional level 其 Bus 架構所使用 的clock cycle 為虛擬的時間,因此在這個設計層級也是採取事件驅動的方 式。

(3) 若設計層級為 timed functional level,使用者要告知工具 FIM 是接在 AHB 還是APB 上。

間驅動(timing trigger)以及事件驅動(event trigger)讓使用者選擇,而事件驅 動又可分為 address, data, and control signals。在[21]的研究中提出了在 AMBA Bus 中所有可以組合的事件,如圖 4-2 所示。從圖 4-2 中可以看到 Bus 傳輸型態的第一層事件為”Read”跟”Write;不同的傳輸型態根據其資 料傳遞方式又可分為”Burst”跟”Single”,此為第二層事件;第三層事件是 每種傳遞方式其內部所包含的訊號如:Address, Data, BurstLength…等。

在事件選擇的部份,使用者可以選單一事件也可以將事件組合。單一事件 可以選擇第一層事件中的”Read”或”Write”傳輸型態;組合事件可以將第一 層的事件搭配第二層的事件,或是組合每一層挑選出的事件。選擇了錯誤 注入的驅動方式之後,要輸入在實驗中總共出現的錯誤個數以及每一個錯 誤的持續時間。針對事件驅動的部份,不同的事件各有其需要輸入的參 數。以burst length 為例,可以選擇工具自動決定或由使用者自行輸入要 注入錯誤的burst length。在此例子中,可選擇的 burst length 有 4, 8, 16 共 三個選項。

圖4- 2 事件組合一覽表 (5) 產生對應層級的 FIM。

(6) 根據 FIM 的設計層級產生相對的執行 script,其內部命令的差異與(二)的 第(4)點相同。

(7) 執行系統模擬。

(8) 收集系統模擬後的結果,作為之後 FMEA 分析時的重要參考資料。

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

相關文件