1. 程式人生 > >計算機組成與設計(八)—— 單周期處理器

計算機組成與設計(八)—— 單周期處理器

uri 處理器 lec zuche 輸入 style 我們 方式 gis

處理器的設計步驟

  1. 分析指令系統,得出對數據通路的需求
  2. 為數據通路選擇合適的組件
  3. 連接組件,建立數據通路
  4. 分析每條指令的實現,以確定控制信號
  5. 集成控制信號,完成完整的數據通路

具體設計步驟

(一)分析指令系統

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位):寄存器編號,將該編號寄存器的內容放到busARb(5位):寄存器編號,將該編號寄存器的內容放到busBRw(5位):寄存器編號,在時鐘上升沿,如果寫使能信號有效,將busW的內容存入該寄存器。

busAbusB:兩組32位的數據輸出,busW:一組32位的數據輸入

技術分享圖片

存儲器

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

Date In:32位的數據輸入信號。Date Out:32位的數據輸出信號。

技術分享圖片

(四)建立數據通路

建立數據通路,即根據指令的需求連接組件。指令的需求包括所有指令的共同需求、不同指令的不同需求。

所有指令的共同需求

主要包括取指令和更新PC

技術分享圖片

不同指令的不同需求

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

技術分享圖片

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

技術分享圖片

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

技術分享圖片

數據通路初步完成

技術分享圖片

(五)控制信號的集成

現有指令所需的控制信號

技術分享圖片

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

opcodefunc決定了8個信號

技術分享圖片

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

技術分享圖片

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

技術分享圖片

根據數字邏輯的知識,我們很容易求出每個控制信號關於opcodefunc的邏輯表達式

例如,求$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

計算機組成與設計(八)—— 單周期處理器