日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】ARM流水线技术

發布時間:2024/4/24 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】ARM流水线技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 流水線概述
    • 02. 流水線分類
    • 03. 影響流水線性能的因素
    • 04. 附錄

01. 流水線概述

處理器按照一系列步驟來執行每一條指令,典型的步驟如下:

(1)從存儲器讀取指令(Fetch)。

(2)譯碼以鑒別它屬于哪一條指令(Decode)。

(3)從指令中提取指令的操作數(這些操作數往往存在于寄存器 Reg 中)。

(4)將操作數進行組合以得到結果或存儲器地址(ALU)。

(5)如果需要,則訪問存儲器以存儲數據(Mem)。

(6)將結果寫回到寄存器堆(Res)。

并不是所有的指令都需要上述每一個步驟,但是,多數指令需要其中的多個步驟。這些步驟往往使用不同的硬件功能,如 ALU 可能只在

第 4 步中用到。因此,如果一條指令不是在前一條指令結束之前就開始,那么在每一步驟內處理器只有少部分的硬件在使用。

有一種方法可以明顯改善硬件資源的使用率和處理器的吞吐量,這就是在當前一條指令結束之前就開始執行下一條指令,即通常所說的流

水線(Pipeline)技術。流水線是 RISC處理器執行指令時采用的機制。使用流水線,可在取下一條指令的同時譯碼和執行其他指令,從而

加快執行的速度。可以把流水線看作是汽車生產線,每個階段只完成專門的處理器任務。

采用上述操作順序,處理器可以這樣來組織:當一條指令剛剛執行完步驟(1)并轉向步驟(2)時,下一條指令就開始執行步驟(1)。

從原理上說,這樣的流水線應該比沒有重疊的指令執行快 6 倍,但由于硬件結構本身的一些限制,實際情況會比理想狀態差一些。

02. 流水線分類

2.1 3級流水線

到 ARM7 為止的 ARM 處理器使用簡單的 3 級流水線,它包括下列流水線級。

(1)取指令(Fetch):從寄存器裝載一條指令。

(2)譯碼(Decode):識別被執行的指令,并為下一個周期準備數據通路的控制信號。在這一級,指令占有譯碼邏輯,不占用數據通

路。

(3)執行(Excute):處理指令并將結果寫回寄存器。

下圖 所示為 3 級流水線指令的執行過程。

當處理器執行簡單的數據處理指令時,流水線使得平均每個時鐘周期能完成1條指令。但1條指令需要3個時鐘周期來完成,因此,有3

個時鐘周期的延時(Latency),但吞吐率(Throughput)是每個周期1條指令。

2.2 5 級流水線

所有的處理器都要滿足對高性能的要求,直到 ARM7 為止,在 ARM 核中使用的 3 級流水線的性價比是很高的。但是,為了得到更高的性

能,需要重新考慮處理器的組織結構。有兩種方法來提高性能。

(1)提高時鐘頻率。時鐘頻率的提高,必然引起指令執行周期的縮短,所以要求簡化流水線每一級的邏輯,流水線的級數就要增加。

(2)減少每條指令的平均指令周期數 CPI。這就要求重新考慮 3 級流水線 ARM 中多于 1 個流水線周期的實現方法,以便使其占有較少的

周期,或者減少因指令相關造成的流水線停頓,也可以將兩者結合起來。

3 級流水線 ARM 核在每一個時鐘周期都訪問存儲器,或者取指令,或者傳輸數據。只是抓緊存儲器不用的幾個周期來改善系統性能,效

果并不明顯。為了改善 CPI,存儲器系統必須在每個時鐘周期中給出多于一個的數據。方法是在每個時鐘周期從單個存儲器中給出多于 32

位數據,或者為指令或數據分別設置存儲器。

基于以上原因,較高性能的 ARM 核使用了 5 級流水線,而且具有分開的指令和數據存儲器。把指令的執行分割為 5 部分而不是 3 部分,

進而可以使用更高的時鐘頻率,分開的指令和數據存儲器使核的 CPI 明顯減少。

在 ARM9TDMI 中使用了典型的 5 級流水線,5 級流水線包括下面的流水線級。

(1)取指令(Fetch):從存儲器中取出指令,并將其放入指令流水線。

(2)譯碼(Decode):指令被譯碼,從寄存器堆中讀取寄存器操作數。在寄存器堆有 3 個操作數讀端口,因此,大多數 ARM 指令能在

1 個周期內讀取其操作數。

(3)執行(Execute):將其中 1 個操作數移位,并在 ALU 中產生結果。如果指令是Load 或 Store 指令,則在 ALU 中計算存儲器的地

址。

(4)緩沖/數據(Buffer/Data):如果需要則訪問數據存儲器,否則 ALU 只是簡單地緩沖 1 個時鐘周期。

(5)回寫(Write-Back):將指令的結果回寫到寄存器堆,包括任何從寄存器讀出的數據。

下圖所示為 5 級流水線指令的執行過程。

在程序執行過程中,PC 值是基于 3 級流水線操作特性的。5 級流水線中提前 1 級來讀取指令操作數,得到的值是不同的(PC + 4 而不是

PC + 8)。這里產生代碼不兼容是不容許的。但 5 級流水線 ARM 完全仿真 3 級流水線的行為。在取指級增加的 PC 值被直接送到譯碼級

的寄存器,穿過兩級之間的流水線寄存器。下一條指令的 PC + 4 等于當前指令的PC + 8,因此,未使用額外的硬件便得到了正確的R15。

2.3 13級流水線

在 Cortex-A8 中有一條 13 級的流水線,但是由于 ARM 公司沒有對其中的技術公開任何相關的細節,這里只能簡單介紹一下,從經典

ARM 系列到現在的 Cortex 系列,ARM 處理器的結構在向復雜的階段發展,但沒改變的是 CPU 的取指指令和地址關系,不管是幾級流水

線,都可以按照最初的 3 級流水線的操作特性來判斷其當前的 PC 位置。這樣做主要還是為了軟件兼容性上的考慮,由此可以判斷的是,

后面 ARM 所推出的處理核心都想滿足這一特點,感興趣的讀者可以自行查閱相關資料。

03. 影響流水線性能的因素

3.1 互鎖

在典型的程序處理過程中,經常會遇到這樣的情形,即一條指令的結果被用作下一條指令的操作數。例如,有如下指令序列:

LDR R0,[R0,#0] ADD R0,R0,R1 ;在 5 級流水線上產生互鎖

從例子可以看出,流水線的操作產生中斷,因為第 1 條指令的結果在第 2 條指令取數時還沒有產生。第 2 條指令必須停止,直到結果產

生為止。

3.2 跳轉指令

跳轉指令也會破壞流水線的行為,因為后續指令的取指步驟受到跳轉目標計算的影響,因而必須推遲。但是,當跳轉指令被譯碼時,在它

被確認是跳轉指令之前,后續的取指操作已經發生。這樣一來,已經被預取進入流水線的指令不得不被丟棄。如果跳轉目標的計算是在

ALU 階段完成的,那么在得到跳轉目標之前已經有兩條指令按原有指令流讀取。顯然,只有當所有指令都依照相似的步驟執行時,流水線

的效率達到最高。如果處理器的指令非常復雜,每一條指令的行為都與下一條指令不同,那么就很難用流水線實現。

04. 附錄

4.1 ARM處理器開發詳解筆記

總結

以上是生活随笔為你收集整理的【ARM】ARM流水线技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。