ARM架構與體系學習(二)——3級流水線

看到彙編中不少關於程序返回與中斷返回時處理地址都很特別,仔細想一想原來是流水線做用的效果。因此,決定總結學習下ARM流水線。學習

ARM7處理器採用3級流水線來增長處理器指令流的速度,能提供0.9MIPS/MHz的指令處理速度。spa

PS:code

MIPS(Million Instruction Per Second)表示每秒多少百萬條指令。好比0.9MIPS,表示每秒九十萬條指令。教程

MIPS/MHz表示CPU在每MHz的運行速度下能夠執行多少個MIPS,如0.9MIPS/MHz則表示若是CPU運行在1MHz的頻率下,每秒可執行90萬條指令。it

若是CPU在20MHz的頻率下,每秒可運行1800萬條指令。MIPS/MHz能夠很好的反映CPU的速度。io

3級流水線如上圖所示(PC爲程序計數器),流水線使用3個階段,所以指令分3個階段執行。class

⑴ 取指從存儲器裝載一條指令效率

⑵ 譯碼識別將要被執行的指令基礎

⑶ 執行處理指令並將結果寫會寄存器程序

之前學過的51單片機,由於比較簡單,因此它的處理器只能完成一條指令的讀取和執行後,纔會執行下一條指令。這樣,PC始終指向的正在「執行」的指令。

而對於ARM7來講由於是3級流水線,因此把指令的處理分爲了上面所述的3個階段。

因此處理時實際是這樣的:ARM正在執行第1條指令的同時對第2條指令進行譯碼,並將第3條指令從存儲器中取出。

因此,ARM7流水線只有在取第4條指令時,第1條指令纔算完成執行。

下圖生動形象的說明了3級流水線的處理機制

下面一句話很關鍵:不管處理器處於何種狀態,程序計數器R15(PC)老是指向「正在取指」的指令,而不是指向「正在執行」的指令或者正在「譯碼」的指令。

人們通常會習慣性的將正在執行的指令做爲參考點,即當前第1條指令。

因此,PC老是指向第3條指令,

或者說PC老是指向當前正在執行的指令地址再加2條指令的地址。


處理器處於ARM狀態時,每條指令爲4個字節,因此PC值爲正在執行的指令地址加8字節,便是:

PC值 = 當前程序執行位置 + 8字節

處理器處於Thumb狀態時,每條指令爲2字節,因此PC值爲正在執行的指令地址加4字節,便是:

PC值 = 當前程序執行位置 + 4字節

下面一個例子就很好的說明了這個問題。

0x4000 ADDPC,PC,#4 ;正在被執行的指令,將地址值PC+4寫入PC
0x4004 ...;正在被譯碼的指令
0x4008 ...;正在被取指的指令,PC=0x4008
0x400C ...;PC+4=0x400C


另外補充說明就是根據以上描述,流水線只有被指令填滿時才能發揮最大效能,即每時鐘週期完成一條指令的執行(僅單週期指令)。

若是程序發生跳轉,流水線會被清空,這將須要幾個時鐘才能使流水線被再次填滿。所以,儘可能地少使用跳轉指令能夠提升程序的執行效率。


以上就是對ARM73級流水線的一個總的認識,參考來自學習ARM時的教材——《ARM嵌入式系統基礎教程(第二版)》。

相關文章
相關標籤/搜索