---
# System prepended metadata

title: prpelining設計

---

# prpelining設計
設計流水線處理器涉及多個步驟。以下是一個概述：

* 檢視資料路徑和控制圖表：
    * 從單周期資料路徑開始。
    * 單週期控制是指在每個時脈週期內都完成整個指令的執行，控制訊號只需根據指令類型決定。
* 將資料路徑分成階段：
    * IF（指令提取）、ID（指令解碼和Register File讀取）、EX（執行或地址計算）、MEM（數據內存訪問）、WB（寫回）。
* 將資源與階段關聯：
    * 確定每個階段所需的資源，例如register、ALU、數據存儲器等。
* 確保流程不衝突，或找出解決方法：
    * 確保在同一時間段內不會有多個指令需要相同的資源。
    * 解決衝突的方法可能包括：轉發（forwarding）、停頓（stalling）、分支預測（branch prediction）等。
* 在適當的階段施加控制：
    * 在每個階段中發出相應的控制信號，以確保正確的操作進行。

將單周期資料路徑拆分為多個階段是實現流水線處理器的第一步。以下是將單周期資料路徑分割為五個階段的示例：
* 指令提取（IF）：
    * PC：用於存儲下一個要執行的指令的地址。
    * Instruction Memory：用於存儲指令。
* 指令解碼（ID）：
    * Instruction Register：存儲從指令內存中讀取的指令。
    * Register File：存儲所有的 CPU register。
    * Read Data 1 和 Read Data 2：從Register File讀取的兩個操作數。
* 執行（EX）：
    * ALU：執行算術和邏輯操作。
    * ALU 控制：指定要執行的操作。
* 存儲器訪問（MEM）：
    * Data Memory：用於存儲數據。
    * Write Data：要寫入數據內存的數據。
    * MemtoReg 控制：指定從數據內存還是 ALU 的結果寫回到Register File。
* 寫回（WB）：
    * Write Data：將結果寫回Register File。
    * register寫入控制：確定Register File何時接收寫入的數據。

![image](https://hackmd.io/_uploads/HJK5Mrfi6.png)

