• 沒有找到結果。

以下說明各指令類別之資料路徑

N/A
N/A
Protected

Academic year: 2021

Share " 以下說明各指令類別之資料路徑"

Copied!
10
0
0

加載中.... (立即查看全文)

全文

(1)

第四章 MIPS CPU 模組設計

以圖 3-1 的基本架構圖為設計藍圖,由於架構限制可實現的指令甚 少。以 B-Type 指令而言,圖 3-1 僅能實現 BEQ(Branch when Equal)指令;

以未帶符號運算的 R-Type、I-Type(Immediate Type)指令來看,Sign-Extend 模組沒有未帶符號擴充功能,因此無法實現 ADDU、ADDIU 等類的未帶 符號立即值運算指令。因為實作指令集的需要,需適當修改圖 3-1 的 MIPS CPU 基本架構。

以下說明各指令類別之資料路徑。要增加一道新指令前,先了解指令 運作的資料路徑,再由原始架構作資料路徑擴充與修改,最後設計控制單 元流程控制訊號。

第一節 資料路徑

壹、程式計數器資料路徑

於第三章第一節 MIPS 相關知識中曾提到,Multiple Clock Cycles MIPS CPU 充分利用 ALU 模組執行程式計數器的功能,因此 Multiple Clock Cycles MIPS CPU 利用 ALU 及一個 PC Buffer 來計算程式記憶體位址,達 到功能模組共享的目的。而程式計數器資料路徑如圖 4-1 所示。原始 MIPS CPU 結構中,完整的 32 Bits 指令分別被存於 4 個記憶體位址,因此程式 計數器每次進行遞增加 4 的運算。

在研究中,記憶體模組為完整的 256x32 Bits Block RAM,每道 32 Bits 的指令能完整被存於一個記憶體位址之中,因此程式計數器的遞增運算只 需每次加 1。

下一道指令的記憶體位址在指令提取週期即先被計算出來,保留於 PC Buffer 中,待適當的 PC Buffer 控制訊號,載入下一道指令的位址,並送至 記憶體。

(2)

圖 4-1 程式計數器資料路徑

貳、R-Type 指令資料路徑

R-Type 指令運算執行資料路徑如圖 4-2 所示。

R-Type 指令的指令解碼需使用到 OP Code、及 Function Code 來共同 解碼,參考附錄 A。Function Code 主要決定 ALU 進行何種算術邏輯運算,

此部分的功能由 ALU Control 解碼後對 ALU 進行運算控制。而 SLL、SRL、

SRA 三個移位指令,運算資料來源為 Rt、SHAMT,運算結果回存暫存器 為 Rd,所以在 Rt_Addr 的輸入端利用多工器做位址切換選擇,並建置 ALU 運算結果回寫至 Rd 暫存器的路徑。

圖 4-2 R-Type 指令資料路徑

參、I-Type 指令資料路徑

I-Type 指令運算執行資料路徑如圖 4-3 所示。I-Type 指令為暫存器與 立即值資料運算,立即值輸入在指令格式中僅 16 Bits,經由符號擴充(Sign Extend)模組擴充為 32 Bits 再與暫存器運算。Sign Extend 可執行帶符號位 元擴充及不帶符號位元擴充,I-Type 指令之 Signed、Unsigned 運算,用多 工器切換 Signed Immediate 或 Unsigned Immediate 為運算元輸入。Rt_Addr 為目的暫存器位址,由 ALU 運算結果回存路徑存至 Rt 暫存器。

PC

Memory

A_IN

B_IN

ALU_OUT

ALU Instruction

Register

ALU Control

Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr SHAMT

Rd_Addr

ALU_FUNC

Rs_Addr Rt_Addr

Rd_Addr

MUX

Write_Data Rt_Dout Rs_Dout

ALU_Ctrl SHAMT

Register File

PC

1

A_IN

B_IN

ALU_OUT

ALU

(3)

圖 4-3 I-Type 指令資料路徑

肆、J-Type 指令資料路徑

