1. 簡介
21264處理器是一款4-way,亂序執行的超標量處理器,采用0.35um的CMOS工藝,工作電壓是2.2V, 工作頻率是466-667MHz; 處理器能支持60條指令,也即ROB的深度是60; Load/Store指令也采取亂序執行, 總共7級流水。I-CACHE和D-CACHE都是采用2路組相連,64KB
2級取指,1級rename, 1級issue, 1級read register file, 1級執行,1級寫回,共7級流水。
2. 取指
第一級訪問I-CACHE: 根據PC值讀I-CACHE, 得到一組cache set(也即兩個cache line), data+tag
第二級根據PC中的tag判斷是否hit, 然后選出正確的data(instruction)送到譯碼器和rename模塊。
同時將PC值送到分支預測器中,預測下一拍的PC值。這里的預測分為line/way預測和分支預測,line/way預測指的是根據PC值,預測出我們需要的inst位于cacheline中哪個way(圖中的successor way), 以及對應的PC值(圖中的index)。這里的預測地址(BTB)直接放到了I-CACHE中
缺點是每條cacheline都包括line/way的預測信息,但是很多cache line中其實沒有分支指令,從而造成了浪費。并且當一條cacheline被替換時,對應的line/way預測信息就被清除了,但獨立的BTB和cacheline 就沒有關系。
分支預測采用局部分支預測和全局分支預測競爭的的方式預測方向
3. 寄存器重命名
使用統一的PRF進行寄存器重命名,其中mapq的深度和ROB的深度是一致的,表示流水線最多可以執行多少條指令。下圖中的save map stage是checkpoint,用來做恢復用的,也是80個entry。我理解map contert-addressable memories 是用來處理uop個數超過限制的,4條指令,每條指令最多兩個source, 所以最多8個source, 有些指令在這個周期處理不了,需要留到下個周期。register scoreboard 是確定src 和dst atag,然后發送請求給arbiter, 請求分配若干個ptag, 并將atag和ptag的對應關系記錄下來。
4. 發射
包括兩個發射隊列,整數和浮點發射隊列,整數發射隊列有20個entry, 被4個執行單元共享;浮點有15個entry, 被2個執行單元共享
5. 執行單元
6. 提交
一條指令執行完之后并不會馬上離開流水線,而是會等到它之前的所有指令都執行完成之后,才會離開ROB,此時它的結果才可以更新處理器的狀態, 并對外界可見
如果一條指令在即將離開流水先后發生了異常,那么需要刷掉流水線中這條指令后的所有指令,rename, issueq, rob, pipeline中的都得刷掉。