新聞中心

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

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

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

本文引用地址:http://m.butianyuan.cn/article/257092.htm

在圖2.6中的指令序列中,處理器的每個(gè)邏輯單元在每個(gè)指令都是活動(dòng)的??梢钥闯?a class="contentlabel" href="http://m.butianyuan.cn/news/listbylabel/label/流水線">流水線的執(zhí)行與存儲器訪問密切相關(guān)。存儲器訪問限制了程序執(zhí)行必須花費(fèi)的指令周期數(shù)。

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

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

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

【例2.3】

指令序列為:

0x8000 LDR pc,[pc,#0]

0x8004 NOP

0x8008 DCD jumpAdress

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

2.5級流水線組織

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

Tprog = (Ninst×CPI)/ fclk

式中:

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

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

fclk:表示處理器的時(shí)鐘頻率。

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

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

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

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

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

注意

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

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




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

評論


相關(guān)推薦

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

關(guān)閉