J-Type 指令資料路徑如圖 4-4 所示。在 J-Type 指令格式中,除了 OP Code 的 6 個位元外,其餘皆為立即值輸入,在圖 3-1 的 MIPS 架構圖中,

由於每次 PC 遞增加 4,所以跳躍位址需先移位 2 個位元,再與 PC 作 OR 運算。先前提到本研究用 32 Bits 資料寬度的記憶體,每個記憶體位址能儲 存一個完整的 32 Bits 指令,所以 Jump 指令最大的跳躍範圍為((PC &

0xf0000000)|Jump_Addr)。JumpAddrExtend 模組將原本只有 26 個位元的 Jump_Addr,與目前 PC 的前六個位元做 OR 運算,成為記憶體目標位址並 存於 PC Buffer。

圖 4-4 J-Type 指令資料路徑

伍、B-Type 指令資料路徑

B-Type 指令是條件分支指令,在 B-Type 指令格式中,ALU 執行 Rs 暫存器與 Rt 暫存器資料的減法運算所產生的各項旗標(FLAGs),ALU 運算 後產生的各項旗標,經由 PC Control 模組進行條件判斷,控制 PC Buffer 是否載入新的記憶體位址。

在指令提取週期時,ALU 已預先將下一道指令的位址計算出來(PC = PC

Memory

Instruction Register

Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr

Jump_Addr JumpAddr Extend

PC

Memory

A_IN

B_IN

ALU_OUT ALU

Instruction Register Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr

Immed

Rs_Addr Rt_Addr

Rd_Addr

Write_Data Rt_Dout Rs_Dout

Register File

Sign Extend

MUX

(4)

PC+1),並儲存於 ALUOut Buffer 及 PC Buffer,所以在記憶體目標位址的 計算上會再偏移一個位址為(PC = (PC+1)+offset),將會跳到目標位址的下 一個位址。為解決這個問題,資料路徑的設計可以有 2 種解決方式:一為 由 ALUOut Buffer 取得的記憶體位址再作減 1 的運算,如圖 4-5 所示;另 一種解決方式是將再設計一個 PC 位址暫存器,儲存前一個 PC 位址值,

將前一個 PC 位址提取出來再與偏移位址運算,如圖 4-6 所示。在本研究 中採用圖 4-5 的解決方式。

圖 4-5 B-Type 指令資料路徑(一)

備註:-1 的修正是受 MIPS SPIM 模擬程式影響

圖 4-6 B-Type 指令資料路徑(二) 備註:PC-1 模組的修正是受 MIPS SPIM 模擬程式影響

陸、M-Type 指令資料路徑

通常 M-Type 指令中的 LW(Load Word)、LB(Load Byte)…等記憶體載

PC

Memory

A_IN

B_IN

ALU_OUT

ALU Instruction

Register

Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr

Immed

Rs_Addr Rt_Addr

Rd_Addr

Write_Data Rt_Dout Rs_Dout

Register File

Sign Extend

MUX

-1 PC

Control

FLAGs

MUX

ALUOut Buffer

PC

Memory

A_IN

B_IN

ALU_OUT

ALU Instruction

Register

Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr

Immed

Rs_Addr Rt_Addr

Rd_Addr

Write_Data Rt_Dout Rs_Dout

Register File

Sign Extend

MUX

PC Control

FLAGs

MUX

PC-1

(5)

入指令會花費最長的時脈週期,因為 M-Type 指令資料路徑需使用記憶體 模組。

LW 指令之資料路徑如圖 4-7 所示。LW 指令的意義是取出指定之記憶 體位址儲存的資料,寫入某指定的目標暫存器(Rt)。ALU 執行下一個 PC 位址計算外,另計算記憶體目標位址(立即值資料經 Signed Extend 模組,

執行符號位元擴充),接著等待一個時脈週期由記憶體取出所存資料,最後 回寫至暫存器堆,其他類指令就不需等待記憶體資料存取的時間。

圖 4-7 M-Type 指令(LW)資料路徑

