文章目錄
Chapter4_邏輯設計基礎
部件介紹
組合邏輯部件不遵循時序,有輸入就有輸出
時序部件:
- 存儲信息 Store information
- PC 指令內存, 數據內存
-組合邏輯
- 與門
- 加法器
- 多路選擇開關 Multiplexer
- ALU 算術邏輯單元
- 9 條指令但不是9種運算
- lw,sw的加法
- 減法
- AND , OR
- set-on-less-than
- 共五種運算
- 9 條指令但不是9種運算
-狀態組件
寄存器輸出信號在上升沿變化(有效表示邏輯高,無效表示邏輯低)
寫控制的寄存器,需要在時鐘沿上升時write寫入信號爲真,纔會根據輸入改變輸出
時鐘控制策略
- 組合邏輯電路至於時鐘間隔中
- 從時序部件取出,置入時序部件,從寄存器取出,放入內存或寄存器中
- 組合邏輯完成後的下一個時鐘再傳回PC+4
數據通路(Datapath)和控制器
-Datapath組件
CPU內處理數據和地址的組件
- 寄存器 Registers
- 算術邏輯單元 ALU
- 兩個32位輸入,一個32位輸出,一個1位輸出(表示結果是否爲0)
- 多路選擇器 MUX
- 內存 Data Memory
- 其實是DCache,在教學模型中簡化了
- 程序計數器 PC
- 任何類型的指令都需要使用到PC
- **符號擴展 Sign-extend **
- 有符號數擴展——高位填充
寄存器堆,ALU
-操作簡述
R-format Instruction
- 讀取兩個寄存器
- 進行算術邏輯運算
- 結果寫入寄存器
Load/Store Instructions
- 讀取寄存器
- 使用16位立即數進行計算地址(使用算術邏輯單元進行符號擴展)
- Load: 讀取內存,更新寄存器
- Store: 將寄存器值寫入內存
Branch Instructions
- 需要兩種指令beq, bne的原因:
- 跳轉範圍一共是232 ,而分支跳轉的範圍是216 ,若beq無法達到該位置,則可以使用bne加j完成跳轉
- 計算分支目標地址
- 比較操作數
-操作詳述(結合圖片&暫不考慮控制信號)
-
R-format Instructions (指令包含三個寄存器)
- 獲取三個寄存器地址,進入寄存器堆,
- 將兩個讀取數據置入ALU,通過ALUOP控制運算方法。
- 輸出值爲數值,無需進入數據內存,直接返回到寄存器堆。
- 將結果寫入目標寄存器中
- PC獲取新的指令地址(PC+4),完成
-
Load/Store Instructions (指令包含兩個寄存器和一個16位有符號立即數)
-
獲取寄存器地址,進入寄存器堆,立即數通過擴展進入ALU
-
將內存地址讀取置入ALU,與立即數進行加法運算得到準確的內存地址
-
如果是Load指令
-
進入數據內存讀取數據,返回到寄存器堆
-
將結果寫入目標寄存器中(寫寄存器通過RegDst控制)
這裏值得注意的一點是,雖然我們寫的是
lw $t0 (0)$a0
但是$t0作爲需要被寫入的寄存器,在機器碼中處於[20:16]的位置,也就是如圖所示,Read register2的位置,於是通過多重選擇器,導入到了Write register的位置,進行寫入操作
-
-
如果是Store指令
-
將從Read Register2讀取到的數據(Read Data2)傳輸到數據內存的寫入區(Write Data)進行寫入操作
之所以是從Read Register2讀取數據,見上面Load中解釋
-
-
PC獲取新的指令地址,完成
-
-
Branch Instructions (指令包含兩個寄存器和一個16位有符號立即數)
-
獲取寄存器地址,進入寄存器堆,立即數通過擴展進入Shift-left左移兩位
左移兩位是因爲地址信息需要乘以數據長度
-
兩個寄存器讀取的數據進入ALU進行運算,ZERO位輸出是否相等的結果
-
結果通過組合邏輯電路輸入到右上角的MUX進行多重選擇,若滿足條件,則使用PC+4+L,否則使用PC+4
組合邏輯電路此圖未顯示
-
PC獲取新的指令地址,完成
-
控制信號詳述
ALU controller
ALU控制信號的分配
- Load/Store : F = add
- Branch: F = subtract
- R-type F depends on function field
ALU control | Function |
---|---|
0000 | AND |
0001 | OR |
0010 | add |
0110 | subtract |
0111 | set-on-less-than |
1100 | NOR |
每個數據通路同時只能進行一個操作
ALU 控制信號生成方式
- 根據2位操作碼和6位功能字段生成ALU控制信號
通過將[27:26]的ALUop和[6:0]的Funct字段聯合控制,可以由組合邏輯電路產生控制信號,具體實現方式可以通過列出帶無關項 的真值表獲得。(如下圖)
主控制單元
數據通路如何得知需要進行哪些操作呢?除了ALU通過ALU控制信號得知運算單元需要進行的運算方式,讀寫控制,多重選擇都需要控制信號的注入,而這些控制信號,就由主控制單元根據[31:26]的Op字段操作碼運算得出~
控制信號
- RegDst [Register Destination]
- 在寄存器堆處,用於區分存取指令和R指令(存取指令寫入rt,R指令寫入rd)
- RegWrite [Register Write]
- 寄存器堆可寫入
- ALUSrc [
我並不能想到全稱是什麼]- 用於MUX,ALU操作數之一爲Read Data1,第二個操作數可選,ALUSrc用於選擇Read Data2或是Sign-extend後的offset立即數
- **PCSrc ** [
Src可能是System resource controller?]- 正常情況,PC自增之後替換原PC,但在分支指令中,若分支爲真,則需要用PC+4+L替換原PC,PCSrc即用於Branch Instructions
- MemRead [Memory Read]
- 內存數據讀取使能,用於load word指令
- MemWrite [Memory Write]
- 內存數據寫入使能,用於save word指令
- MemtoReg [Memory to Register?]
- 寫入寄存器數據是否來自內存,用於lw指令
下圖即爲不同指令所對應需要的控制位信息:
(未完,若有錯誤請大佬不吝指正)