3級(jí)流水線ARM組織如圖:
?(1)處理器狀態(tài)的寄存器堆(Register Bank):它有兩個(gè)讀端口和一個(gè)寫端口,每個(gè)端口都可以訪問(wèn)任意寄存器,再加上專門訪問(wèn)程序計(jì)數(shù)器PC的一個(gè)附加讀端口和一個(gè)附加寫端口。
(2)桶形移位寄存器(Barrel Shifter):它可以把一個(gè)操作數(shù)移位或循環(huán)移位任意位數(shù)。
(3)ALU:完成指令集要求的算術(shù)或邏輯功能。
(4)地址寄存器(Address Register)和增值器(Incrementer):它選擇和保存所用的存儲(chǔ)器地址,并在需要時(shí)產(chǎn)生順序地址。
(5)數(shù)據(jù)輸出寄存器(Data-out Register)和數(shù)據(jù)輸入寄存器(Data-in Register):保存?zhèn)鬏數(shù)酱鎯?chǔ)器和從存儲(chǔ)器輸出的數(shù)據(jù)。
(6)指令譯碼器和相關(guān)的控制邏輯(Instruction Decode and Control)。
下面的例子顯示了一條單周期指令在流水線上的執(zhí)行過(guò)程。
ADD r1,r2
單周期指令在流水線上的執(zhí)行過(guò)程如下圖所示。
在ADD指令中,需要訪問(wèn)兩個(gè)寄存器操作數(shù),B總線上的數(shù)據(jù)移位后與A總線上的數(shù)據(jù)在ALU中組合,再將結(jié)果寫回寄存器堆。在指令執(zhí)行過(guò)程中,程序計(jì)數(shù)器的數(shù)據(jù)放在地址寄存器中,地址寄存器的數(shù)據(jù)送入增值器。然后將增值后的數(shù)據(jù)復(fù)制到寄存器堆的r15(程序計(jì)數(shù)器),同時(shí)還復(fù)制到地址寄存器,作為下一次取指的地址。
到ARM7為止的ARM處理器使用簡(jiǎn)單的3級(jí)流水線,包括下列流水線級(jí)。
(1)取指(fetch)——從寄存器裝載一條指令。
(2)譯碼(decode)——識(shí)別被執(zhí)行的指令,并為下一個(gè)周期準(zhǔn)備數(shù)據(jù)通路的控制信號(hào)。在這一級(jí),指令占有譯碼邏輯,不占用數(shù)據(jù)通路。
(3)執(zhí)行(excute)——處理指令并將結(jié)果寫回寄存器。
下圖顯示了3級(jí)流水線指令執(zhí)行過(guò)程。
當(dāng)處理器執(zhí)行簡(jiǎn)單的數(shù)據(jù)處理指令時(shí),流水線使得平均每個(gè)時(shí)鐘周期能完成一條指令。但一條指令需要3個(gè)時(shí)鐘周期來(lái)完成,因此,有3個(gè)時(shí)鐘周期的延時(shí)(latency),但吞吐率(throughput)是每個(gè)周期一條指令。下面通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明流水線的機(jī)制。
指令序列為:
ADD r1 r2
SUB r3 r2
CMP r1 r3
流水線指令序列如下圖所示。
在第一個(gè)周期,內(nèi)核從存儲(chǔ)器取出指令A(yù)DD;在第二個(gè)周期,內(nèi)核取出指令SUB,同時(shí)對(duì)ADD譯碼;在第三個(gè)周期,指令SUB和ADD都沿流水線移動(dòng),ADD被執(zhí)行,而SUB被譯碼,同時(shí)又取出CMP指令??梢钥闯?,流水線使得每個(gè)時(shí)鐘周期就可以執(zhí)行一條指令。
當(dāng)執(zhí)行多條指令時(shí),流水線的執(zhí)行不一定會(huì)按照如下圖所示的規(guī)則,下圖顯示了有STR指令時(shí)的流水線狀態(tài)。
圖中在單周期指令A(yù)DD后出現(xiàn)了一條數(shù)據(jù)存儲(chǔ)指令STR。訪問(wèn)主存儲(chǔ)器的指令用陰影表示,可以看出在每個(gè)周期都使用了存儲(chǔ)器。同樣,在每一個(gè)周期也使用了數(shù)據(jù)通路。在執(zhí)行周期、地址計(jì)算和數(shù)據(jù)傳輸周期,數(shù)據(jù)通路都是被占用的。在譯碼周期,譯碼邏輯負(fù)責(zé)產(chǎn)生下一周期用到的數(shù)據(jù)通路的控制信號(hào)。
從圖中的指令序列中可以看出,處理器的每個(gè)邏輯單元在每個(gè)指令都是活動(dòng)的,流水線的執(zhí)行與存儲(chǔ)器訪問(wèn)密切相關(guān),存儲(chǔ)器訪問(wèn)限制了程序執(zhí)行必須花費(fèi)的指令周期數(shù)。
ARM的流水線執(zhí)行模式導(dǎo)致了一個(gè)結(jié)果,就是程序計(jì)數(shù)器PC(對(duì)使用者而言為r15)必須在當(dāng)前指令執(zhí)行前計(jì)數(shù)。例如,指令在其第一個(gè)周期為下下條指令取指,這就意味著PC必須指向當(dāng)前指令的后8個(gè)字節(jié)(其后的兩條指令)。
當(dāng)程序中必須用到PC時(shí),程序員要特別注意這一點(diǎn)。但在大多數(shù)正常情況下,不用考慮這一點(diǎn),匯編器或編譯器可自動(dòng)處理這些細(xì)節(jié)。
下面的例子顯示了流水線下程序計(jì)數(shù)器PC的使用情況。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-787009.html
指令序列為:
0x8000 LDR pc,[pc,#0]
0x8004 NOP
0x8008 DCD jumpAdress
當(dāng)指令LDR處于執(zhí)行階段時(shí),pc=address+8即0x8008。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-787009.html
到了這里,關(guān)于3級(jí)流水線ARM組織概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!