<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM核流水線——ARM7,ARM9E,ARM11,Cortex-A系列處理器

          ARM核流水線——ARM7,ARM9E,ARM11,Cortex-A系列處理器

          作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
          本文主要介紹ARM7,ARM9E,ARM11以及Cortex-A系列處理器流水線,從指令讀取fetch,指令解碼decode到指令執(zhí)行的各個(gè)階段。

          參考ARM的網(wǎng)站http://www.arm.com/about/company-profile/index.php,ARM公司成立于1990年,目前已經(jīng)銷售了超過(guò)150億個(gè)芯片,并向超過(guò)200多加公司銷售了超過(guò)600個(gè)處理器的授權(quán),目前全世界有超過(guò)95%的手機(jī)以及超過(guò)25%的消費(fèi)電子產(chǎn)品使用ARM作為處理器核心。

          本文引用地址:http://www.ex-cimer.com/article/201611/317422.htm

          ARM(Advanced RISC Machines)是專注于RISC(Reduced Instruction Set computer)架構(gòu)的處理器公司,最早的ARM1原型是1985年在英國(guó)劍橋的Acorn公司設(shè)計(jì),并由VLSI生產(chǎn),早期的ARM1,ARM2,ARM250,ARM3..的處理器都被Acorn這家公司作為計(jì)算機(jī)處理核心。

          目前處理器架構(gòu)中,主要有1940年代提出的Von Neumann提供的記憶體架構(gòu),讓程序和數(shù)據(jù)共用總線,之后的Harvard架構(gòu)則讓程序和數(shù)據(jù)使用不同的架構(gòu),好處是可以讓程序和數(shù)據(jù)同事從存儲(chǔ)器內(nèi)操作。早期的ARM7跟8051一般是采用Von Neumann架構(gòu),一塊cache供指令與數(shù)據(jù)存取,而目前新的微處理器架構(gòu)(例如:ARM11 or Cortex A)通常都采用Harvard架構(gòu),也就是處理器會(huì)支持I-Cache與D-Cache,區(qū)分指令和數(shù)據(jù)的總線操作,提高處理器效率。(參考文章:http://en.wikipedia.org/wiki/ARM7andhttp://en.wikipedia.org/wiki/Harvard_architecture).有關(guān)ARM處理器的馮諾依曼和哈佛架構(gòu)可以參考網(wǎng)頁(yè)http://stenlyho.blogspot.com/2008/08/armcpu.html,如下所示

          Processor Family

          #of pipeline stages

          Memory Organization

          Clock Rate

          MIPS/MHz

          ARM6

          3

          Von Neumann

          25MHz

          ARM7

          3

          Von Neumann

          66MHz

          0.9

          ARM8

          5

          Von Neumann

          72MHz

          1.2

          ARM9

          5

          Harvard

          200MHz

          1.1

          ARM10

          6

          Harvard

          400MHz

          1.25

          StrongARM

          5

          Harvard

          233MHz

          1.15

          ARM11

          8

          Von Neumann/Harvard

          550MHz

          1.2

          ARM是采用RISC精簡(jiǎn)指令集(Reduced Instruction Set Computing)架構(gòu)的處理器,RISC架構(gòu)主要選擇使用頻率較高的簡(jiǎn)單指令,避免復(fù)雜指令,使用固定長(zhǎng)度的指令編碼(支持32bits,16bits或16/32bits混合),單周期指令,便于Pipeline的操作執(zhí)行,并通過(guò)大量暫存器,讓邏輯處理指令只對(duì)暫存器進(jìn)行操作,只有特定載入/儲(chǔ)存的指令可以存取存儲(chǔ)器內(nèi)容.相比CISC架構(gòu),會(huì)隨著需求,不斷的加入新的指令集,使得架構(gòu)越來(lái)越復(fù)雜,實(shí)際應(yīng)用中,也并非所有的指令都是常被使用的,如下以CSIC架構(gòu)的x86指令集為例,指令集呈現(xiàn)不固定長(zhǎng)度的方式,如下例子有1,2,7與11 bytes的例子

          (1bytes)0×48 = dec eax

          (2bytes)0×89 F9= mov ecx,edi

          (7bytes)0x8B BC 24 A4 01 00 00 = mov edi,dword ptr [esp+000001A4h]

          (11bytes)0×81 BC 24 14 01 00 00 FF 00 00 00 = cmp dword ptr [esp+00000114h],0FFh

          ARM通過(guò)Pipeline的方式加速指令集的處理,在Pipeline執(zhí)行階段,如果發(fā)生中斷,也會(huì)把Pipeline中的指令執(zhí)行完畢才進(jìn)入中斷,如下所示ARM7支持如下的3級(jí)Pipeline

          Fetch → Decode → Execute

          其中

          Fetch

          進(jìn)行指令的讀取動(dòng)作

          Decode

          Thumb->ARM指令Decompress,ARM指令解碼,暫存器選擇

          Execute

          進(jìn)行暫存器/存儲(chǔ)器讀取,算術(shù)邏輯運(yùn)算與暫存器/存儲(chǔ)器回寫動(dòng)作

          每一個(gè)CPU周期,處理器都可以同時(shí)處理Fetch,Decode,Execute這三個(gè)動(dòng)作,而非把一個(gè)指令從Fetch開(kāi)始到執(zhí)行完后,才處理下一個(gè)指令周期,如下圖所示

          Time

          Fetch

          Decode

          Execute

          Cycle#1

          Instruction#1

          Cycle#2

          Instruction#2

          Instruction#1

          Cycle#3

          Instruction#3

          Instruction#2

          Instruction#1

          Cycle#4

          Instruction#4

          Instruction#3

          Instruction#2

          Cycle#5

          Instruction#5

          Instruction#4

          Instruction#3

          Cycle#6

          Instruction#6

          Instruction#5

          Instruction#4

          為了避免在非載入存儲(chǔ)器階段,讓運(yùn)算指令進(jìn)行存儲(chǔ)器的存取,而導(dǎo)致Pipeline可重疊執(zhí)行的能力被破壞,ARM只允許特定載入儲(chǔ)存指令讀寫存儲(chǔ)器的資料.早期的ARM6,ARM7有3級(jí)的Pipeline,到了ARM8、ARM9時(shí)為5級(jí)的Pipeline;之后的ARM11則為8級(jí)的Pipeline;不過(guò)Pipeline過(guò)深不一定就能帶來(lái)更高的效益,如果程序流程中遇到分支(例如Branch到另一個(gè)程序塊),就會(huì)導(dǎo)致Pipeline中的資料失效而要重新進(jìn)行指令Fetch的動(dòng)作.

          簡(jiǎn)單來(lái)說(shuō),Pipeline就是把指令的處理分成幾個(gè)不同的步驟,例如

          ARM9支持如下的5級(jí)Pipeline

          Fetch → Decode → Execute→ Memory→ Write Back

          其中

          Fetch

          進(jìn)行指令的讀取(Fetch)動(dòng)作

          Decode

          進(jìn)行ARM/Thumb指令解碼與暫存器的讀取

          Execute

          進(jìn)行邏輯運(yùn)算與存儲(chǔ)器存取位址計(jì)算動(dòng)作

          Memory

          讀取或?qū)懟卮鎯?chǔ)器資料

          Write Back

          將運(yùn)算或是Load結(jié)果回寫暫存器中

          ARM10之后有支持Branch Prediction以減少在Pipeline執(zhí)行期間因?yàn)锽ranch動(dòng)作導(dǎo)致Pipeline失效Flush的機(jī)會(huì),支持如下的6級(jí)Pipeline

          Fetch→ Issue → Decode → Execute→ Memory→ Write Back

          其中

          Fetch

          進(jìn)行Branch Predictor指令分支預(yù)測(cè),指令位址計(jì)算,與指令的讀取(Fetch)動(dòng)作

          Issue

          ARM/Thumb指令解碼,若非ARM/Thumb有效指令,就通過(guò)Coprocessor Signal判斷是否為Coprocessor指令

          Decode

          暫存器的讀取,Result Forward,ScoreBoard

          Execute

          進(jìn)行算術(shù)邏輯運(yùn)算與Branch/Data存取存儲(chǔ)器位址計(jì)算,乘法運(yùn)算

          Memory

          讀取或?qū)懟卮鎯?chǔ)器資料,Coprocessor資料存取,乘法相加處理

          Write Back

          將運(yùn)算或是Load結(jié)果回寫暫存器中

          ARM11采用Scalar架構(gòu)的Pipeline,并在Issue階段支持ALU(arithmetic logic unit),MAC(multiply/accumulate)與Load/Store分成Pipeline的流水線,可以在一個(gè)Cycle分發(fā)一個(gè)對(duì)應(yīng)的處理器動(dòng)作到一個(gè)Pipeline,如下所示的8級(jí)Scalar Pipeline (ARM1156T2-S支持9級(jí)的Pipeline,其中Fetch Pipeline擴(kuò)充為3級(jí),可以參考網(wǎng)頁(yè)

          http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0338g/I1002919.html)

          Fetch#1→ Fetch#2→ Decode→ISS (ALU Pipeline)→ Shifter→ALU→ SAT→ Write Back

          ______________________________(MAC Pipeline) → MAC1→MAC2→ MAC3→ Write Back

          ______________________________(Load/Store Pipeline)→ LS Add→DC1→ DC2→ Write Back

          跟之前版本相比ARM11用了兩個(gè)Fetch Pipeline階段去支持兩種指令分支預(yù)測(cè)(Branch Prediction)的機(jī)制,第一個(gè)Fetch Pipeline階段會(huì)根據(jù)歷史記錄進(jìn)行動(dòng)態(tài)的指令分支預(yù)測(cè)(Dynamic Branch Prediction),總共記錄64次,4種狀態(tài)(Strongly taken,Weakly taken,Weakly not-taken and Strongly non-taken)的分支((Branch)目標(biāo)存儲(chǔ)器位址快取(BTAC,Branch-Target Address Cache)記錄近期指令分支的情況.第二個(gè)Fetch Pipeline階段進(jìn)行靜態(tài)的指令分支預(yù)測(cè)(Static Branch Prediction),會(huì)處理不在第一階段范圍中的分支預(yù)測(cè)存儲(chǔ)器位址,命中率高的指令分支預(yù)測(cè)(Branch Prediction)可以避免Pipeline失效重置的問(wèn)題,讓處理器的運(yùn)作效率更高。根據(jù)參考的資料ARM11的Dynamic與Static Branch Prediction在一般執(zhí)行情況下可以有85%的命中率,大多數(shù)的情況可以介于80%-95%之間(取決于程序的大小)。

          簡(jiǎn)介如下,

          #1

          Fetch#1

          進(jìn)行Dynamic Branch Prediction,指令位址計(jì)算,與指令的讀取(Fetch)動(dòng)作

          #2

          Fetch#2

          進(jìn)行Static Branch Prediction

          #3

          Decode

          ARM/Thumb指令解碼,若非ARM/Thumb有效指令,就通過(guò)Coprocessor Signal判斷是否為Coprocessor指令

          Static BPR Stack

          #4

          ISS
          (Instruction Issue)

          暫存器的讀取,與指令執(zhí)行路徑分派,有三條路徑邏輯運(yùn)算ALU Pipeline,乘法累加MAC Pipeline,與資料存取Load/Store Pipeline.

          ALU Pipeline

          MAC Pipeline

          Load/Store Pipeline

          #5

          Shifter

          對(duì)邏輯運(yùn)算指令操作單元(operand)進(jìn)行Shift

          MAC1

          第1階段乘法累加操作

          LS Add

          計(jì)算產(chǎn)生Load/Store操作的存儲(chǔ)器位址

          #6

          ALU

          進(jìn)行整數(shù)算術(shù)邏輯運(yùn)算

          MAC2

          第2階段乘法累加操作

          DC1

          第1階段Data Cache存取

          #7

          SAT

          儲(chǔ)存運(yùn)算結(jié)果

          MAC3

          第3階段乘法累加操作

          DC2

          第2階段Data Cache存取

          #8

          Write Back

          將運(yùn)算或是Load結(jié)果回寫暫存器中

          ARM Cortext A系列的架構(gòu),在這架構(gòu)下ARM導(dǎo)入了Superscalar架構(gòu)的Pipeline,讓處理器可以在一個(gè)周期平行處理一個(gè)以上的指令集。以Cortex A8為例,支持13級(jí)的整數(shù)Pipeline與10級(jí)的NEON多媒體指令集Pipeline,以整數(shù)處理的指令集為例,Cortex A8支持Dual-Issue,In-Order Pipeline,不同于之前的ARM核心一次只能處理一個(gè)整數(shù)處理指令集,Cortex A8可以同時(shí)Issue兩個(gè)整數(shù)處理指令集,并在一個(gè)周期中通過(guò)兩個(gè)整數(shù)算術(shù)邏輯單元Pipeline平行處理這兩個(gè)指令集.

          13-Stage Integer Pipeline

          10-Stage NEON Pipeline

          F#0

          F#1

          F#2

          D#0

          D#1

          D#2

          D#3

          D#4

          E#0

          E#1

          E#2

          E#3

          E#4

          E#5

          M#0

          M#1

          M#2

          M#3

          N#1

          N#2

          N#3

          N#4

          N#5

          N#6

          Instruction Fetch

          Instruction Decode

          withDual-Issues

          Architectural

          Register

          File

          ALU/MUL Pipeline 0

          NEON
          Instruction

          Queue

          NEON
          Instruction

          Decode

          NEON
          Register

          File

          Integer ALU Pipe

          ALU Pipeline 1

          Integer MUL Pipe

          Load/Store Pipeline 0 or 1

          Integer Shift Pipe

          None-IEEE FP Add Pipe

          None-IEEE FP Mul Pipe

          IEEE FP Engine

          Load/Store Permute Pipe

          在Cortex A8架構(gòu)下,有兩個(gè)ALU Pipeline,ALU 0與ALU1是對(duì)稱的,可以同時(shí)處理兩個(gè)邏輯運(yùn)算,由于Pipeline的特性在使用上,乘法需求的指令會(huì)跟ALU 0成對(duì)(也就是說(shuō)在這條Pipeline 0連續(xù)處理有關(guān)整數(shù)邏輯運(yùn)算與乘法相關(guān)的指令),而Load/Store的指令則適合跟ALU 0或1兩者任一一起成對(duì)操作。

          其中

          13-Stage Integer Pipeline

          0-Stage

          F#0

          用來(lái)產(chǎn)生要Fetch指令的位址,在文件中這個(gè)階段并不納入13級(jí)的Pipeline中. (AGC,Address Generator Unit)

          1-Stage

          F#1

          RAM+TLB ,

          支持兩個(gè)層級(jí)的全域歷史指令分支預(yù)測(cè)(Global History Branch Preditor)分別為

          1,BTB(Branch Target Buffer)

          能用來(lái)判斷目前所要Fetch的位址是否為分支(Branch)指令,以及所要調(diào)到的目標(biāo)存儲(chǔ)器位址,目前總共可以記錄512筆資料,若BTB命中,接下來(lái)就會(huì)進(jìn)行GHB的動(dòng)作.

          2,GHB(Global History Buffer)

          包含4096個(gè)2bits計(jì)數(shù)器,用來(lái)編碼分支預(yù)測(cè)的強(qiáng)度與方向。GHB會(huì)以10bits長(zhǎng)度定址最近十次分支的位址,與4bits的PC(Program Counter)值.

          此外,Return Stack(RS)會(huì)記錄8次32bits Link Register的值,當(dāng)發(fā)現(xiàn)有關(guān)于函式返回(Return)相對(duì)指令時(shí),Return Stack中所記錄的最近8次Link Register資料就可以幫助Dynamic Branch Predictor預(yù)測(cè)可能的分支結(jié)果.

          2-Stage

          F#2

          提供12次Fetch Queue

          3-Stage

          D#0

          Decode.

          4-Stage

          D#1

          5-Stage

          D#2

          6-Stage

          D#3

          7-Stage

          D#4

          8-Stage

          E#0

          Architectural Register File

          ALU/MUL Pipeline 0

          ALU Pipeline 1

          Load/Store Pipeline 0 or 1

          9-Stage

          E#1

          Execution.

          10-Stage

          E#2

          11-Stage

          E#3

          12-Stage

          E#4

          BP Update(to F#0)

          BP Update(to F#0)

          BP Update(to F#0)

          13-Stage

          E#5

          10-Stage NEON Pipeline

          Instruction Decode

          Load and Store with Alignment

          1-Stage

          M#0

          16-entry NEON Instruction Queue/Instruction Decode

          Mux L1/MCR

          2-Stage

          M#1

          Decode Queue and Read/Write Check

          8-entry Load Queue

          3-Stage

          M#2

          Score-Board and Issue-Logic

          Load Align

          4-Stage

          M#3

          NEON Register Read and M3 fwding muxes

          Mux with NRF

          Integer ALU Pipe

          Integer MUL Pipe

          Integer Shift Pipe

          None-IEEE FP Add Pipe

          None-IEEE FP Mul Pipe

          IEEE Single/Double precision VFP

          Load/Store and Permute Pipe

          5-Stage

          N#1

          FMT

          DUP

          SHIFT#1

          FFMT

          FDUP

          VFP

          PERM#1

          6-Stage

          N#2

          ALU

          MUL#1

          SHIFT#2

          FADD#1

          FMUL#1

          Write Back

          PERM#2

          7-Stage

          N#3

          ABS

          MUL#2

          SHIFT#3

          FADD#2

          FMUL#2

          Store Align

          8-Stage

          N#4

          ACC#1

          FADD#3

          FMUL#3

          8-entry Store Queue

          9-Stage

          N#5

          ACC#2

          FADD#4

          FMUL#4

          10-Stage

          N#6

          Write Back (Update to ARM/NEON Register File)



          關(guān)鍵詞: ARM核流水線處理

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();