處理器:資料路徑與控制

控制訊號(control signal)

一個控制訊號就是一條導線,它的值——通常只是 0 或 1——扳動資料路徑裡的一個開關。想像洗衣機上的按鈕:一個啟動脫水,一個打開進水閥,一個選熱水或冷水。每個控制訊號就是這樣一個按鈕,而控制單元替每道指令按下正確的按鈕組合。

每個有名字的訊號各做一件特定的事。RegWrite = 1 啟用寫暫存器檔(0 則暫存器不變);MemWrite = 1 寫入資料記憶體,MemRead = 1 從中載入;ALUSrc 選擇 ALU 的第二運算元是暫存器的值還是符號擴展後的立即值;MemToReg 選擇寫回的值來自 ALU 還是記憶體;Branch 與 ALU 的零旗標結合,決定下一個 PC 是分支目標還是 PC + 4。也有多位元訊號——ALU 運算碼是幾個位元,挑選加、減還是 AND。在某一瞬間,所有這些導線上的值合起來,正好定義了資料路徑這個週期要做什麼。

誠實的心智模型:控制訊號是把指令「說」給硬體聽的那套字母。兩道不同的指令,不過是這些 0 與 1 的兩種不同樣式。弄錯其中一個——比方在加法時拉高 MemWrite——即使算式沒錯,也會破壞記憶體。正因如此,控制邏輯被仔細地製成表(控制表)並加以驗證:單一個設錯的訊號,會悄悄地讓一道指令出錯。

RegWrite 正是儲存與載入這兩道在其他方面幾乎相同的指令的差別:儲存讓 RegWrite = 0(它寫記憶體,不寫暫存器),載入則設 RegWrite = 1(它寫暫存器)。一條導線,相反的結果。

每個控制訊號是扳動一個開關的一條導線;所有訊號合起來的樣式定義了指令的動作。

「拉高(asserted)」只是表示訊號被設為其作用值(常為 1)。訊號為 0 並非「什麼都沒有」——它主動表示「不要做這件事」,例如 MemWrite = 0 明確禁止儲存。

又稱
control line控制線