SW(Store Word)、SB(Store Byte)記憶體儲存指令資料路徑如圖 4-8 所 示。資料路徑與 LW 指令類似,SW 指令的意義是將指定的目的暫存器資 料(Rt)回存至記憶體目標位址。因此在記憶體位址輸入端之前,使用多工 器來切換下一道指令所在位址(來源為 PC Buffer)以及記憶體目標位址(來 源為 ALUOut Buffer)。

圖 4-8 M-Type 指令(SW)資料路徑

PC

Memory

A_IN

B_IN

ALU_OUT

ALU Instruction

Register Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr

Rs_Addr Rt_Addr

Rd_Addr

Write_Data Rt_Dout Rs_Dout Register File

MUX

ALUOut Buffer

MUX

Sign Extend

MUX

Immed

Memory

A_IN

B_IN ALU Instruction

Register Addr

Write Data

Mem_Dout Inst_in

Rs_Addr Rt_Addr

Rs_Addr Rt_Addr

Rd_Addr

Write_Data Rt_Dout Rs_Dout Register File

MUX

ALU_OUT

ALUOut Buffer PC MU

X

Sign Extend Immed

MUX

(6)

第二節 控制單元

控制單元是整個 MIPS CPU 運作排程的核心,產生各種時序控制訊號 進行資料路徑資料傳遞與運算。Multiple Clock Cycles MIPS CPU 之控制單 元設計採用狀態機(State Machine)設計方式。在每一個對應狀態,產生該狀 態運作功能相關控制訊號。

每個指令控制單元狀態機設計如圖 4-9 所示。

圖 4-9 Multiple Clock Cycles MIPS CPU 狀態機 各狀態執行工作說明如下:

一、ST_IDLE:閒置狀態。閒置狀態的作用有二,一為當 RESET=1 時,

重設整個 MIPS CPU 狀態及控制訊號;二為執行 M-Type 中的 SW 指 令、B-Type 指令和 J-Type 指令完畢後,必須存取記憶體,而使用 FPGA 內部之 Block Memory 來設計記憶體,在送入指定記憶體位址後,必

ST_IF

ST_ID

ST_MEM_

ADDR

ST_

MEM_LW

ST_RT_

EXEC

ST_

MEM_SW ST_RT_

END ST_WB

OP_M_TYPE

OP_R_TYPE

OP_SW OP_LW

ST_IT_

EXEC

ST_IT_

END

OP_I_TYPE

ST_BT_

COMP

OP_B_TYPE

ST_JT_

COMP

OP_J_TYPE

Reset

ST_IDLE

(7)

須等待一個 CLOCK 的時間,記憶體才會將正確的儲存內容送出來,

