• 沒有找到結果。

首先,為了驗証指令集的完整性和效能,首先,我們以 C++寫成一個指 令集模擬器(instruction set simulator;簡稱 ISS)。在這個 ISS 上我 們試著將一些 DSP 的核心,如 DCT, FFT, filter 等等,以手動排程寫成 程式碼。之後再將程式的計算結果和 Matlab 運算結果比較誤差值,確定 ISA 能確實合成 DSP 核心,且程式碼的功能也正確無誤。。

4.1.2. 硬體管線化的規劃

接著是指令管線化的分級。在運算單元分成兩級執行。並在後級的電路 與交換電路整合成輸出選擇(output select)級。因此以一個完整的運算 而言五級架構就如圖 4-1 所示。其中,每級所負責的工作簡述如下:

„ IF: instruction fetch,程式碼在這一級由程式匯流排中讀入

„ ID: instruction decode,在這一級將程式碼解碼微程式,並處理 程式碼中的立即數值(immediate value)和計算索引定址的位址。

另外直接指示暫存器檔和交換電路把資料送到每個執行單元的輸 入端中。

„ EX: execution stage 1, 執行階段的第一級,在這個階段四個運 算單元和四個暫存器都會同時做計算和更新資料的動作。只是在這 一級所處理的資料更新所更新的資料為前兩個指令的運算結果。

„ SEL: execution stage 2 and outputs selection, 這是運算執行 的第二階段,同時會將運算結果由交換電路送到每個暫存器檔的輸 入埠等待下一級存入暫存器中。

„ WB: write back result, 將運算結果寫回輸入佇列的目的地。

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB) Duel

圖 4-1 Pipeline Execution Parallelism

以這樣的管線化分級後,原本的 ISS 就必需更改,SIU DSG 輸入端取得 資料的時間就必需向後延遲 2 個時脈,因此在每次更新暫存檔時,所用來 更新的資料實際上為兩個時脈以前運算元的運算結果。如圖 4-2(a)所 示,SIU 要把輸入端的資料直接繞到(bypass)輸出端也需要在相對的運算 後兩個時脈才能執行。但若已經寫入佇列的資料就不需要,可以在下一個 時脈直接取用。因此以指令的方向來看,5 級的分析在每個指令中:IF、

ID 和 EX 都是處理指令本身的資料,但 SEL 和 WB 所處理的資料是兩個時 脈以前的計算結果。

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB) Register Fetch Output bypass

(a) Data dependence in Pipeline stage

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB)

IF ID EX (SEL) (WB) Branch Taken PC Updated!

Branch Target

(b) Branch control in pipeline stage 圖 4-2 pipeline stage design

另外,有關程式流程的控制,因為 PC 即 R15,是專屬控制單元暫存器 檔中的一員,因此在執行分叉(branch)的指令時,同樣的也會在兩個時脈 後分叉的新位址才會送到暫存器中,因此在分叉指令後的兩個時脈的指令 還是會被執行,這樣的方法稱為延遲分叉(delayed branch)的做法。總 之,在分叉指令後的兩個指令都還是算在迴圈內的指令。IF 要在第三個 時脈後才能取得分叉後新位址的程式碼。(圖 4-2(b))

在加入管線化後,程式必需再重新修正,因為在 SIU 中資料的輸入與輸 出順序的變動都必需重新安排排程與驗証。

4.1.3. 微處理器架構

重新驗証完因管線分級造成輸入輸出順序的變動後的 SIU,之後就每一 級電路所負責的工作定義輸入和輸出的規格,分別合成組合邏輯。

„ IF:輸入為 16 位元 PC 值,輸出為 64 位元程式碼

„ ID:ID 的工作分兩個部分:一為當時時脈的解碼器(ID),和兩個時 脈前的運算輸出的交換電路(SEL)

„ 就解碼器的部分:輸入為程式碼,輸出為運算單元的微程式碼

„ 就交換電路的部分:輸入為四個運算單元的運算結果、PC 值。輸 出為所有運算單元的運算子、所有該送入暫存器檔的資料、和下一 個 PC 值。

„ EX:EX 的工作就運算單元和暫存器檔也有兩種工作:一為運算單元 的運算(EX),和把前兩個時脈的運算結果送入暫存器更新(WB)

‹ 就運算單元部分:輸入為運算子,運算元種類,運算參數。輸 出為運算結果

‹ 就暫存器檔更新部分:輸入為要更新的資料,及存放的目的 地,無輸出。

所有單元的 IO 規格詳繪圖 4-3。再整合所有的單元加上管線化暫存器 (pipeline register)就可以得到完整的微處理器架構如圖 4-4。

圖 4-3 Function Block I/O spec IF

PC(16)

Instruction code(64) Memory select

Address(16) Data (64)

Instruction code(64) ID ALU output(16) Multiplier output(16) Shifter output(16) IO output(16)

IO control(2) PC(16)

Next PC(16) input address(4*4) SIU input(4*16) Operands address(7*5) ALU operator(5) Multiplier operator(2) Shifter operator(2) AR

MR SR GPR input address(4*4)

SIU input(4*16)

Operands address(7*5) Operands (7*16) PC(16)

Next PC(16)

Operands (7*16) ALU MUL SFT Multiplier operator(2) IO

Shifter operator(2)

ALU operator(5) Multiplier output(16) Shifter output(16) ALU output(16)

IO control(2)

IO output(16)

Mem Addr(16) Write data(16) Read data(16) Memory select

圖 4-4 Architecture Design

Function Units Commands

Update Control Reset Counter Update Data

Next PC

ALU Operator

Multiplier Operator

Shifter Operator

IO Operator ALU Operator Multiplier Operator IO Operator Shifter Operator A, M, S, I Outputs and Flag

IF ID/Reg/Addressing EX/(WB) EX2/(SEL)

Register Updater

相關文件