1.pc選擇和取指階段
這個階段必須選擇程式計數器pc的當前值,並且**下乙個pc值。pc選擇邏輯從三個程式計數器源中進行選擇。當一條**錯誤的分支進入訪存階段時,會從流水線暫存器m(訊號m_vala)中讀出該指令valp的值(指明下一條指令的位址),當ret指令進入寫回階段時,會從流水線暫存器w(訊號w_valm)中讀出返回位址。其他情況會使用存放在流水線暫存器f(訊號f_predpc)中的pc的**值。我們將指令的狀態和計算分成兩個部分。在取指階段,可以測試由於指令位址越界引起的記憶體錯誤,還可以發現非法指令或halt指令。必須推遲到訪存階段才能發現非法資料位址。
2.解碼和寫回階段
我們觀察到,提供給寫埠的暫存器id來自於寫回階段(訊號w_dese和w_dstm),而不是來自於解碼階段,這是因為我們希望進行寫的目的暫存器是由寫回階段中的指令指定的。因為只有call指令和跳轉指令在後面的階段中需要valp的值,而這些指令並不需要從暫存器檔案a埠中讀出的值,因此我們會將訊號vala和valp合併。
流水線化的實現應該是給處於最早流水線階段中的**源以較高的優先順序。只有指令pop %rsp會關心在訪存階段或寫回階段中的兩個源之間的**優先順序,因為只有這種指令能同時寫兩個暫存器。
寫回階段的一小部分是保持不變的,由於流水線暫存器w儲存著最近完成的指令的狀態,很自然地要用這個值來表示整個處理器狀態。
3.執行階段
標號為「set cc」的邏輯以訊號m_stat和w_stat作為輸入,這個邏輯決定了是否要更新條件碼。這些訊號用來檢查一條導致異常的指令正在通過後面的流水線階段的情況,因此,任何對條件碼的更新都會被禁止。
4.訪存階段
許多從流水線暫存器m和w來的訊號被傳遞到較早的階段,以提供寫回的結果、指令位址以及**的結果。
為了完成我們的pipe設計,我們還要建立流水線控制邏輯,這個邏輯必須處理下面四種控制情況,這些情況是其它機制(例如資料**和分支**)不能處理的。
載入/使用冒險:在一條從記憶體中讀出乙個值的指令和一條使用該值的指令之間,流水線必須暫停乙個週期。我們保持流水線暫存器f和d固定不變,並且在執行階段插入乙個氣泡。
處理ret:流水線必須暫停直到ret指令到達寫回階段。我們插入三個氣泡來實現。
**錯誤的分支:在分支邏輯發現不應該選擇分支之前,分支目標處的幾條指令已經進入流水線了。必須取消這些指令,並從跳轉指令後面的那條指令開始取指。當跳轉指令到達執行階段就可以檢測到**錯誤,下乙個時鐘週期就會在解碼和執行階段插入氣泡,取消兩條不正確的已取指令,在同一時鐘週期,流水線將正確的指令讀取到取指階段。
異常:當一條指令導致異常,我們想要禁止後面的指令更新程式設計師可見的狀態,並且在異常指令到達寫回階段時,停止執行。
我們會採取措施防止後面的指令修改程式設計師可見的狀態:
(1)禁止執行階段中的指令設定條件碼。
(2)向記憶體階段中插入氣泡,以禁止向資料記憶體中寫入。
(3)寫回階段中有異常指令時,暫停寫回階段,因而暫停了流水線。
測試各階段的check List
常用測試checklist,可繼續補充 迭代測試前checklist 檢查時間 檢查人序號 內容檢查結果 1提前確定測試範圍以及提交測試包的時間和方式 2評估工作量,確定測試週期,確定測試重點以及測試策略 3安排測試計畫,並郵件發出 4根據測試內容,準備測試環境和測試資料 5跟蹤測試包提交時間 測試...
RUP各階段簡述
用況驅動旨在為到最終產品為止的每個階段都可以回溯到使用者的真正需求。以體系結構為中心是指關注體系結構模式的開發,以引導後續系統,保證系統的平滑演進。每一次迭代包括迭代計畫 迭代評價和一些具體活動。關於核心工作流中的五個活動 需求 分析 設計 實現和測試較好理解,這裡不再贅述。下面對 rup的四個階段...
EFI BIOS各階段介紹
sec是power on 後執行的第乙個部分,要求cpu應事先知道一些平台配置資訊和hw支援特性 產生臨時memory,可以是 processor cache,static ram 或其他在系統早期就可以訪問的system memory。除此還要知道 早期的memory 可以 map 到 boot ...