ARM體系結(jié)構(gòu)之:流水線
在圖2.6中的指令序列中,處理器的每個邏輯單元在每個指令都是活動的。可以看出流水線的執(zhí)行與存儲器訪問密切相關(guān)。存儲器訪問限制了程序執(zhí)行必須花費的指令周期數(shù)。
ARM的流水線執(zhí)行模式導致了一個結(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級流水線ARM組織
所有的處理器都要滿足對高性能的要求。直到ARM7為止,在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)文章:存儲器原理
評論