新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM體系結構之:流水線

        ARM體系結構之:流水線

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257092.htm

        9TDMI中使用了典型的5級。9TDMI的組織結構如圖2.7所示。

        5級包括下面的級:

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

        · 譯碼(decode):指令被譯碼,從寄存器堆中讀取寄存器操作數。在寄存器堆中有3個操作數讀端口,因此,大多數指令能在1個周期內讀取其操作數。

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

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

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

        圖2.8顯示了5級流水線指令的執行過程。

        圖2.7 5級流水線的組織結構

        圖2.8 5級流水線

        在程序執行過程中,PC值是基于3級流水線操作特性的。5級流水線中提前1級來讀取指令操作數,得到的值是不同的(PC+4而不是PC+8)。這產生的代碼不兼容是不容許的。但5級流水線ARM完全仿真3級流水線的行為。在取指級增加的PC值被直接送到譯碼級的寄存器,穿過兩極之間的流水線寄存器。下一條指令的PC+4等于當前指令的PC+8,因此,未使用額外的硬件便得到了正確的r15。

        3.6級流水線ARM組織

        在ARM10中,將流水線的級數增加到6級,使系統的平均處理能力達到了1.3Dhrystone MISP/MHz。圖2.9顯示了6級流水線上指令的執行過程。

        圖2.9 6級流水線

        2.2.3 影響流水線性能的因素

        1.互鎖

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

        【例2.4】

        有如下指令序列:

        LDR r0,[r0,#0]

        ADD r0,r0,r1 ;在5級流水線上產生互鎖

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

        2.跳轉指令

        跳轉指令也會破壞流水線的行為,因為后續指令的取指步驟受到跳轉目標計算的影響,因而必須推遲。但是,當跳轉指令被譯碼時,在它被確認是跳轉指令之前,后續的取指操作已經發生。這樣一來,已經被預取進入流水線的指令不得不被丟棄。如果跳轉目標的計算是在ALU階段完成的,那么,在得到跳轉目標之前已經有兩條指令按原有指令流讀取。

        解決的辦法是,如果有可能最好早一些計算轉移目標,當然這需要硬件支持;如果轉移指令具有固定格式,那么可以在解碼階段預測跳轉目標,從而將跳轉的執行時間減少到單個周期。但要注意,由于條件跳轉與前一條指令的條件碼結果有關,在這個流水線中,還會有條件轉移的危險。

        盡管有些技術可以減少這些流水線問題的影響,但是,不能完全消除這些困難。流水線級數越多,問題就越嚴重。對于相對簡單的處理器,使用3~5級流水線效果最好。

        顯然,只有當所有指令都依照相似的步驟執行時,流水線的效率達到最高。如果處理器的指令非常復雜,每一條指令的行為都與下一條指令不同,那么就很難用流水線實現。

        存儲器相關文章:存儲器原理



        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 集安市| 五峰| 达州市| 磐石市| 克东县| 乡城县| 呼和浩特市| 老河口市| 上饶市| 崇阳县| 安康市| 苗栗县| 新平| 新闻| 朝阳县| 灵川县| 洪江市| 雷州市| 巴青县| 天祝| 通渭县| 延安市| 通道| 井研县| 清镇市| 南溪县| 宿州市| 柳河县| 普格县| 安平县| 舟曲县| 吉安市| 清水河县| 阿合奇县| 孟州市| 天峻县| 东丰县| 广丰县| 信宜市| 化州市| 普定县|