處理器:資料路徑與控制

ALU 控制(ALU control)

/ ALU = AY-el-yoo /

主控制單元決定大方向——這是載入、儲存,還是算術運算?——但它刻意不替每一道算術指令算出確切的 ALU 運算。最後這個細緻的決定,交給一個叫 ALU 控制的小幫手:一塊小邏輯,唯一的工作就是告訴 ALU 確切要做哪個功能(加、減、AND、OR、小於則設定,等等)。

它分兩層運作,好讓主控制保持簡單。主控制發出一個簡短、粗略的提示(常稱 ALUOp),只把指令分類:「00」也許表示「這是載入或儲存,所以只要為位址做加法」,「01」也許表示「這是分支,所以做減法來比較」,「10」也許表示「這是 R-type,再深入看」。當提示是「10」時,ALU 控制讀額外的運算碼位元(在 MIPS 是 function 欄位,在 RISC-V 是 funct 欄位)來選出確切運算。輸出是那幾位元的 ALU 運算碼,替這個週期選定 ALU 的功能。

為什麼要把它拆出來?因為同一個 ALU 被多種用途重複利用——為載入位址做加法、為分支比較做減法、為 R-type 做真正的算術——而選擇取決於不同指令類別的不同位元。這個兩層方案(主控制給粗略的 ALUOp,ALU 控制做細部解碼)是一種乾淨的方式,把一大堆算術指令對應到一個共用的 ALU,又不讓主控制表變得臃腫。它是把一個決定拆成「快速猜測」加「細節查表」的小巧而經典的範例。

對載入,ALUOp =「00」告訴 ALU 控制「只要做加法」(以形成基底+偏移)。對 R-type,ALUOp =「10」要它看 function 位元:若編碼為減法,ALU 控制輸出減法碼;若編碼為 AND,就輸出 AND 碼。

一個小型的兩層解碼器:主控制的粗略 ALUOp 加上運算碼位元,選出確切的 ALU 功能。

ALU 控制只選「哪一個」運算,它不做算術——那是 ALU 的工作,屬於算術那一節。把兩者分開,正是兩層方案的用意。

又稱
ALU control unitALU 控制單元