RISC CPU對轉移指令的處理及仿真分析
本文引用地址:http://www.j9360.com/article/171905.htm
2.3.2 BTC存儲
當轉移指令第一次執行時,BTC在當前時鐘啟動存儲任務,把該指令執行的信息寫入對應的單元中,對于BCC指令,確定2BC的初始狀態。同時也把該行的VI置為有效。BTC采用隨機替換策略確定數據入口:在復位或Cache清零之后,按順序填充Cache,如果BTC寫滿,則隨機選通一行進行替換。
2.3.3 BTC命中
在取指周期開始時如果發現當前取指地址包含在BTC的TAG中,并且對應行的VI也有效,則認為BTC命中,從而啟動命中任務:讀出命中行的數據,把DI送到指令總線,如果是CALL指令,轉移目標地址作為下一條指令的地址;如果是BCC 指令則需要判斷跳轉是否發生:當標志位有效時,根據條件碼與標志位判斷,否則根據HI進行預測,然后確定下一條指令的地址:跳轉時為轉移目標地址,不跳轉為PC+2。對于帶A參數的BCC指令,在跳轉不執行時,要禁止DI在下一時鐘進入譯碼級。BTC命中的流程如圖3。
2.3.4 BTC檢查
如果前一周期BTC命中,則在當前周期開始時啟動BTC檢查任務;如果前一周期BTC是根據HI預測BCC的跳轉,那么在當前時鐘標志位有效后,要重新判斷跳轉決定是否正確,如果不正確就要進行更正,給出正確的取指地址,請求在下一時鐘禁止譯碼級或執行級。同時還要根據最終的跳轉情況和HI的更新算法更新HI。BTC檢查的流程圖如圖4。
3 結論
整個RISC CPU用Verilog HDL語言進行了描述,并針對標準程序進行了仿真,仿真結果表明,采用上述方法處理轉移指令可以明顯提高流水線的吞吐率。由于在轉移指令后面插入了延時槽指令,轉移指令的執行與程序順序執行時完全相同; BTC的使用雖然在硬件上增加了一些開銷,但使轉移指令再次執行時基本不占用流水線資源,大大提高了CPU的效率
評論