處理器:資料路徑與控制
資料記憶體(data memory)
如果說指令記憶體是告訴廚師該做什麼的食譜,那資料記憶體就是存放實際食材的儲藏室。它是程式存放數值的大型儲存池——陣列元素、結構欄位,任何太大或太多而無法放進小小暫存器檔的東西。載入(load)把一份食材從儲藏室取出;儲存(store)把一份放回去。
在單週期資料路徑裡,資料記憶體是一個盒子,有位址輸入、寫入資料輸入、讀出資料輸出,以及兩個控制訊號:MemRead 與 MemWrite。一道載入指令在 ALU 算出位址,拉高 MemRead,該位址上的值便流回暫存器檔;一道儲存指令算出位址,把暫存器的值放到寫入資料輸入,拉高 MemWrite,值就被寫入。只有載入與儲存指令會碰資料記憶體;算術指令完全不碰它。
兩個誠實的重點。第一,圖上把資料記憶體與指令記憶體分開,只是為了讓教學資料路徑保持簡單(哈佛式分流);真實核心共用一個位址空間,並使用分開的快取。第二,這是唯一能對大記憶體又讀又寫的階段,正因如此它位於單週期設計的長關鍵路徑上——也因此一道載入通常是釘住時脈週期的最壞情況指令。
對「lw x5, 8(x1)」:ALU 算出 x1 + 8 作為位址,拉高 MemRead,資料記憶體交回那裡的 4 位元組值,再寫入暫存器 x5。對「sw x5, 8(x1)」則算出同一位址,但拉高 MemWrite,把 x5 的值存入。
大型數值儲存區;只有載入與儲存指令會讀寫它,由 MemRead/MemWrite 把關。
別把資料記憶體和暫存器檔搞混。暫存器是 CPU 內部少數幾個超快、有名字的格子;資料記憶體是 CPU 外較大、較慢的儲存區,只能透過載入與儲存才能存取。
又稱
另見