處理器的設計步驟
- 分析指令系統,得出對數據通路的需求
- 為數據通路選擇合適的組件
- 連接組件,建立數據通路
- 分析每條指令的實現,以確定控制信號
- 集成控制信號,完成完整的數據通路
具體設計步驟
(一)分析指令系統
MIPS的所有指令是非常多的,我們只實現其簡化版,包含如下6種:

(二)需求分析
需求分析,需要存放指令地址的32位寄存器(PC),需要存放指令的存儲器,可讀,數據和指令均為32位(MEM[PC])。還需要一個寄存器堆,用來保存源操作數和目的操作數,一個ALU進行運算。
(三)選擇組件
所以我們需要如下組件:
- 算術邏輯單元(ALU):操作數為2個32位數,來自寄存器或擴展后的立即數
- 立即數擴展部件:將一個16位立即數擴展為32位,擴展方式包括零擴展和符號擴展
- 程序計數器(Program Counter,PC):是一個32位寄存器,支持兩種加法:加4或加立即數
- 寄存器堆(Register File):包含32個寄存器,每個32位寬;支持讀和寫操作
- 存儲器:一個是只讀的指令寄存器,一個可讀寫的數據存儲器,兩者地址和數據都是32位(這兩個存儲器實際對應CPU中的指令高速緩存和數據高速緩存,雖然馮·諾伊曼結構要求指令和數據不加區分的存儲,但在CPU的高速緩存是做區分的)
寄存器堆
內部構成是3個32位寄存器。Ra(5位):寄存器編號,將該編號寄存器的內容放到busA。Rb(5位):寄存器編號,將該編號寄存器的內容放到busB。Rw(5位):寄存器編號,在時鍾上升沿,如果寫使能信號有效,將busW的內容存入該寄存器。
busA和busB:兩組32位的數據輸出,busW:一組32位的數據輸入

存儲器
Address:32位的地址信號,該信號指定一個存儲單元,將其內容送到數據輸出信號。Write Enable:寫使能信號,在時鍾上升沿,如果寫使能信號有效(為1),將數據輸入信號的內容存入地址信號指定的存儲單元。
Date In:32位的數據輸入信號。Date Out:32位的數據輸出信號。

(四)建立數據通路
建立數據通路,即根據指令的需求連接組件。指令的需求包括所有指令的共同需求、不同指令的不同需求。
所有指令的共同需求
主要包括取指令和更新PC

不同指令的不同需求
加法和減法指令的需求是最簡單的

邏輯運算指令有立即數參與,需要增加兩個二路選擇器,一個選擇數據輸入來自寄存器還是立即數,另一個選擇目的寄存器是rd還是rs

訪存指令需要對立即數進行符號擴展,同時需要一個數據存儲器用來讀取和寫入數據

數據通路初步完成

(五)控制信號的集成
現有指令所需的控制信號

控制信號哪來的呢?肯定來自指令。我們說opcode和func決定了指定功能,理所當然,控制信號也由它們決定。
opcode和func決定了8個信號

以add指令(add rd,rs,rt;PC = PC + 4)為例,看需要將哪些信號設為有效,哪些設為無效,哪些任意。如圖所示

用同樣的分析方法,我們可以得到其它的指令的信號設置,它們的邏輯表達式如下:

根據數字邏輯的知識,我們很容易求出每個控制信號關於opcode和func的邏輯表達式
例如,求$RegDest$,按行觀察
$RegDest = add + sub$
$add = rtype · func5 · ~func4·~func3·~func2·~func1·~func0$
$sub = rtype · func5 · ~func4·~func3·~func2·func1·~func0$
$rtype = ~op5·~op4·~op3·~op2·~op1·~op0$
同理可得到其它表達式的邏輯表達式

觀察發現,這些表達式都是先相與、再相或,所以可用如下的電路來實現

參考鏈接:https://www.coursera.org/learn/jisuanji-zucheng/lecture/kRJer/506-kong-zhi-xin-hao-de-ji-cheng
