99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ARMv7-A架構(gòu)學(xué)習(xí)筆記:通用寄存器與流水線

嵌入式那些事 ? 來源:嵌入式那些事 ? 2023-10-16 16:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

世界上有很多種體系結(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)效率大大的提高了。三級流水線示意圖如下圖所示:

02ec848a-6bfb-11ee-939d-92fbcf53809c.png

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í)間。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19896

    瀏覽量

    235374
  • ARM
    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)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用流水線寄存器實(shí)現(xiàn)最佳時(shí)序性能方案

    本篇博文描述的是通過將 URAM 矩陣配置為使用流水線寄存器來實(shí)現(xiàn)最佳時(shí)序性能的方法
    的頭像 發(fā)表于 07-26 16:01 ?6846次閱讀
    使用<b class='flag-5'>流水線</b><b class='flag-5'>寄存器</b>實(shí)現(xiàn)最佳時(shí)序性能方案

    基于FPGA的移位寄存器流水線結(jié)構(gòu)FFT處理

    基于FPGA的移位寄存器流水線結(jié)構(gòu)FFT處理
    發(fā)表于 08-18 00:04

    【夢翼師兄今日分享】 流水線設(shè)計(jì)講解

    用到流水線。本節(jié),夢翼師兄和大家一起初步地學(xué)習(xí)流水線。流水線基本概念流水線的設(shè)計(jì),就是指對延時(shí)較大的組合邏輯插入
    發(fā)表于 12-05 11:53

    FPGA中的流水線設(shè)計(jì)

    )片內(nèi) sram 的讀操作,因?yàn)?sram 的讀操作本身就是兩極流水線,除非下一步操作依賴讀結(jié)果,否則使用流水線是自然而然的事情。4)組合邏輯太長,比如(a+b)*c,那么在加法和乘法之間插入
    發(fā)表于 10-26 14:38

    流水線寄存器問題

    圖中的DFG(Data Flow Graph)節(jié)點(diǎn)已經(jīng)標(biāo)出了傳輸延遲,求該電路中流水線寄存器的最佳放置位置?求問大神解答這個題
    發(fā)表于 11-20 11:02

    ARM架構(gòu)系列中的流水線設(shè)計(jì)

    當(dāng)前階段解碼。它的吞吐量幾乎是 ARM 7 的兩倍。核心頻率高于ARM 9。流水線的階段數(shù)量可能會根據(jù)每個周期處理的指令集增加或減少(在大多數(shù)情況下,階段傾向于增加以提高效率)?;続RM微架構(gòu)圖5某
    發(fā)表于 04-11 17:23

    ARM模式、寄存器流水線等基礎(chǔ)知識學(xué)習(xí)

    此模式) ;異常發(fā)生之后,CPU必須要立刻做出響應(yīng),關(guān)于異常后面會詳細(xì)講解。四、ARM寄存器Cortex A系列ARM處理共有40個32位寄存器,其中33個為
    發(fā)表于 08-17 15:39

    基于ROB重命名的方法的RISC-V超標(biāo)量處理中寫回/提交流水線寄存器應(yīng)該寫些什么信息?

    關(guān)于這個流水線寄存器感覺沒什么必要。一些提交用到的信息(目的寄存器的寫信號,內(nèi)存的寫信號,要寫的數(shù)據(jù),寫的地址等等)都在ROB中了;提交的時(shí)候是通過寫指針來訪問ROB的,對于存指針的寄存器
    發(fā)表于 04-06 10:47

    ARM體系結(jié)構(gòu)參考手冊ARMv7-AARMv7-R版本

    提前(AOT)編譯的特定支持。 ·決定處理如何運(yùn)行的模式和狀態(tài),包括當(dāng)前的執(zhí)行特權(quán)和安全性。 ·例外模式。 ·內(nèi)存模型,定義內(nèi)存排序和內(nèi)存管理: -ARMv7-A架構(gòu)配置文件定義虛擬內(nèi)存系統(tǒng)
    發(fā)表于 08-12 07:46

    什么是流水線技術(shù)

    什么是流水線技術(shù) 流水線技術(shù)
    發(fā)表于 02-04 10:21 ?4096次閱讀

    Verilog基本功之:流水線設(shè)計(jì)Pipeline Design

    第一部分什么是流水線 第二部分什么時(shí)候用流水線設(shè)計(jì) 第三部分使用流水線的優(yōu)缺點(diǎn) 第四部分流水線加法器舉例 一. 什么是流水線
    發(fā)表于 09-25 17:12 ?7370次閱讀

    關(guān)于ARM流水線的資料和分析

    流水線設(shè)計(jì)就是將組合邏輯系統(tǒng)地分割,并在各個部分(分級)之間插入寄存器,并暫存中間數(shù)據(jù)的方法。目的是提高數(shù)據(jù)吞吐率(提高處理速度)。
    發(fā)表于 07-08 14:41 ?5次下載
    關(guān)于ARM<b class='flag-5'>流水線</b>的資料和分析

    各種流水線特點(diǎn)及常見流水線設(shè)計(jì)方式

    按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網(wǎng)帶線、懸掛線及滾筒流水線這七類流水線。
    的頭像 發(fā)表于 07-05 11:12 ?8221次閱讀
    各種<b class='flag-5'>流水線</b>特點(diǎn)及常見<b class='flag-5'>流水線</b>設(shè)計(jì)方式

    什么是流水線 Jenkins的流水線詳解

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發(fā)表于 05-17 16:57 ?1310次閱讀

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

    電子發(fā)燒友網(wǎng)站提供《具有3態(tài)輸出的多級流水線寄存器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-16 09:39 ?0次下載
    具有3態(tài)輸出的多級<b class='flag-5'>流水線</b><b class='flag-5'>寄存器</b>數(shù)據(jù)表