數位邏輯與基本元件

暫存器檔(register file)

暫存器檔是處理器那一小組超快的工作暫存器,聚在一起,好讓一條指令能迅速抓取它所需的那幾個值。想想你就放在桌上的那幾枝鉛筆和幾張便條:數量不多,但隨手可得,這正是你把當前的工作放在那裡、而非放在遠處櫃子裡的原因。暫存器檔就是處理器的那張桌子——通常只有 16 或 32 個暫存器,每個一個字寬,握住指令所作用的運算元和它們所產生的結果。

在機制上,暫存器檔是一個暫存器陣列,加上依號碼讀寫它們的定址邏輯。一個給簡單處理器用的典型暫存器檔有兩個讀埠和一個寫埠:要讀時,你提供兩個暫存器號碼,解碼器選出那兩個暫存器,它們的內容出現在兩個讀輸出上(所以像「add x1, x2」這樣的指令能一次取得兩個來源運算元);要寫時,你提供一個暫存器號碼、新資料和一個寫致能,在時脈邊緣那一個暫存器被更新。讀是組合的、在週期內立即完成,而寫是同步的、在時脈邊緣發生——這個區分對管線化很重要。

它為何重要:暫存器檔坐落在記憶體階層的最頂端,比任何快取都快,它是資料路徑每一個週期都從中讀運算元、往其中寫結果的工作空間。它是從這些邏輯基本元件通往真實處理器的橋樑:把一個暫存器檔(儲存)、一個算術邏輯單元(運算)和多工器(操縱)組合起來,用一個控制有限狀態機驅動它們,你就有了一條資料路徑的骨架。誠實的提醒是:它之所以保持快,正因為它小——把它做大很多會讓它變慢,這也是指令集只對外提供幾十個架構暫存器的原因之一。

要執行「add x5, x6, x7」(算 x6 + x7、存入 x5),暫存器檔的讀埠為 x6 和 x7 在同一週期送出兩個運算元;算術邏輯單元把它們相加;而在時脈邊緣,寫埠以 x5 為寫位址、寫致能拉起,把和存入 x5。兩讀一寫,全在一個幾十項的檔上完成。

兩讀一寫、都在一個週期內:暫存器檔就是處理器在上面運算的那張桌子。

暫存器檔握住程式所指名的架構暫存器,但它不是主記憶體、也不是快取。它小得多、快得多,以一個極小的暫存器號碼、而非完整的記憶體位址來定址,而它僅僅幾十項的容量,正是編譯器費盡心思把熱門的值留在暫存器裡的原因。

又稱
register set暫存器組暫存器檔案