章七至章九總結

章七至章九總結

 

1.這幾章多爲具體指令的實現,基本的原理沒有什麼變化,重複性很強,屬於一通百通型.

2.涉及到的一些概念:

      乘加器: 在數字信號處理的濾波器、FFT、卷積及各種矢量運算中,由於要執行

Σb(n)*x(n - k) 一類的運算,這類運算的乘法和加法總是同時出現,因此DSP中就希望將乘法器和加法器相結合,在一個時鐘週期完成一次乘、加運算,並且累加乘法運算的結果。這樣的運算單元稱爲乘法累加器

      流水線暫停機制:由於某些階段的指令需要不止一個時鐘週期來完成運算,這時候就需要暫停流水線,以等待指令完成.

3.實現除法:

試商法.移位和減法相結合.書上的方法和用筆算十進制除法的方式很相像.這一段我看了好幾遍.最後發現正確的理解思路是動手寫,把理論,流程圖理解下來,知道每一步爲什麼這樣做,然後去看代碼,就容易理解了.在其他地方,也叫作基於減法的除法器.

參見http://blog.csdn.net/rill_zhen/article/details/7961937

最簡單的方法:移位除法.

 

4.延遲槽.

      這個概念已經很老了,有了分支預測之後,它的用處不大.

5.精確/非精確異常

 

 

在多發射亂序執行的流水線 CPU 上,從指令進入流水線到異常事件的發生,期間要經過若干流水級,此時 PC 的值已指向其後的某條指令,在實現非精確異常的 CPU 上就把此時的 PC 值作爲引起異常指令的所在(爲了表達的方便,記爲 eptr)。

 

簡單地說就是 eptr 的指向,並非真正的引起異常的指令之所在,而是其後面的某條指令所在。

 

引用:

簡單地說就是 eptr 的指向就是真正引起異常的指令之所在

 

而實現精確異常的 CPU,則在最後指令提交時 (commit) 按指令流的順序提交,異常的產生也在該指令提交時,這樣就能精確計算出引起異常的指令相對於當前 PC 的偏移,從而保證精確異常。

 

也就是說當異常產生時,之前的預備工作(即取指,譯碼,當然PC隨之增長)便被廢棄。CPU從異常中返回時,再重新做讀取和譯碼的工作。

 

總之,不管是何類異常,eptr 之前的所有指令都會被執行完成 (commit之後),eptr 之後的指令不會被執行。   來自http://blog.chinaunix.net/uid-26817832-id-3146408.html

6.load相關

 概念:在加載數據之前,系統以錯誤的值做了運算.

解決方法: 在加載數據之前暫停流水線.

Key:判斷load相關

若上一條指令是加載指令,且加載指令要加載的寄存器就是當前指令要通過regfile端口讀取的值.則存在load相關,需要進行暫停流水線.

 

 

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章