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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM體系結(jié)構(gòu)之:流水線

          ARM體系結(jié)構(gòu)之:流水線

          作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

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

          1.3級組織

          3級組織如圖2.2所示,其主要的組成如下:

          ① 處理器狀態(tài)寄存器堆(Rigister Bank)。它有兩個讀端口和一個寫端口,每個端口都可以訪問任意寄存器。另外還有附加的可以訪問PC的一個讀端口和一個寫端口。

          注意

          PC的附加寫端口可以在取指地址增加后更新PC,讀端口可以在數(shù)據(jù)地址發(fā)出之后從新開始取指。

          ② 桶形移位寄存器(Barrel Shifter)。它可以把一個操作數(shù)移位或循環(huán)移位任意位數(shù)。

          ③ ALU。完成指令集要求的算術(shù)或邏輯功能。

          圖2.2 3級的組織

          ④ 地址寄存器(Address Register)和增值器(Incrementer)??蛇x擇和保存所用的存儲器地址并在需要時產(chǎn)生順序地址。

          ⑤ 數(shù)據(jù)輸出寄存器(data-out register)和數(shù)據(jù)輸入寄存器(data-in register)。用于保存?zhèn)鬏數(shù)酱鎯ζ骱蛷拇鎯ζ鬏敵龅臄?shù)據(jù)。

          和相關(guān)的控制邏輯(instruction decode and control)。

          例2.1顯示了一條單周期指令在流水線上的執(zhí)行過程。

          【例2.1】

          ADD r1,r2

          指令在流水線上的執(zhí)行過程如圖2.3所示。

          圖2.3 單周期指令在流水線上的執(zhí)行過程

          在ADD指令中,需要訪問兩個寄存器操作數(shù),B總線上的數(shù)據(jù)移位后與A總線上的數(shù)據(jù)在ALU中組合,再將結(jié)果寫回寄存器堆。在指令執(zhí)行過程中,程序計數(shù)器的數(shù)據(jù)放在地址寄存器中,地址寄存器的數(shù)據(jù)送入增值器。然后將增值后的數(shù)據(jù)拷貝到寄存器堆的r15(程序計數(shù)器),同時還拷貝到地址寄存器,作為下一次取指的地址。

          到ARM7為止的ARM處理器使用簡單的3級流水線,包括下列流水線級:

          · 取指(fetch):從寄存器裝載一條指令。

          · 譯碼(decode):識別被執(zhí)行的指令,并為下一個周期準備數(shù)據(jù)通路的控制信號。在這一級,指令占有譯碼邏輯,不占用數(shù)據(jù)通路。

          · 執(zhí)行(excute):處理指令并將結(jié)果寫回寄存器。

          圖2.4顯示了3級流水線指令執(zhí)行過程。

          圖2.4 3級流水線

          注意

          在任一時刻,可能有3種不同的指令占有這3級中的每一級,因此,每一級中的硬件必須能夠獨立操作。

          當處理器執(zhí)行簡單的數(shù)據(jù)處理指令時,流水線使得平均每個時鐘周期能完成1條指令。但1條指令需要3個時鐘周期來完成,因此,有3個時鐘周期的延時(latency),但吞吐率(throughput)是每個周期一條指令。例2.2通過一個簡單的例子說明了流水線的機制。

          【例2.2】

          指令序列為:

          ADD r1 r2

          SUB r3 r2

          CMP r1 r3

          流水線指令序列如圖2.5所示。

          圖2.5 流水線指令順序

          在第一個周期,內(nèi)核從存儲器取出指令A(yù)DD;在第二個周期,內(nèi)核取出指令SUB,同時對ADD譯碼;在第三個周期,指令SUB和ADD都沿流水線移動,ADD被執(zhí)行,而SUB被譯碼,同時又取出CMP指令??梢钥闯觯魉€使得每個時鐘周期都可以執(zhí)行一條指令。

          當執(zhí)行多條指令時,流水線的執(zhí)行不一定會如圖2.5那么規(guī)則,圖2.6顯示了有STR指令的流水線狀態(tài)。

          圖2.6 含有存儲器訪問指令的流水線狀態(tài)

          圖2.6中在單周期指令A(yù)DD后出現(xiàn)了一條數(shù)據(jù)存儲指令STR。訪問主存儲器的指令用陰影表示,可以看出在每個周期都使用了存儲器。同樣,在每一個周期也使用了數(shù)據(jù)通路。在執(zhí)行周期、地址計算和數(shù)據(jù)傳輸周期,數(shù)據(jù)通路都是被占用的。在譯碼周期,譯碼邏輯負責產(chǎn)生下一周期用到的數(shù)據(jù)通路的控制信號。

          注意

          對于STR這種存儲器訪問指令,實際是在地址計算時由譯碼邏輯產(chǎn)生下一周期數(shù)據(jù)傳輸所需要的數(shù)據(jù)通路控制信號。

          存儲器相關(guān)文章:存儲器原理




          關(guān)鍵詞: 流水線 指令譯碼器 ARM

          評論


          相關(guān)推薦

          技術(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); })();