世界上有很多種體系結(jié)構(gòu)的處理器,比較知名的處理器體系結(jié)構(gòu)有:ARM、x86、RISC-V、mips、LoongArch、PowerPC等。不論是哪一種架構(gòu)的處理器,其處理器核心都會自帶一定數(shù)量的寄存器,這些寄存器在處理器核心的運(yùn)行過程中發(fā)揮著基礎(chǔ)而又重要的作用。
ARM體系結(jié)構(gòu)是一種基于指令加載和存儲的體系結(jié)構(gòu)。在這種體系結(jié)構(gòu)下,所有的數(shù)據(jù)處理都需要在通用寄存器中完成,而不能直接在內(nèi)存中完成。因此,這種體系結(jié)構(gòu)的處理器核心處理數(shù)據(jù)的過程為:首先把待處理數(shù)據(jù)從內(nèi)存加載到通用寄存器,然后進(jìn)行處理,最后把結(jié)果寫入內(nèi)存中。
通用寄存器
ARM架構(gòu)提供了16個32位通用寄存器(R0-R15)用于軟件使用。其中R0-R12是普通寄存器,R13、R14和R15在程序的運(yùn)行過程中通常用作固定的用途。
R13:又叫堆棧指針寄存器(Stack pointer)SP,SP通常用于保存堆棧地址,在使用入棧和出棧指令時(shí),SP中的堆棧地址會自動的更新。堆棧主要用于保存局部變量,保存函數(shù)間調(diào)用的關(guān)鍵寄存器。對于根本不需要進(jìn)行堆棧操作的程序,SP可以當(dāng)做普通寄存器來存儲數(shù)據(jù)。
R14:又叫鏈接寄存器(Link register)LR,LR主要用于存放函數(shù)的返回地址,即當(dāng)函數(shù)返回時(shí),知道自己該回到哪兒去繼續(xù)運(yùn)行。通常鏈接寄存器是和BL/BLX/CALL指令搭配使用,這幾個指令被調(diào)用后,默認(rèn)會自動將當(dāng)前調(diào)用指令的下一條指令地址保存到LR寄存器當(dāng)中。
R15:又叫程序計(jì)數(shù)器(Program Counter)PC,PC主要用于存放CPU取指的地址。ARMv7架構(gòu)同時(shí)支持ARM指令集和Thumb指令集。在ARM指令集中,當(dāng)CPU正在執(zhí)行A指令時(shí),PC的值為當(dāng)前指令A(yù)地址+8;在Thumb指令集中,由于Thumb指令集為16位,當(dāng)CPU正在執(zhí)行A指令時(shí),PC的值為當(dāng)前指令A(yù)地址+4。但是當(dāng)手動向PC賦值時(shí),CPU就會跳轉(zhuǎn)到賦值所代表的地址處去運(yùn)行。記住PC存放的是取指地址,不是當(dāng)前CPU運(yùn)行地址。
備注:在ARM狀態(tài)下,PC指向的地址bit[1:0]總是為0,因此PC指向的地址都是4字節(jié)對齊。ARMv7架構(gòu)的處理器支持混合編碼即同時(shí)支持ARM指令集和Thumb指令集,因此為了區(qū)分Thumb指令集和ARM指令集,ARM將PC指向地址的bit[0]位作為標(biāo)志位。如果PC指向的地址bit[0]位為1,表示當(dāng)前是Thumb指令集;如果PC指向的地址bit[0]位為0,表示當(dāng)前是ARM指令集。
三級流水線
為了增加處理器指令流的速度,ARM使用了多級流水線技術(shù)。多級流水線技術(shù)是一種將指令的執(zhí)行分解成多個步驟,并讓不同指令的各步驟重疊的一種準(zhǔn)并行處理實(shí)現(xiàn)技術(shù)。經(jīng)典的三級流水線結(jié)構(gòu)將指令的執(zhí)行分成取指,譯碼和執(zhí)行這三個階段。
可以將指令的執(zhí)行過程看成工廠加工產(chǎn)品的過程,當(dāng)沒有采用流水線時(shí)只有一個工人A,工人A先對指令取指,然后對指令譯碼,最后執(zhí)行指令,然后再次對指令取指周而復(fù)始。工人A在同一個時(shí)間只能干一件事,指令的執(zhí)行也就只有等工人A對指令完成取指和譯碼之后才能進(jìn)行。工廠老板一看,這產(chǎn)品的生產(chǎn)效率太低,就又請了工人B和工人C,現(xiàn)在工人A只負(fù)責(zé)取指,工人B只負(fù)責(zé)譯碼,工人C只負(fù)責(zé)執(zhí)行,這樣三條流水線同時(shí)工作,每時(shí)每刻都有指令在被取指,譯碼和執(zhí)行,產(chǎn)品的生產(chǎn)效率大大的提高了。三級流水線示意圖如下圖所示:
ARMv7-A架構(gòu)學(xué)習(xí)_3級流水線
上圖是ARM指令集的三級流水線結(jié)構(gòu),每條指令的地址間隔為4字節(jié),當(dāng)CPU在t3時(shí)間段開始執(zhí)行add r0,r1,#3指令時(shí),PC的值為0x00000008,即PC此時(shí)指向cmp r0,#9指令處。記住PC存放的是取指地址,不是當(dāng)前CPU運(yùn)行地址。結(jié)合上圖對于Thumb指令集的PC值分析也是比較簡單的。
采用多級流水線技術(shù)后,并沒有加速單條指令的執(zhí)行,每條指令的步驟并沒有減少,只是多條指令的不同操作步驟同時(shí)執(zhí)行,因而從總體上看加快了指令流速度,縮短了程序執(zhí)行時(shí)間。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
19896瀏覽量
235374 -
ARM
+關(guān)注
關(guān)注
134文章
9353瀏覽量
377726 -
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124582 -
流水線
+關(guān)注
關(guān)注
0文章
124瀏覽量
26634 -
RISC-V
+關(guān)注
關(guān)注
46文章
2574瀏覽量
48866
原文標(biāo)題:ARMv7-A 那些事 - 2.通用寄存器與流水線
文章出處:【微信號:嵌入式那些事,微信公眾號:嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
【夢翼師兄今日分享】 流水線設(shè)計(jì)講解
FPGA中的流水線設(shè)計(jì)
流水線寄存器問題
ARM架構(gòu)系列中的流水線設(shè)計(jì)
ARM模式、寄存器與流水線等基礎(chǔ)知識學(xué)習(xí)
基于ROB重命名的方法的RISC-V超標(biāo)量處理器中寫回/提交流水線寄存器應(yīng)該寫些什么信息?
ARM體系結(jié)構(gòu)參考手冊ARMv7-A和ARMv7-R版本
Verilog基本功之:流水線設(shè)計(jì)Pipeline Design
關(guān)于ARM流水線的資料和分析

什么是流水線 Jenkins的流水線詳解
具有3態(tài)輸出的多級流水線寄存器數(shù)據(jù)表

評論