因為在執行上述指令時,需先設計一個等待狀態,才能取得正確的記 憶體位址的內容,相關於 FPGA 內部的 Block Memory 資料可參考 Xilinx 公司網站(http://www.xilinx.com)。

二、ST_IF:指令提取狀態。指令提取狀態執行工作有二,一為由記憶體 載入欲執行的指令;另一為執行 PC 遞增(PC=PC+1)。因此在 MIPS CPU 中,執行指令提取工作時,亦同時進行將程式計數器指向下一道指令 所在的記憶體位址。

三、ST_ID:指令解碼/暫存器提取狀態。在這個狀態執行的工作有三,一 為判斷指令型態為 M-Type、R-Type、I-Type、B-Type 或 J-Type;二為 提取指令中所指定的暫存器內容;三為預先計算 Branch 目標位址,並 將目標位址計算結果存於 ALUOut Buffer 中,假設指令為 B-Type 指 令,即能在下一個狀態完成 B-Type 指令的執行。

四、ST_MEM_ADDR:記憶體位址計算狀態。當指令解碼狀態(ST_ID)判 斷到此道指令是 M-Type 指令時,則進入此狀態,執行記憶體參考位 址計算,表示這道指令須進行記憶體存取。M-Type 實作指令有二個,

為 SW、LW,故而在此狀態亦須再進行 M-Type 進階指令解碼。

五、ST_MEM_SW:SW 指令執行狀態。設定記憶體位址來源為 ALU 的運 算結果,將資料存回指定的記憶體位址。

六、ST_MEM_LW:LW 指令執行狀態。設定記憶體位址來源為 ALU 的運 算結果,由指定的記憶體位址將資料提取出來。

七、ST_WB:回寫狀態。為 LW 指令最後一道執行的步驟。將 ST_MEM_LW 狀態提取出的資料寫入暫存器堆中指定的暫存器。

八、ST_RT_EXEC:R-Type 指令執行狀態。R-Type 實作指令有 11 個,在 此狀態進行 R-Type 指令進階判斷,並執行 R-Type 指令中的算術邏輯 運算指令。

九、ST_RT_END:R-Type 指令執行結束狀態。R-Type 指令運算完成態,

並將運算結果存回到 R-Type 指令中指定的 Rd 暫存器。

(8)

十、ST_IT_EXEC:I-Type 指令執行狀態。I-Type 實作指令計有 5 個,因 此在此狀態必須進行 I-Type 指令進階判斷,決定 ALU 所應執行算術 邏輯運算類別,並指定 ALU 的第二個運算元輸入的來源。

十一、ST_IT_END:I-Type 指令執行結束狀態。I-Type 指令運算完成狀態,

並將運算結果存回到 I-Type 指令中指定的 Rt 暫存器。

十二、ST_BT_COMP:B-Type 指令執行狀態。B-Type 實作指令計有 6 個,

在此狀態進行 B-Type 指令進階判斷,依指令判斷結果及旗標狀態決 定 CU_PC_WRITE_COND[5:0],同時決定下一個 PC 值的來源。

十三、ST_JT_COMP:J-Type 指令執行狀態。J-Type 實作指令只有 1 個,

即無條件跳躍指令(J),跳躍目的位址為 J-Type 指令中所指定的跳躍位 址 (PC=PC[31:26] || IR[25:0]) , 在 這 個 狀 態 下 須 設 定 PC 的 來 源 (CU_PC_SRC)。

以上為控制單元各狀態設定的說明,各狀態對應產生的控制訊號列 表,如表 4-1、表 4-2 所示。

表 4-1 各狀態對應控制訊號表

State

Control Signal ST_IDLE ST_IF ST_ID ST_MEM_ADDR ST_MEM_LW ST_MEM_SW CU_IORD 0 0 0 0 1 1 CU_MEM_WE 0 0 0 0 0 1

CU_IR_WE 0 1 0 0 0 0 CU_REG_DST 0 0 0 0 0 0 CU_MEM_TO_REG 0 0 0 0 0 0

CU_REG_WE 0 0 0 0 0 0 CU_ALU_SRCA 0 0 0 1 0 0 CU_ALU_SRCB 00 01 11 11 0 0

CU_ALU_OP 0000 0000 0000 0000 0000 0000 CU_PC_SRC 00 00 00 00 00 00 CU_PC_WE_COND 000000 000000 000000 000000 000000 000000

CU_PC_WE 0 1 0 0 0 0

(9)

表 4-2 各狀態對應控制訊號表(續)

State Control Signal

ST_RT_

EXEC

ST_RT_

END

ST_IT_

EXEC

ST_IT_

END

ST_BT_

COMP

ST_JT_

COMP

ST_WRITE_

BACK

CU_IORD 0 0 0 0 0 0 0 CU_MEM_WE 0 0 0 0 0 0 0 CU_IR_WE 0 0 0 0 0 0 0 CU_REG_DST 0 1 0 0 0 0 0 CU_MEM_TO_REG 0 0 0 0 0 0 1 CU_REG_WE 0 1 0 1 0 0 1 CU_ALU_SRCA 1 0 1 0 1 0 0 CU_ALU_SRCB 00 00 FUNC1 00 00 00 00

CU_ALU_OP 0010 0000 FUNC2 0000 0001 0000 0000 CU_PC_SRC 00 00 00 00 11 10 00 CU_PC_WE_COND 000000 000000 000000 000000 FUNC3 000000 000000

CU_PC_WE 0 0 0 0 0 1 0

結合資料路徑與控制時序之完整 MIPS CPU 實作指令擴充架構圖如圖 4-10 所示。

(10)

圖 4-10 MIPS CPU 實作指令擴充架構

Memory

ALU Control Sign Extend

ALUOut Buffer

Register File InstructionR

egister

3

1

0

2

A

B

PC 0

M U X 1

Addr

Write_

Data_in

Inst_in

RS_Addr

RT_Addr

RD_Addr

Write_Data

A_IN

B_IN ALU

ALU_Out

0 M U X 1

0 M U X 1 Mem_

Dout

0 M U X 1 RS_Addr

RT_Addr

RD_Addr IMMED ALU_FUNC

SHAMT JUMP_Addr

RS_Dout

RT_Dout 0

1 2 3

M U X

SHAMT FLAGs

1

ALU_

CTRL

CU_IORD

CU_MEM_WE CU_IR_WE

CU_REG_DST

CU_REG_WE

CU_ALU_SRC

A CU_PC_SRC

CU_ALU_OP CU_ALU_SRC

B CU_MEM_TO_REG

CU_PC_WE

CU_PC_WRITE_COND[5:0]

FLAGs PC

Controller

Unsigned_exetend Sign_exetnd

-1

PC_LOAD

MUX

REG_Sel REG_SEL

REG_Dout REG_DOUT

Reg_We

JumpAddrExtend

數據

圖 4-1  程式計數器資料路徑
圖 4-3 I-Type 指令資料路徑  肆、J-Type 指令資料路徑  J-Type 指令資料路徑如圖 4-4 所示。在 J-Type 指令格式中,除了 OP  Code 的 6 個位元外,其餘皆為立即值輸入,在圖 3-1 的 MIPS 架構圖中, 由於每次 PC 遞增加 4,所以跳躍位址需先移位 2 個位元,再與 PC 作 OR 運算。先前提到本研究用 32 Bits 資料寬度的記憶體,每個記憶體位址能儲 存一個完整的 32 Bits 指令,所以 Jump 指令最大的跳躍範圍為((PC &
圖 4-9 Multiple Clock Cycles MIPS CPU  狀態機  各狀態執行工作說明如下:
表 4-2  各狀態對應控制訊號表(續)  State  Control Signal  ST_RT_ EXEC  ST_RT_ END  ST_IT_ EXEC  ST_IT_ END  ST_BT_ COMP  ST_JT_ COMP  ST_WRITE_BACK  CU_IORD  0 0 0 0 0 0  0  CU_MEM_WE  0 0 0 0 0 0  0  CU_IR_WE 0 0 0 0 0 0  0  CU_REG_DST  0 1 0 0 0 0  0  CU_MEM_TO_REG
+2

參考文獻

相關文件

[r]

4 .專業選修課程應至少選修 33 學分,其中除 第一學年之不分組專業選修課程,以及所有

下列關於 CPU 的敘述,何者正確?(A)暫存器是 CPU 內部的記憶體(B)CPU 內部快取記憶體使 用 Flash Memory(C)具有 32 條控制匯流排排線的 CPU,最大定址空間為

有人做過--個實驗:組織三組人,讓他們分別步行到十公里以外的三個 村子。

有關於 Java 程式語言,下列何者敘述不正確?(A)Java 程式語言透過 extends 提供多重繼承 (Multiple

• MIPS consolidates multiple, quality programs into a single program to improve quality care.. https://www.healthit.gov/topic/meaningful-use-and-macra/meaningful-use

在這段記載中說到羅什為其小乘師說大乘方等空義,由於無法乍然令其

‧ 「種籽」計畫名稱及編號 : 善用社區資源促進 常識科的探究式學習 (KP0107). ‧