什么是ARM流水線
流水線(Pipelining)是 RISC(精簡指令集)處理器用來執(zhí)行指令的機(jī)制,通過獲取指令來加速執(zhí)行,而其他指令同時(shí)被解碼和執(zhí)行。這反過來又允許內(nèi)存系統(tǒng)和處理器連續(xù)工作。每個(gè) ARM 系列的流水線設(shè)計(jì)都不同。
流水線是一種設(shè)計(jì)技術(shù)或過程,它在提高計(jì)算機(jī)和微控制器處理器中的數(shù)據(jù)處理效率方面發(fā)揮著重要作用。通過將處理器保持在一個(gè)連續(xù)的獲取、解碼和執(zhí)行過程中,稱為(FETCH-DECODE-EXECUTE(F&E) 循環(huán))。
由于 RISC 強(qiáng)調(diào)編譯器的復(fù)雜性,ARM 器件需要流水線。每一級(jí)流水相當(dāng)于1個(gè)周期,即n個(gè)階段=n個(gè)周期。
圖1 三級(jí)流水線示意圖
如圖1,F(xiàn)etch (取指)從內(nèi)存中加載一條指令;Decode(譯碼)識(shí)別要執(zhí)行的指令;Execute (執(zhí)行)處理指令并將結(jié)果write back(寫回)到寄存器;通過重疊執(zhí)行不同指令的上述不同階段,提高了執(zhí)行速度。
圖2 F&E循環(huán)示意圖
ARM 流水線特性
ARM 流水線在完全通過execution stage之前不會(huì)處理該指令。在執(zhí)行階段,PC總是指向指令地址+8字節(jié);當(dāng)處理器處于thumb state時(shí),PC 總是指向指令地址 + 4 個(gè)字節(jié);在執(zhí)行分支指令或通過直接修改 PC 進(jìn)行分支時(shí),會(huì)導(dǎo)致 ARM 內(nèi)核刷新它的流水線;即使已引發(fā)中斷,執(zhí)行階段的指令也會(huì)完成其執(zhí)行。
ARM7系列
如圖1所示,它有 3 級(jí)流水線。它可以在3個(gè)周期內(nèi)完成它的過程。它具有基本的 FETCH-DECODE-EXECUTE(F&E) 循環(huán)。這就是為什么 ARM 7 的吞吐量低于其其他家族成員的原因。它處理 32 位數(shù)據(jù)。
ARM 9系列
圖3 五級(jí)流水線示意圖
ARM 9 中的流水線與 ARM 7 類似,但ARM 9有 5 個(gè)階段,完成該過程需要5個(gè)周期。Fetch(取值)-它將從內(nèi)存中獲取指令。Decode(解碼) - 它解碼在第一個(gè)周期中獲取的指令。ALU(arithmetic logic unit,即算術(shù)邏輯單元) - 它執(zhí)行(Execute)在前一階段已解碼的指令。LS1(Memory) 加載/存儲(chǔ)由加載或存儲(chǔ)指令指定的數(shù)據(jù)。LS2(Write) 提取(零或符號(hào))擴(kuò)展由字節(jié)或半字加載指令加載的數(shù)據(jù)。由于階段和效率的增加,吞吐量比 ARM 7 高 10%-13%。ARM 9 的核心頻率略高于 ARM 7。
ARM 10系列
圖4 六級(jí)流水線示意圖
這是一個(gè)六級(jí)流水線。這又需要 6 個(gè)周期才能完成該過程。與 ARM 9 相同,但有一個(gè)issue階段,用于檢查指令是否準(zhǔn)備好在以便當(dāng)前階段解碼。它的吞吐量幾乎是 ARM 7 的兩倍。核心頻率高于ARM 9。流水線的階段數(shù)量可能會(huì)根據(jù)每個(gè)周期處理的指令集增加或減少(在大多數(shù)情況下,階段傾向于增加以提高效率)。
基本ARM微架構(gòu)
圖5 某arm微架構(gòu)示意圖
Barrel Shifter:Barrel Shifter(桶形移位器)是一種數(shù)字電路,可以將數(shù)據(jù)字移位指定位數(shù),而無需使用任何時(shí)序邏輯,僅使用純組合邏輯,即它固有地提供二進(jìn)制操作。
ALU:該單元執(zhí)行各種算術(shù)和邏輯運(yùn)算。
Address register and increment:寄存器存儲(chǔ)地址,增量器遞增相同以指向下一條指令。
Data register:數(shù)據(jù)寄存器,當(dāng)數(shù)據(jù)寫入內(nèi)存或從內(nèi)存中讀取時(shí),它用作一個(gè)緩沖區(qū)來存儲(chǔ)數(shù)據(jù)。
Instruction Decoder:顧名思義,它對指令進(jìn)行解碼并相應(yīng)地發(fā)出控制信號(hào)。因此,指令解碼器與發(fā)出控制信號(hào)的控制邏輯相關(guān)聯(lián)。指令通過數(shù)據(jù)總線(在底部)獲取并提供給指令解碼和控制單元。該單元對指令進(jìn)行解碼,,然后指令由 ALU、乘法器和桶形移位器使用寄存器組中的寄存器執(zhí)行。
CPI和MIPS
CPI( Clock cycle Per Instruction)表示每條計(jì)算機(jī)指令執(zhí)行所需的時(shí)鐘周期,有時(shí)簡稱為指令的平均周期數(shù)??梢杂脕肀硎?a class="article-link" target="_blank" href="/baike/1552575.html">CPU的性能。對CPU來說,在一個(gè)時(shí)鐘周期內(nèi),CPU僅完成一個(gè)最基本的動(dòng)作。時(shí)鐘脈沖是計(jì)算機(jī)的基本工作脈沖,控制著計(jì)算機(jī)的工作節(jié)奏。時(shí)鐘頻率越高,時(shí)鐘周期就越短,工作速度也就越快。
MIPS是每秒鐘處理了多少百萬條指令,計(jì)算公式:MIPS=主頻/CPI * 10的6次方。
從流水線的角度理解建立時(shí)間
建立時(shí)間的含義:一個(gè)時(shí)鐘周期內(nèi),一級(jí)流水的指令執(zhí)行必須完成;否則可能會(huì)出現(xiàn)數(shù)據(jù)冒險(xiǎn),因?yàn)椴煌噶畹牧魉牟煌瑂tage是重疊執(zhí)行的。
圖6 流水線的重疊執(zhí)行示意圖
部分參考文獻(xiàn)
《Pipelining in ARM》,作者:jiganrahul01;
《Explain pipelining in ARM processor》,作者:ques10;