---
# System prepended metadata

title: '計算機組織與結構 L4 處理器 : 資料路徑與控制'
tags: [計算機組織與結構, '處理器 : 資料路徑與控制', L4]

---

# 計算機組織與結構 L4 處理器 : 資料路徑與控制

計算機實作規格有兩種
- **單一時脈計算機**
    - 所有指令的執行都要在一個時脈週期內完成
    - 時脈週期長度取決於最長執行時間的指令
    - 效率不佳
    
- **多重時脈計算機**
    - 將指令分成好幾個步驟，每個步驟都是一個時脈週期
    - 執行時間較長的指令需要較多的步驟
    - 減少單一時脈造成的時間浪費

## 抽象化設計

**指令集 :** 建構計算機的規格

**Design Abstraction :** 設計複雜系統時，將較低層的細節掩藏起來，以簡化抽象化設計原則

- 基本零件
    - **Register File :** 
        ![image](https://hackmd.io/_uploads/rk5LPkdq6.png =40%x)
    - **ALU :**
        ![image](https://hackmd.io/_uploads/Skz9wkd5p.png =40%x)
    - **Data Memory :**
        ![image](https://hackmd.io/_uploads/Sk0nwyOcp.png =40%x)
    - **Instruction Memory :**
        ![image](https://hackmd.io/_uploads/B1n1_yO9T.png =40%x)
    - **Adder :**
        ![image](https://hackmd.io/_uploads/rkRNOkOc6.png =40%x)
    - **Sign Extension Unit :**
        ![image](https://hackmd.io/_uploads/B1bwOy_5T.png =40%x)
    - **Program Counter :**
        ![image](https://hackmd.io/_uploads/BJMYOyd56.png =40%x)
    - **Processor (CPU) :**
        - 包含 Datapath 和 Control Unit

## 單一時脈計算機 (Single Cycle Machine) Datapath 的建構

**RTL (Register Transfer Language) :** 暫存器轉移敘述

1. **Instruction Fetch**
    ![image](https://hackmd.io/_uploads/SJTDtJuqT.png =50%x)
    
2. **R-Tpye Instruction**
    ![image](https://hackmd.io/_uploads/H1C5o1O5T.png =60%x)

3. **Load Word**
    ![image](https://hackmd.io/_uploads/Hyo-21_cp.png =60%x)
    
4. **Store Word**
    ![image](https://hackmd.io/_uploads/BJHShyO5p.png =60%x)
    
5. **Branch On Equal**
    ![image](https://hackmd.io/_uploads/H1HDhyuqT.png =60%x)
    ![image](https://hackmd.io/_uploads/rknu2JOqT.png =60%x)

6. **Memory & R-Tpye (2, 3, 4)**
    ![image](https://hackmd.io/_uploads/ByGy61O96.png =60%x)
    
7. **Memory & R-Type & Instruction Fetch (1, 2, 3, 4)**
    ![image](https://hackmd.io/_uploads/r1wGpku9a.png =60%x)
    
8. **Memory & R-Type & Instruction Fetch & Branch (1, 2, 3, 4, 5)**
    ![image](https://hackmd.io/_uploads/B1hYp1dc6.png =60%x)

9. ⭐**With Control Unit**
    ![image](https://hackmd.io/_uploads/SJ7eA1Oc6.png =80%x)

10. **With Jump**
    ![image](https://hackmd.io/_uploads/HyFLCJ_c6.png =80%x)
    
## 單一時脈計算機的 Control Unit

- 用 **Control Unit** 的其中兩根訊號線 **ALUOp** 控制 **ALU Control**
    - 降低主要控制單元的尺寸
    - 加快控制單元的速度
    ![image](https://hackmd.io/_uploads/r1wWgg_cp.png =70%x)
    ![image](https://hackmd.io/_uploads/BJV9lgOqT.png =70%x)

- 
    | 控制信號 | Effect When Deasserted | Effect When Asserted |
    | -------- | -------- | -------- |
    | **RegDst** | 寫入的目的暫存器是 **rt** | 寫入的目的暫存器是 **rd** |
    | **RegWrite** |None|允許寫入資料|
    |**ALUSrc** | ALU 的第二個運算元為 **register 第二個輸出** | ALU 第二個運算元為 **sign extend 後的結果** |
    |**PCSrc**| PC 為 **PC + 4** |PC 為**分支目的位址**|
    |**MemRead**|None|允許要被讀的資料輸出記憶體|
    |**MemWrite**|None|允許要被寫的資料輸入記憶體|
    |**MemtoReg**|要寫入 register 的資料是來自 **ALU 的計算結果**| 要寫入 register 的資料是來自 **memory**|

- 
    | 指令 | RegDst | ALUSrc | MemtoReg | RegWrite |
    | -------- | -------- |---|---|---|
    | **R-Type** | 1 | 0 | 0 | 1 |
    | **lw** | 0 | 1 | 1 | 1 |
    | **sw** | x | 1 | x | 0 |
    | **beq** | x | 0 | x | 0 |
    | **addi** | 0 | 1 | 0 | 1 |
    
    | 指令 | MemRead | MemWrite | Branch | ALUOp1 | ALUOp0 |
    | -------- | -------- | -- | -- |---|---|
    | **R-Type** | 0 | 0 | 0 | 1 | 0 |
    | **lw** | 1 | 0 | 0 | 0 | 0 |
    | **sw** | 0 | 1 | 0 | 0 | 0 |
    | **beq** | 0 | 0 | 1 | 0 | 1 |
    | **addi** | 0 | 0 | 0 | 0 | 0 |
    
- **PLA (Programmable Logic Array) :** 是 Control Unit 的其中一種電路方式
    ![image](https://hackmd.io/_uploads/r1lbHl_9a.png =70%x)

- **Dataflow Chart**
    - **Dataflow for R-Type**
        - **PIR MAMR**
        ![image](https://hackmd.io/_uploads/BJD9gMF5p.png =80%x)

    - **Dataflow for lw**
        - **PIR ADMR**
        ![image](https://hackmd.io/_uploads/HJLAlft9p.png =80%x)


    - **Dataflow for sw**
        - **PIR AD**
        ![image](https://hackmd.io/_uploads/S1DHbzt9T.png =80%x)


    - **Dataflow for Branch**
        - **PIR MAaM**
        ![image](https://hackmd.io/_uploads/HkDtbzY9T.png =80%x)


    - **Dataflow for addi**
        - **PIR AMR**
        ![image](https://hackmd.io/_uploads/rJ3FUxO9p.png =80%x)

    - **Dataflow for Jump**
        - **PI SCM**
        ![image](https://hackmd.io/_uploads/ryrAWztcT.png =80%x)

    
    - **Chart Comparision**
        ![image](https://hackmd.io/_uploads/r1c3LeucT.png =70%x)

## 多重時脈計算機 (Multi Cycle Machine)

- **每個步驟**只能使用**一個主要功能單元**
    - **Memory**
    - **Register**
    - **ALU**

- 指令執行步驟分為
    - **Instruction Fetch (IF)**
    - **Instruction Decode & Register Fetch (ID)**
    - **Execution, Memory Address Computation or Branch Completion (EXE)**
    - **Memory Access or R-Type Instruction Completion (MEM)**
    - **Memory Read Completion (WB)**
    
    ![image](https://hackmd.io/_uploads/B102DxO9a.png)