在本論文中提供了兩個容錯應用實例做為錯誤注入工具的實驗範例,此二例 分別為具錯誤偵測能力的管線式處理器以及具容錯能力的超長指令處理器,在定 義完系統規格(System specification)後利用 VHDL 硬體描述語言實現之,兩個系 統的功能將分別在4-1 節以及 4-2 節詳細說明。
4-1具錯誤偵測能力的管線式處理器
在此一論文中所設計以及引用的處理器(FTR2000)是一個 32 位元管線式處 理器(32 bits Pipeline Processor)主要是參考 MIPS R2000 處理器架構與指令集 (Instruction Set),設計出符合實驗需要的處理器架構,其中省略了浮點運算的功 能、中斷處理功能、比較複雜的分歧指令(Branch Instruction)與保留一些重要基 本的指令以便能夠執行一些簡單的測試程式(Test-Bench)。
而整個單純且不包含任何錯誤偵測技術的管線式處理器架構可由下面圖4-1 的FTR2000 基本架構圖說明之:
Register
File =
m u x
m u x
ALU Data
Memory m
u x
Hazard detection &
Forwarding Unit m
u x
+
4
Control
Shift Sign
Extension PC+4[31-26]
Inst[25-0] m
u x
2
PC Instruction Memory
SetNOP
RegWrite
Write Target
MemSel
StallIFID StallIF
IF/ID ID/EXE EXE/MEM MEM/WB
PC+4[31-26] & Inst[25-0]
+
圖4-1:FTR2000 基本架構圖
這一個簡化過的處理器跟MIPS R2000 的主要差異有下列數點:
(1).管線暫存器(Pipeline Registers)重置更新(re-flash)的功能並沒有設計於其 中。其主要的原因是並沒有將分歧預測的功能實作於此一處理器內,所以必 須使用重置更新的方式來處理。
(2).使用靜態分歧衝突解決方法(Static branch hazard solution),無條件的分歧 是使用停滯(stall)的方式等待新的位址被計算出來才讀取新的指令,例如:
Jump。而有條件的分歧則是固定停滯一個時脈週期(stall 1 clock cycle)的方式 來處理。如此所有的分歧或跳躍指令後所跟隨的指令都會使用停滯(stall)的 方式來處理,直到要分歧或跳躍的位址被計算出來才繼續執行接下來的指 令,例如:Beq。
(3).資料衝突(data hazard)針對各種衝突情形分為下列三種解決方法算數運 算單元(ALU)發生資料衝突時,使用提前引用(Forwarding)的方法來將剛剛運 算完的資料立即引用到ALU 中使用。
(4).資料記憶體(Data Memory)存取發生資料衝突時,則停滯(stall)、提前引用 (forwarding)與重新執行(re-execute)三種方法混用來處理。
(5)資料讀取(Load)後立即引用於分歧指令的資料衝突時,則不使用提前引用 (Forwarding)的方法來處理,而使用停滯兩個時脈週期(stall 2 clock cycle)來 處理。
在下面兩個小節中將介紹兩種錯誤偵測技術的理論以及如何與處理器 FTR2000 整合,此兩種整合於處理器的錯誤偵測技術分別為:即時性自我檢測算 數功能元件(Online Self-Checking Arithmetical Components)以及看門狗即時性程 式指令監督處理器(Real Time Watch-dog Processor)。
4-1.1
即 時 性 自 我 檢 測 算 數 功 能 元 件(Online Self-Checking Arithmetical Components)即時性自我檢測(Self-Checking)[19]的基本觀念是利用雙軌式檢測的方法來 偵測錯誤,本論文將其應用在算數邏輯單元(ALU)中的加法器與乘法器中。在這 篇論文中選用的基本架構是二位元雙軌式自我檢測的架構。再利用這樣的基本元 件組合出64 位元與 32 位元大小的雙軌式自我檢測機制。而最基本的二位元雙軌 式自我檢測的基本結構與電路圖如下:
Two-Rail Checker
e
1e
2(X
1, X
2, …, X
n) (Y
1, Y
2, …, Y
n)
e
1 =e
2’if and only if Xi = Yi’ for all
values of i(a)
(b)
圖4-2:(a)雙軌式自我檢測基本方塊圖 (b)二位元雙軌式自我檢測器 其布林表示式如下:
當沒有錯誤的時候,輸入端設成
x
0=y
0,'x
1=y
1',則輸出的e1, e2 會有互補 的情況。若輸入的X, Y 不是互補的時候(即有錯誤發生時),例如x
0=y
0,x
1=y
1' 時,則輸出的e1, e2 會相等。為了組合出 64 位元與 32 位元的雙軌式自我檢測器1 0 1 0 2
1 0 0 0 1
y y x x e
x y y x e
+
=
+
=
(Two-rail checker),本論文大量利用 2 位元雙軌式自我檢測器去組合出所需要的 大小,其基本架構示意於圖4-3:
Checker 1 Checker 2 Checker 3 Checker n
Checker n+1 Checker n+2 Checker n+n/2
Checker 4
x1, y1, x2, y2 x3, y3, x4, y4 x5, y5, x6, y6 x7, y7, x8, y8 xi-1, yi-1, xi, yi
Checker n+n/2+1
Checker j
e1 e2
圖 4-3.:階層式雙軌式自我檢查架構
本論文也將餘數算數碼(Residue arithmetic codes)的方法加入於自我檢查器 中,這樣就可大量省下資訊的使用量。而整個ALU 中的加法器與乘法器則更換 成不一樣的架構,這兩者架構如圖4-4 所示:
Arithmetic code checker Modular Adder
32-bit Modulo 3
Generator 32-bit Modulo 3 Generator
32-bit Modulo 3 Generator 32-bit Adder
2-bit Adder (check parts)
4-bit Modulo 3 Generator
Inverter
Translator
Two-Rail Checker
A B
e1 e0 Output
Arithmetic code checker Modular Multiplier
32-bit Modulo 3 Generator
32-bit Modulo 3 Generator
64-bit Modulo 3 Generator
32-bit Multiplier
2-bit Multiplier (check parts)
4-bit Modulo 3 Generator
Inverter
Translator
Two-Rail Checker
A B
e1 e0 Output
(a) (b)
圖4-4:(a)自我檢測加法器架構 (b)自我檢測乘法器架構
自我檢測算數邏輯算元件主要是替換掉算數邏輯算元件中的加法器與乘法 器,其自我檢測算數邏輯算元件的示意圖如圖4-5 所示:
+
*
ALU output ALU
input 將此兩塊算數電路更換成具有 Self-Checking 功能的算數電路,這
樣一來這兩個電路就會多出兩組 Self-Checker 的 error output signal
Self-Checking Adder error output signal Self-Checking Multiplier
error output signals
圖4-5:自我檢測算數邏輯算元件示意圖
4-1.2 看門狗即時性程式指令監督處理器(Real Time Watch-dog Processor)
看門狗即時性程式指令監督處理器[17]的主要功能是即時監督所執行的指 令,並計算程式區塊的執行流程正確與否。當處理器讀取到非法指令(invalid instruction)或者執行流程錯誤時可以立即通知處理器做應有的處理程序,以避免 執行結果錯誤甚至於導致整個系統無法正常工作。看門狗即時性程式指令監督意 示圖如圖4-6 所示:
Program Instructions
Watch-dog monitoring Processor
General Processor Instruction Fetch and Execution by
General Processor
Instruction monitoring by Watch-dog Processor
Error information output form Watch-dog to Processor if error detected
圖4-6:看門狗即時性程式指令監督意示圖
在這裡所引用的看門狗程式指令監督處理器[18]是利用特定的資料編碼演 算法對原始程式碼區塊進行一連串重複編碼的動作,以求出所編碼的程式區塊獨 有的一組特徵向量(Watch-Dog Signature),並將此特徵向量加入於原本程式區塊 的最前面。
In stru ction s 1
2 3
. . . .
n
G en eral tech n olog y
M on itor
B lock L en g th
S ig natu re
B ran ch 1
2 3 S ig natu re
B ranch 1
2 3
S ig natu re
B ran ch 1
2 3
圖4-7. 看門狗監督技術
在程式執行的時候,處理器跟看門狗指令監督處理器都會先讀到此一特徵向 量,因為它不是原始程式區塊中的指令,處理器必需忽略它(儘管它有可能何一 個指令相似),所以處理器利用特定的控制電路忽略此一向量值,而看門狗指令 監督處理器則是將此一向量值讀取進來,以便在接下來的區塊連續指令執行時,
立即將讀取的指令進行編碼並與目前這一個向量值做一比較。在每一特徵向量 中,有程式區塊長度(Block Length)、水平特徵向量(Horizontal Signature)跟垂直 特徵向量(Vertical Signature)等三個參數值,如圖 4-8 所示:
Block Length
( BL
B)
Horizontal Signature
( HS
B)
Vertical Signature
(
VS
B)5 bits 16 bits 11 bits
圖4-8 特徵向量(Watch-Dog Signature)格式
水平特徵向量是利用兩兩連續的指令碼的比較加以編碼,以便確定每一行指 令裡是否有發生錯誤,若在讀取指令時有發現錯誤,則立即通知整個系統,以便 系統準備接下來的錯誤克服程序。垂直特徵向量是用累積壓縮的方式來處理連續 兩個指令之間即時產生出來的暫時性水平特徵向量,連續壓縮多組的暫時性水平 向量,直到整個程式區塊執行完畢。當執行完整個程式區塊指令時,就可以將即 時運算出來的區塊垂直特徵向量與在門狗指令監督處理器中的垂直特徵向量做 比較,如此一來就可以偵測出不少水平特徵向量值無法偵測出來的錯誤。而經過
水平特徵向量與垂直特徵向量的雙重檢查,每一區塊的程式碼都可以得到適當的 錯誤偵測保護,以保證每一行指令都可以被正常的執行。門狗指令監督處理器的 架構區塊說明圖以及嵌入於 FTR2000 系統的區塊示意圖分別如圖 4-9、圖 4-10 所示:
P2 P1 P0
Signature Register
Register A
Register B
mux
S1~S4 counter CS1 ~ CS4
CS2-CS1 CS3-CS4 CS1 CS2 CS3 CS4
12 bits Adder 12 bits Adder
Register X Register Y
Adder 480 Adder
6 6 Vertical Signature Comparison Unit
Vertical Error Signal Horizontal
Generation Unit y2,y1,y0 x2,x1,x0
H Increased
Counter Control
HS
Error Instruction number
Horizontal Error Signal Horizontal Signature Comparison
Unit idle
write
reset Instruction Bus
load
8
Vertical Reference Signature BL
圖4-9:看門狗指令監督處理器內部架構
Register
File =
m u x
m u x
ALU Data
Memory m
u x
Hazard detection &
Forwarding Unit m
u x
+
4
Control
Shift Sign
Extension PC+4[31-26]
Inst[25-0] m
u x
2
PC Instruction Memory
Inst[31-27]
SetNOP
RegWrite
Write Target
MemSel WDinit
StallIFID Instruction
Bus
StallIF
Watchdog Control
Watchdog Processor
P2 P1 P0 Reg
IF/ID
ID/EXE EXE/MEM MEM/WB
PC+4[31-26] & Inst[25-0]
+
圖4-10:看門狗指令監督處理器嵌入於 FTR2000 架構圖
4-2具容錯能力的超長指令處理器
超長指令﹙Very Long Instruction Word﹚處理器的優點是能提高系統的效能,
因為超長指令處理器利用ILP(Instruction Level Parallel)的架構可以在一個時脈中 同時處理多道不同的指令,因此在效能方面,超長指令處理器是個非常有效的處 理器架構。
超長指令處理器除了有優越的執行效能之外,它本身的硬體架構也相當適合 加入某些容錯技術,例如:擁有多個運算單元的特性可以讓超長指令處理器在執 行階段,利用現有的硬體資源在加入一些簡單的容錯技術來達到容錯的目的,這 樣的一個設計方式可以大幅減少使用額外硬體的比例,換句話說,超長指令處理 器僅需付出些許的硬體冗餘(Hardware Redundancy)即可有效的提升系統可靠 度。目前生產處理器的各公司皆有計劃生產此類之處理器,如Intel 與 HP 合作設 計的IA-64;德州儀器所生產的 C60[29][30]晶片皆是超長指令處理器,其中 IA-64 也已經俱備一些簡單的容錯技術,這說明了各家廠商對於此架構深具信心。
在本論文中所使用的超長指令處理器為五個階段的處理器、三個算數邏輯運 算 單 元 、 一 個 額 外 的 算 數 邏 輯 運 算 單 元 以 及 一 些 簡 單 的 容 錯 電 路 : 兩 個 CC(Comparator Circuit)、一個 TMR (Triple Module Redundancy)、一個 MV(Majority Voter)…等[28],詳細的執行階段容錯硬體架構如圖 4-11 所示:
Instruction Memory
Next address selector
Dispatch Unit
Shared Register File
Select ALU_A
ALU_B
ALU_C
L/S Unit L/S Unit
L/S Unit Control
0 1 2 3
0 1 2 3
0 1 2 3
CC 1
CC 2
TMR
MV
Data Memory Schedule
op_1(I1) op_2(I1) op_1(I2) op_2(I2)
ALU_D
Control
I1_out
I2_out
Sel_A Sel_B Sel_C
Sch_sel Func_B Func_D
Func_C
Write Back Control
1.Next sequential 2.Jump address 3.Branch address
Fa Fb Fc Fd
Select_sel
Idle(Recovery)
Failed safe
IF DISPATCH ID EXE MEM WB
Funct_I1 Funct_I2 Inst_count
Func_A
圖 4-11:具容錯能力的超長指令處理器硬體架構
而超長指令處理器的容錯電路的細部動作如下所述:
由控制(Control)電路發出控制訊號,先根據控制電路電路的輸入訊號 (func_1,func_2,inst._count,reset)和四個控制電路內部 ALU_flag 來發出輸出訊 號,當ALU 電路接收到分派(Schedule)電路所分配的指令後,會各自運算產 生答案,並且經由多工器進入比較器電路組(CC1,CC2,TMR,MV)其中一個,
來比較不同 ALU 所產生的答案是否相同,因此可偵測出電路中是否有故障發 生,如果比較器電路組能輸出一個答案則會藉由選擇(Select)電路來選擇輸 出,如果比較器電路組不能判斷出正確的答案則會發出通知給控制電路由控 制電路輸出一個閒置訊號(Idle)。
超長指令處理器所使用的容錯電路如下所述:
z 比較器(Comparator Circuit):
可藉由兩個不同ALU 的輸出結果互相比較,若有相同的答案則比 較器可輸出答案,若兩者不同則不能輸出結果,並且發出錯誤訊號通知 控制電路然後執行故障恢復(Error Recovery)。
z 三倍模組冗餘(Triple Module Redundancy):
可藉由三個不同ALU 的輸出結果互相比較,只要有兩個以上的答 案相同則 TMR 可輸出答案,因此 TMR 電路能容忍一個電路的故障,
並且有能力判斷發生故障的ALU 是哪一個,但是當發生兩個錯誤以上 時,則TMR 電路會發出錯誤訊號通知控制電路然後執行故障恢復。
z 多數仲裁器(Majority Voter):
可藉由四個不同ALU 的輸出結果互相比較,若有兩個以上的相同 結果,則電路會把相同的結果輸出,MV 的電路能容忍兩個以下的故 障,並且也有能力判斷出那個ALU 發生故障,但若發生兩個以上的故 障時,則發出錯誤訊號通知控制電路,且讓電路進入容錯失敗但是安全 的狀態(Failed safe state),因為 MV 電路是整個容錯系統的最後一道防
護機制。
要注意的是在這幾類的容錯電路中有一種特別狀況,就是當多個 ALU 執行 同一道指令時卻有兩個ALU 以上發生錯誤時且錯誤的值又恰巧相同,當這種錯 誤發生時,這三種容錯電路都偵測不出錯誤,而這種錯誤被稱為同錯誤(Common Fault),這種情會導致系統進入容錯失敗且不安全的狀況(Failed unsafe state)。