<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM體系結構之:流水線(xiàn)

ARM體系結構之:流水線(xiàn)

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

本文引用地址:http://dyxdggzs.com/article/257092.htm

1.3級組織

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

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

注意

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

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

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

圖2.2 3級的組織

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

⑤ 數據輸出寄存器(data-out register)和數據輸入寄存器(data-in register)。用于保存傳輸到存儲器和從存儲器輸出的數據。

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

例2.1顯示了一條單周期指令在流水線(xiàn)上的執行過(guò)程。

【例2.1】

ADD r1,r2

指令在流水線(xiàn)上的執行過(guò)程如圖2.3所示。

圖2.3 單周期指令在流水線(xiàn)上的執行過(guò)程

在A(yíng)DD指令中,需要訪(fǎng)問(wèn)兩個(gè)寄存器操作數,B總線(xiàn)上的數據移位后與A總線(xiàn)上的數據在A(yíng)LU中組合,再將結果寫(xiě)回寄存器堆。在指令執行過(guò)程中,程序計數器的數據放在地址寄存器中,地址寄存器的數據送入增值器。然后將增值后的數據拷貝到寄存器堆的r15(程序計數器),同時(shí)還拷貝到地址寄存器,作為下一次取指的地址。

到ARM7為止的ARM處理器使用簡(jiǎn)單的3級流水線(xiàn),包括下列流水線(xiàn)級:

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

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

· 執行(excute):處理指令并將結果寫(xiě)回寄存器。

圖2.4顯示了3級流水線(xiàn)指令執行過(guò)程。

圖2.4 3級流水線(xiàn)

注意

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

當處理器執行簡(jiǎn)單的數據處理指令時(shí),流水線(xiàn)使得平均每個(gè)時(shí)鐘周期能完成1條指令。但1條指令需要3個(gè)時(shí)鐘周期來(lái)完成,因此,有3個(gè)時(shí)鐘周期的延時(shí)(latency),但吞吐率(throughput)是每個(gè)周期一條指令。例2.2通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明了流水線(xiàn)的機制。

【例2.2】

指令序列為:

ADD r1 r2

SUB r3 r2

CMP r1 r3

流水線(xiàn)指令序列如圖2.5所示。

圖2.5 流水線(xiàn)指令順序

在第一個(gè)周期,內核從存儲器取出指令ADD;在第二個(gè)周期,內核取出指令SUB,同時(shí)對ADD譯碼;在第三個(gè)周期,指令SUB和ADD都沿流水線(xiàn)移動(dòng),ADD被執行,而SUB被譯碼,同時(shí)又取出CMP指令??梢钥闯?,流水線(xiàn)使得每個(gè)時(shí)鐘周期都可以執行一條指令。

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

圖2.6 含有存儲器訪(fǎng)問(wèn)指令的流水線(xiàn)狀態(tài)

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

注意

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

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




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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>