新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM體系結(jié)構(gòu)之:流水線

        ARM體系結(jié)構(gòu)之:流水線

        作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

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

        在圖2.6中的指令序列中,處理器的每個邏輯單元在每個指令都是活動的。可以看出的執(zhí)行與存儲器訪問密切相關(guān)。存儲器訪問限制了程序執(zhí)行必須花費的指令周期數(shù)。

        執(zhí)行模式導(dǎo)致了一個結(jié)果,就是程序計數(shù)器PC(對使用者而言為r15)必須在當前指令執(zhí)行前計數(shù)。例如,指令在其第一個周期為下下條指令取指,這就意味著PC必須指向當前指令的后8個字節(jié)(其后的第2條指令)。

        當程序中必須用到PC時,程序員要特別注意這一點。大多數(shù)正常情況下,不用考慮這一點,它由匯編器或編譯器自動處理這些細節(jié)。

        例2.3顯示了下程序計數(shù)器PC的使用情況。

        【例2.3】

        指令序列為:

        0x8000 LDR pc,[pc,#0]

        0x8004 NOP

        0x8008 DCD jumpAdress

        當指令LDR處于執(zhí)行階段時,pc=address+8即0x8008。

        2.5級流水線組織

        所有的處理器都要滿足對高性能的要求。直到7為止,在ARM核中使用的3級流水線的性價比是很高的。但是,為了得到更高的性能,需要重新考慮處理器的組織結(jié)構(gòu)。執(zhí)行一個給定的程序需要的時間由下式?jīng)Q定:

        Tprog = (Ninst×CPI)/ fclk

        式中:

        Ninst:表示在程序中執(zhí)行的ARM指令數(shù);

        CPI:表示每條指令的平均時鐘周期;

        fclk:表示處理器的時鐘頻率。

        因為對給定程序(假設(shè)使用給定的優(yōu)化集并用給定的編譯器來編譯)Ninst是常數(shù),所以,僅有兩種方法來提供性能。

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

        第二,減少每條指令的平均指令周期數(shù)CPI。這就要求重新考慮3級流水線ARM中多于1個流水線周期的實現(xiàn)方法,以便使其占有較少的周期,或者減少因指令相關(guān)造成的流水線停頓,也可以將兩者結(jié)合起來。

        3級流水線ARM核在每一個時鐘周期都訪問存儲器,或者取指令,或者傳輸數(shù)據(jù)。只是抓緊存儲器不用的幾個周期來改善系統(tǒng)系統(tǒng)性能,效果是不明顯的。為了改善CPI,存儲器系統(tǒng)必須在每個時鐘周期中給出多于一個的數(shù)據(jù)。方法是在每個時鐘周期從單個存儲器中給出多于32位數(shù)據(jù),或者為指令或數(shù)據(jù)分別設(shè)置存儲器。

        基于以上原因,較高性能的ARM核使用了5級流水線,而且具有分開的指令和數(shù)據(jù)存儲器。把指令的執(zhí)行分割為5部分而不是3部分,進而可以使用更高的時鐘頻率,分開的指令和數(shù)據(jù)存儲器使核的CPI明顯減少。

        注意

        分開的指令和數(shù)據(jù)存儲器。一般是分開的Cache連接到統(tǒng)一的指令和數(shù)據(jù)存儲器上。

        存儲器相關(guān)文章:存儲器原理




        關(guān)鍵詞: 流水線 指令譯碼器 ARM

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 宜宾县| 比如县| 云林县| 科尔| 吐鲁番市| 潮安县| 永嘉县| 资阳市| 灵台县| 洛阳市| 连山| 新巴尔虎右旗| 阳江市| 马公市| 晴隆县| 江津市| 得荣县| 潍坊市| 临沂市| 汨罗市| 阿拉善左旗| 西乌珠穆沁旗| SHOW| 沅陵县| 临漳县| 富蕴县| 西林县| 昆山市| 兴仁县| 辽阳县| 弋阳县| 苗栗市| 汨罗市| 威远县| 九台市| 江阴市| 尼木县| 志丹县| 玛沁县| 囊谦县| 毕节市|