處理器:資料路徑與控制

單週期設計的限制

想像不論工作要花多久,每位員工每天領一樣的工資,而這份工資由整棟樓裡最慢的工作來定。做兩分鐘活的人,領的卻像做了一整天。這正是單週期處理器的核心缺陷:時脈週期被固定在最慢指令的長度,而每一道指令——無論快慢——都被收取同樣長的這一個週期。

具體來說原因如下。在單週期設計裡,每道指令必須在一個時脈滴答內完成,所以這個滴答必須長到能容納資料路徑中最壞的關鍵路徑。那條最壞的路徑通常是載入:提取+讀暫存器+ALU 算位址+存取資料記憶體+寫回暫存器,也許 8 個延遲單位。只需要提取+讀暫存器+ALU+寫回(比方 6 個單位)的算術指令,以及分支(也許 5 個單位),都被拉長到同樣的 8 單位週期。快的指令並不因為快而得到任何好處。

另外兩項代價讓情況更糟。第一,每個硬體單元每週期只能用一次,所以單週期設計無法重複使用同一個加法器去同時算 PC + 4 與分支目標——它需要分開的加法器,浪費硬體。第二,沒有任何指令能勝過最壞情況時間,所以即使一支全由快速加法組成的程式,也以載入的速度執行。解法就是別再向每個人收最壞情況的工資:把執行拆成更小的步驟(多週期),讓簡單指令以較少步驟完成,再之後讓這些步驟跨指令重疊(管線化)。單週期的限制,正是後續一切的動機。

若載入 = 8 奈秒、加法 = 6 奈秒、分支 = 5 奈秒,單週期時脈必須是 8 奈秒。一支半數加法、半數分支的程式,原則上平均每道指令約可做到 5.5 奈秒,但在單週期機器上每道指令都要花滿 8 奈秒——大約三分之一的時間被浪費。

每道指令都付出最壞情況(載入)的週期時間,於是簡單指令浪費了大部分的週期。

解法不是單純把時脈調快——在不破壞載入的前提下,週期無法縮短到最壞關鍵路徑以下。真正的解法是重新結構化(多週期,再到管線化),讓不同指令花不同的工作量。

又称
single-cycle bottleneckworst-case clock problem單週期瓶頸