ARM處理器結(jié)構(gòu)
ARM和Thumb狀態(tài)
RISC技術(shù)
流水線技術(shù)
超標(biāo)量技術(shù)
ARM和Thumb狀態(tài)
V4版以后有:
(1)32位ARM指令集
(2)16位Thumb指令集,功能是ARM指令集的功能子集。
ARM7TDMI核以后,T變種的ARM微處理器有兩種工作狀態(tài):
(1)ARM狀態(tài)
(2)Thumb狀態(tài)。
當(dāng)ARM微處理器執(zhí)行32位的ARM指令集時(shí),工作在ARM狀態(tài);
當(dāng)ARM微處理器執(zhí)行16位的Thumb指令集時(shí),工作在Thumb狀態(tài)
Thumb技術(shù)介紹
ARM7體系結(jié)構(gòu)被廣泛應(yīng)用的時(shí)候,嵌入式控制器的市場(chǎng)仍然由8位、16位處理器占領(lǐng)。這些產(chǎn)品不能滿足高端應(yīng)用。這些應(yīng)用需要32位RISC處理器的性能和更優(yōu)于16位CISC處理器的代碼密度。
為了解決代碼密度的問題,ARM增加了T變種。
Thumb從32位ARM指令集中抽出來的36條指令格式,可重新編成16位的操作碼。
在運(yùn)行時(shí),16位的Thumb指令又由處理器解壓成32位指令。
Thumb核有2套獨(dú)立的指令集,它使設(shè)計(jì)者得到ARM32位指令性能的同時(shí),又能享有Thumb指令集產(chǎn)生的代碼方面的優(yōu)勢(shì),在性能和代碼大小之間取得平衡。
和ARM指令集相比,Thumb指令集具有以下的局限:
完成相同的操作,Thumb指令通常需要更多的指令,因此在對(duì)系統(tǒng)運(yùn)行時(shí)間要求苛刻的場(chǎng)合,ARM指令集更為合適。
Thumb指令集沒有包含進(jìn)行異常處理時(shí)需要的一些指令,因此在異常中斷時(shí),還是需要使用ARM指令,這種限制決定了Thumb指令需要與ARM指令配合使用。
ARM與Thumb狀態(tài)轉(zhuǎn)換
在程序的執(zhí)行過程中,微處理器可以隨時(shí)在兩種工作狀態(tài)之間切換,并且該轉(zhuǎn)變不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。
進(jìn)入Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為1時(shí),執(zhí)行BX指令。
進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為0時(shí),執(zhí)行BX指令。
RISC技術(shù)
嵌入式微處理器可以分為兩類:CISC和RISC;
CISC(Complex Instruction Set Computer):復(fù)雜指令系統(tǒng)計(jì)算機(jī);隨著計(jì)算機(jī)技術(shù)的發(fā)展而不斷引入新的復(fù)雜的指令集,計(jì)算機(jī)的體系結(jié)構(gòu)會(huì)越來越復(fù)雜。
大約有20%的指令會(huì)被反復(fù)使用,占整個(gè)程序代碼的80%,而余下的80%的指令卻不經(jīng)常使用,在程序設(shè)計(jì)中只占20% 。
RISC(Reduced Instruction Set Computer):精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī);- 采用固定長(zhǎng)度的指令格式
- 使用單周期指令
- 大量使用寄存器
- 可用加載/存儲(chǔ)指令批量傳輸數(shù)據(jù)
- 在循環(huán)處理中使用地址的自動(dòng)增減
RISC技術(shù)與CISC技術(shù)比較
RISC技術(shù)
ARM處理器采用加載/存儲(chǔ)(Load/Store)體系結(jié)構(gòu)是典型的RISC處理器,即只有Load/Store的存/取指令可以訪問存儲(chǔ)器,其余指令都不允許進(jìn)行存儲(chǔ)器操作。
RISC體系結(jié)構(gòu)基本特點(diǎn):
(1)大多數(shù)指令只需要執(zhí)行簡(jiǎn)單和基本的功能,其執(zhí)行過程在一個(gè)機(jī)器周期內(nèi)完成。
(2)只保留加載/存儲(chǔ)指令。操作數(shù)由加載/存儲(chǔ)指令從存儲(chǔ)器取出放寄存器內(nèi)操作。
(3)芯片邏輯不采用或少采用微碼技術(shù),而采用硬布線邏輯。
(4)減少指令數(shù)和尋址方式。
(5)指令格式固定,指令譯碼簡(jiǎn)化。
(6)優(yōu)化編譯。
RISC技術(shù)
ARM體系結(jié)構(gòu)還采用了一些特別的技術(shù):
所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,提高了指令的執(zhí)行效率。
可用Load/Store指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率。
可在一條數(shù)據(jù)處理指令中同時(shí)完成邏輯處理和移位處理。
RISC和CISC各有優(yōu)勢(shì),界限并不那么明顯。
現(xiàn)代的CPU往往采用CISC的外圍,內(nèi)部加入了RISC的特性,如超常指令集CPU就是融合了RISC和CISC的優(yōu)勢(shì),成為未來的CPU發(fā)展方向之一。
流水線技術(shù)
是一種將每條指令分解為多步,并讓各步操作重疊,從而實(shí)現(xiàn)幾條指令并行處理的技術(shù);
程序中的指令仍是一條條順序執(zhí)行,但可以預(yù)先取若干條指令,并在當(dāng)前指令尚未執(zhí)行完時(shí),提前啟動(dòng)后續(xù)指令的另一些操作步驟,從而可加快程序的運(yùn)行速度;
開發(fā)和設(shè)計(jì)嵌入式系統(tǒng)的過程中,CPU的性能是一個(gè)非常重要的考慮因素。
流水線技術(shù)是在本質(zhì)上影響程序執(zhí)行速度的因素。
由于計(jì)算機(jī)中一條指令的各個(gè)執(zhí)行階段相對(duì)獨(dú)立,因此,現(xiàn)代CPU大多設(shè)計(jì)成流水線型的機(jī)器,在這種類型機(jī)器中幾個(gè)指令可以并行執(zhí)行。采用流水線的重疊技術(shù)大大提高了CPU的運(yùn)行效率。
當(dāng)流水線內(nèi)部的信息通暢流動(dòng)時(shí),CPU流水線能夠工作得最好。
但實(shí)際應(yīng)用中,指令各執(zhí)行階段的操作時(shí)間長(zhǎng)短不同,有一些指令序列可能會(huì)打斷流水線內(nèi)的信息流,所以有時(shí)流水線操作不十分通暢,會(huì)暫時(shí)降低CPU的執(zhí)行速度。
單周期指令的執(zhí)行過程
ARM的3級(jí)流水線
ARM7架構(gòu)采用了一個(gè)3段的流水線:
(1)取指:將指令從內(nèi)存中取出來。
(2)譯碼:操作碼和操作數(shù)被譯碼以決定執(zhí)行什么功能。為下一周期準(zhǔn)備數(shù)據(jù)路徑需要的控制信號(hào)。這一級(jí)指令”占有“譯碼邏輯,而不是”占有”數(shù)據(jù)路徑
(3)執(zhí)行:執(zhí)行已譯碼的指令。指令占有數(shù)據(jù)路徑,寄存器堆棧被讀取,操作數(shù)在桶行移位器中被移位。ALU產(chǎn)生運(yùn)算結(jié)果并回寫到目的寄存器中,ALU結(jié)果根據(jù)指令需求更改狀態(tài)寄存器的條件位。
流水線模式下PC的更改過程
多周期ARM指令的3級(jí)流水線操作
數(shù)據(jù)路徑涉及到所有執(zhí)行周期、地址計(jì)算和數(shù)據(jù)傳送。譯碼邏輯總是產(chǎn)生數(shù)據(jù)路徑在下一個(gè)周期使用的控制信號(hào),因此除譯碼周期以外,在STR地址計(jì)算周期也產(chǎn)生數(shù)據(jù)傳送所需的控制信號(hào)。
取指的存儲(chǔ)器訪問和執(zhí)行的數(shù)據(jù)路徑占用都是不可同時(shí)共享的資源,對(duì)于多周期指令來說,如果指令復(fù)雜以至于不能在單個(gè)時(shí)鐘周期內(nèi)完成執(zhí)行階段,就會(huì)產(chǎn)生流水線阻塞。
ARM的流水線設(shè)計(jì)問題
1)縮短程序執(zhí)行時(shí)間:
Tprog:執(zhí)行一個(gè)程序所需時(shí)間;
Ninst:執(zhí)行該程序的指令條數(shù);
CPI:執(zhí)行每條指令的平均時(shí)鐘周期數(shù);
Fclk:處理器的時(shí)鐘頻率。
措施:
提高時(shí)鐘頻率fclk(導(dǎo)致流水線的級(jí)數(shù)增加 )。
減少每條指令的平均時(shí)鐘周期數(shù)CPI(需要解決流水線的相關(guān)問題 )
2)解決流水線相關(guān):
結(jié)構(gòu)相關(guān):某些指令在流水線中重疊執(zhí)行時(shí),產(chǎn)生資源沖突 。
措施:1)采用分離式指令Cache和數(shù)據(jù)Cache。2)ALU中采用單獨(dú)加法器來完成地址計(jì)算。
數(shù)據(jù)相關(guān):當(dāng)一條指令需要前面指令的執(zhí)行結(jié)果,而這些指令均在流水線中重疊執(zhí)行時(shí),就可能引起流水線的數(shù)據(jù)相關(guān)。
數(shù)據(jù)相關(guān)有“寫后讀”、“寫后寫”和“讀后寫”等。
措施:1)旁路技術(shù)。2)流水線互鎖技術(shù)。
控制相關(guān):當(dāng)流水線遇到分支指令和其他會(huì)改變PC值的指令時(shí),就會(huì)發(fā)生控制相關(guān)。
措施:1)引入延時(shí)分支。2)盡早計(jì)算出分支轉(zhuǎn)移成功時(shí)的PC值(即分支的目標(biāo)地址)。
ARM的5級(jí)流水線
ARM9和StrongARM架構(gòu)都采用了5級(jí)流水線.
增加了I-Cache和D-Cache,把存儲(chǔ)器的取指與數(shù)據(jù)存取分開;
增加了數(shù)據(jù)寫回的專門通路和寄存器;
把指令的執(zhí)行過程分割為5部分:
取指:將指令從指令存儲(chǔ)器中取出,放入指令流水線中。
指令譯碼:對(duì)指令進(jìn)行譯碼,從寄存器堆中讀取寄存器操作數(shù)。
執(zhí)行:把一個(gè)操作數(shù)移位,產(chǎn)生ALU結(jié)果。如果指令是Load或Store,在ALU中計(jì)算存儲(chǔ)器的地址。
數(shù)據(jù)緩存:如果需要,訪問數(shù)據(jù)存儲(chǔ)器;否則,ALU的結(jié)果只是簡(jiǎn)單地緩沖一個(gè)時(shí)鐘周期,以便使所有指令具有同樣地流水線流程。
寫回 :將指令產(chǎn)生地結(jié)果寫回到寄存器堆。
流水線對(duì)比
超標(biāo)量執(zhí)行
通過重復(fù)設(shè)置多套指令執(zhí)行部件,同時(shí)處理并完成多條指令,實(shí)現(xiàn)并行操作,來達(dá)到提高處理速度的目的。
所有ARM內(nèi)核,包括流行的ARM7、ARM9和ARM11等,都是單周期指令機(jī)。
ARM公司下一代處理器將是每周期能處理多重指令的超標(biāo)量機(jī)。
超標(biāo)量處理機(jī):一個(gè)時(shí)鐘周期內(nèi)同時(shí)執(zhí)行多條指令的處理機(jī)。
超標(biāo)量處理器中的多指令單元
超標(biāo)量與流水線技術(shù)是兼容的,為了能夠在一個(gè)時(shí)鐘周期內(nèi)同時(shí)發(fā)射多條指令,超標(biāo)量處理機(jī)必須有兩條或兩條以上能夠同時(shí)工作的指令流水線。但與此同時(shí),也帶來了多流水線的調(diào)度問題和操作部件的資源沖突問題。
超標(biāo)量處理器在執(zhí)行的過程中必須動(dòng)態(tài)地檢查指令相關(guān)性。
如果代碼中有分支指令,必須將分支被執(zhí)行和分支不被執(zhí)行這兩種情況分開考慮。
計(jì)算執(zhí)行時(shí)間幾乎是不可能的。
評(píng)論