版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第2章ARM體系結(jié)構(gòu)主要內(nèi)容1324ARM體系結(jié)構(gòu)概述編程模型ARM基本尋址方式ARM指令集5ARM9TDMI內(nèi)核6ARM9與ARM7的比較ARM920T核72.1.1ARM體系結(jié)構(gòu)的特點(diǎn)ARM即AdvancedRISCMachines的縮寫。ARM公司1990年成立,是設(shè)計公司。ARM是知識產(chǎn)權(quán)(IP)供應(yīng)商,本身不生產(chǎn)芯片,靠轉(zhuǎn)讓設(shè)計許可,由合作伙伴公司來生產(chǎn)各具特色的芯片。ARM處理器的3大特點(diǎn)是:耗電少、成本低、功能強(qiáng);16位/32位雙指令集;全球眾多合作伙伴保證供應(yīng)。
ARM處理器為RISC芯片,其簡單的結(jié)構(gòu)使ARM內(nèi)核非常小,這使得器件的功耗也非常低。它具有經(jīng)典RISC的特點(diǎn):大的、統(tǒng)一的寄存器文件;裝載/保存結(jié)構(gòu),數(shù)據(jù)處理操作只針對寄存器的內(nèi)容,而不直接對存儲器進(jìn)行操作;簡單的尋址模式;統(tǒng)一和固定長度的指令域,簡化了指令的譯碼,便于指令流水線設(shè)計。2.1.1ARM體系結(jié)構(gòu)的特點(diǎn)2.1.1ARM體系結(jié)構(gòu)的特點(diǎn)ARM體系結(jié)構(gòu)的特點(diǎn):RISC型處理器結(jié)構(gòu)ARM/Thumb指令集多處理器狀態(tài)模式嵌入式在線仿真調(diào)試靈活和方便的接口ARM體系結(jié)構(gòu)具有協(xié)處理器接口ARM處理器核還具有片上總線AMBA(AHB/ASB/APB)低電壓低功耗的設(shè)計2.1.1ARM體系結(jié)構(gòu)的特點(diǎn)ARM目前的產(chǎn)品系列:ARM7ARM9ARM9EARM10SecurCore通用處理器系列專門為安全設(shè)備設(shè)計的處理器系列2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)微處理器是整個系統(tǒng)的核心,通常由3大部分組成。
算術(shù)邏輯單元寄存器控制單元微處理器存儲器輸入輸出1.ARM的體系機(jī)構(gòu)由32位ALU、31個32位通用寄存器及6位狀態(tài)寄存器、32×8位乘法器、32×32位桶形移位寄存器、指令譯碼及控制邏輯、指令流水線和數(shù)據(jù)/地址寄存器組成。
ALU由兩個操作數(shù)鎖存器、加法器、邏輯功能、結(jié)果及零檢測邏輯構(gòu)成。ALU的邏輯結(jié)構(gòu)
ALU每一時鐘周期由雙相時鐘組成。ALU的最小數(shù)據(jù)通路周期由以下組成:寄存器讀時間;移位器延遲;ALU延遲;寄存器寫建立時間;雙相時鐘間非重疊時間。ALU的數(shù)據(jù)通路時序桶形移位寄存器為了減少移位的延遲時間,ARM采用了32×32位的桶形移位寄存器。這樣,可以使左移/右移n位、環(huán)移n位和算術(shù)右移n位等都可以一次完成。高速乘法器ARM為了提高運(yùn)算速度,采用兩位乘法的方法。兩位乘法根據(jù)乘數(shù)的2位來實現(xiàn)“加-移位”運(yùn)算。乘數(shù)An-1An: 00--原部分積S右移2位; 01--原部分積S加被乘數(shù)后右移2位; 10--原部分積S加2倍被乘數(shù)后,右移2位; 11--原部分積S加3倍被乘數(shù)后,右移2位。
2倍被乘數(shù)可通過將被乘數(shù)左乘1位來實現(xiàn);3倍可看作4-1(11=100-1),故先減1倍被乘數(shù),再加4倍被乘數(shù)來實現(xiàn)。4倍被乘數(shù)的操作實際上是在該2位乘數(shù)11的高1位乘數(shù)加“1”,且此“1”可暫存在Cout進(jìn)位觸發(fā)器中。高速乘法器組合值
Yi-1
Yi
C
操作
C值變化
0
0
0
0
部分積+0;右移兩位
C=0
1
0
0
1
部分積+x;右移兩位
C=0
1
0
1
0
部分積+x;右移兩位
C=0
2
0
1
1
部分積+2x;右移兩位
C=0
2
1
0
0
部分積+2x;右移兩位
C=0
3
1
0
1
部分積-x;右移兩位
C=1
3
1
1
0
部分積-x;右移兩位
C=1
4
1
1
1
部分積+0;右移兩位
C=1
高速乘法器x=0.101100 y=0.111001
高速乘法器ARM的高速乘法器采用32×8位的結(jié)構(gòu),邏輯結(jié)構(gòu)如下:浮點(diǎn)部件浮點(diǎn)部件是作為選件為ARM體系結(jié)構(gòu)選用,F(xiàn)PA10浮點(diǎn)加速器以協(xié)處理器方式與ARM相連,并通過協(xié)處理器指令的解釋來執(zhí)行。控制器
ARM的控制器采用硬接線的可編程邏輯陣列PLA。輸入端14根,輸出40根,分散控制Load/Store多路、乘法器、協(xié)處理器以及地址、寄存器、ALU和移位器的控制。
寄存器ARM內(nèi)含37個寄存器,其中:31個通用32位寄存器6個狀態(tài)寄存器2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)馮·諾依曼體系結(jié)構(gòu)指令寄存器控制器數(shù)據(jù)通道輸入輸出中央處理器存儲器程序指令0指令1指令2指令3指令4數(shù)據(jù)數(shù)據(jù)0數(shù)據(jù)1數(shù)據(jù)2馮·諾依曼體系結(jié)構(gòu)指令寄存器控制器數(shù)據(jù)通道輸入輸出CPU程序存儲器指令0指令1指令2數(shù)據(jù)存儲器數(shù)據(jù)0數(shù)據(jù)1數(shù)據(jù)2地址指令地址數(shù)據(jù)哈佛體系結(jié)構(gòu)2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)指令執(zhí)行的階段計算機(jī)中的1條指令的執(zhí)行可以分若干個階段:①取指,從存儲器中取出指令(fetch);②譯碼,指令譯碼(dec):③取操作數(shù),假定操作數(shù)從寄存器組中取(reg);④執(zhí)行運(yùn)算(ALU);⑤存儲器訪問,操作數(shù)與存儲器有關(guān)(mem);⑥結(jié)果寫回寄存器(res)。指令執(zhí)行的階段流水線的停頓相鄰指令執(zhí)行的數(shù)據(jù)相關(guān)性會產(chǎn)生指令執(zhí)行的停頓。指令執(zhí)行的階段碰到分支類指令,則會使后面緊接該條指令的幾條指令的執(zhí)行都無效。遇到分支指令28ARM7ARM處理器使用3級流水線,分別為:取指級:取指級完成程序存儲器中指令的讀取,并放入指令流水線中。譯碼級:對指令進(jìn)行譯碼,為下一周期準(zhǔn)備數(shù)據(jù)路徑需要的控制信號。這一級指令“占有”譯碼邏輯,而不“占有”數(shù)據(jù)路徑。執(zhí)行級:指令“占有”數(shù)據(jù)路徑,寄存器被讀取,操作數(shù)在桶式移位器中被移位,ALU產(chǎn)生相應(yīng)的運(yùn)算結(jié)果并回寫到目的寄存器中,ALU的結(jié)果則根據(jù)指令需求來更改狀態(tài)寄存器的條件位。
ARM體系結(jié)構(gòu)的3級流水線ARM7體系結(jié)構(gòu)采用了3級流水線,分為取指,譯碼和執(zhí)行。下圖是單周期3級流水線的操作示意圖。
ARM體系結(jié)構(gòu)的3級流水線由于取指的存儲器訪問和執(zhí)行的數(shù)據(jù)通路占用都是不可同時共享的資源,因此對多周期指令來說,會產(chǎn)生流水線阻塞。如圖3-12所示下圖的影印框周期都是與存儲器訪問有關(guān)的。因此在流水線設(shè)計中不允許重疊。31ARM9架構(gòu)采用5級流水線:增加了I-Cache和D-Cache,把存儲器的取指與數(shù)據(jù)存取分開;增加了數(shù)據(jù)寫回的專門通路和寄存器;把指令的執(zhí)行過程分割為5階段:
取指令;指令譯碼、寄存器讀、分支目標(biāo)計算及執(zhí)行;移位和ALU操作;數(shù)據(jù)Cache訪問;結(jié)果寫回到寄存器。32ARM9架構(gòu)采用了5級流水線:
取指:指令從存儲器中取出,放入指令流水線。譯碼:指令譯碼,從寄存器中讀取寄存器操作數(shù)。在寄存器組中有3個操作數(shù)讀端口,因此大多數(shù)ARM指令能在一個周期內(nèi)讀取其操作數(shù)。執(zhí)行:把一個操作數(shù)移位,產(chǎn)生ALU的結(jié)果。如果指令是Load或Store,在ALU中計算存儲器的地址。緩沖/數(shù)據(jù):如果需要,則訪問數(shù)據(jù)存儲器。否則,ALU的結(jié)果只是簡單地緩沖一個時鐘周期,以便使所有指令具有同樣的流水線流程。回寫:將指令產(chǎn)生的結(jié)果回寫到寄存器,包括任何從存儲器讀取的數(shù)據(jù)。33更多級的流水線ARM10采用了6級流水線。ARM11采用了8級流水線。
ARM體系結(jié)構(gòu)的5級流水線5級流水線把存儲器的取指與數(shù)據(jù)存取分開,增加了I-Cache和D-Cache以提高存儲器存取的效率,增加了數(shù)據(jù)寫回的專門通路和寄存器,以減少數(shù)據(jù)通路沖突。這樣,5級流水線分為:取指、指令譯碼、執(zhí)行、數(shù)據(jù)緩存和寫回。2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)存儲器系統(tǒng)寄存器高速緩存SRAM主存儲器DRAM本地存儲器Flash、ROM、磁盤網(wǎng)絡(luò)存儲器Flash、ROM、磁盤時鐘周期01—1050—10020000000分層結(jié)構(gòu)存儲器種類RAM:隨機(jī)存取存儲器,SRAM:靜態(tài)隨機(jī)存儲器,DRAM:動態(tài)隨機(jī)存儲器
1)SRAM比DRAM快
2)SRAM比DRAM耗電多
3)DRAM存儲密度比SRAM高得多
4)DRAM需要周期性刷新ROM:只讀存儲器EPROM(ErasableProgrammableROM)EEPROM(ElectricallyEPROM)FLASH:閃存閃速存儲器(FLASH)相對傳統(tǒng)的EPROM芯片,這種芯片可以用電氣的方法快速地擦寫由于快擦寫存儲器不需要存儲電容器,故其集成度更高,制造成本低于DRAM它使用方便,既具有SRAM讀寫的靈活性和較快的訪問速度,又具有ROM在斷電后可不丟失信息的特點(diǎn),所以快擦寫存儲器技術(shù)發(fā)展十分迅速NOR技術(shù)NOR技術(shù)閃速存儲器是最早出現(xiàn)的FlashMemory,目前仍是多數(shù)供應(yīng)商支持的技術(shù)架構(gòu),它源于傳統(tǒng)的EPROM器件。與其它FlashMemory技術(shù)相比,具有可靠性高、隨機(jī)讀取速度快的優(yōu)勢。在擦除和編程操作較少而直接執(zhí)行代碼的場合,尤其是代碼(指令)存儲的應(yīng)用中廣泛使用。由于NOR技術(shù)FlashMemory的擦除和編程速度較慢,而塊尺寸又較大,因此擦除和編程操作所花費(fèi)的時間很長,在純數(shù)據(jù)存儲和文件存儲的應(yīng)用中,NOR技術(shù)顯得力不從心。NAND技術(shù)NAND技術(shù)FlashMemory具有以下特點(diǎn):以頁為單位進(jìn)行讀和編程操作,1頁為256或512字節(jié);以塊為單位進(jìn)行擦除操作,1塊為4K、8K或16K字節(jié)。具有快編程和快擦除的功能,其塊擦除時間是2ms;而NOR技術(shù)的塊擦除時間達(dá)到幾百ms數(shù)據(jù)、地址采用同一總線,實現(xiàn)串行讀取。隨機(jī)讀取速度慢且不能按字節(jié)隨機(jī)編程。芯片尺寸小,引腳少,是位成本(bitcost)最低的固態(tài)存儲器,突破了每兆字節(jié)1元的價格限制。芯片包含有失效塊,其數(shù)目最大可達(dá)到3~35塊(取決于存儲器密度)。失效塊不會影響有效塊的性能,但設(shè)計者需要將失效塊在地址映射表中屏蔽起來基于NAND的存儲器可以取代硬盤或其它塊設(shè)備。
ARM存儲器結(jié)構(gòu)ARM架構(gòu)的處理器,有的帶有指令Cache和數(shù)據(jù)Cache,但片內(nèi)不帶有片內(nèi)RAM和片內(nèi)ROM,系統(tǒng)所需的RAM和ROM須通過總線外接,如下圖。2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)
ARM
I/O結(jié)構(gòu)ARM架構(gòu)中的處理器核和處理器內(nèi)核一般都沒有I/O的部件和模塊,構(gòu)成ARM架構(gòu)的處理器中的I/O可通過AMBA總線來擴(kuò)充。(1)存儲器映像I/OARM采用存儲器映像I/O的方式,即把I/O端口地址作為特殊的存儲器地址。不過I/O的輸入/輸出與真正的存儲器讀/寫仍然有所不同:存儲器的單元重復(fù)讀多次的值是一致的;而I/O設(shè)備的連續(xù)2次輸入,其輸入值可能會有所不同。(2)直接存儲器存取DMA
在I/O的數(shù)據(jù)流量比較大,中斷處理比較頻繁的場合,會明顯影響系統(tǒng)的性能。因此,許多系統(tǒng)就采用了直接存儲器存取DMA,這樣,I/O的數(shù)據(jù)塊傳送至存儲器的緩沖器區(qū)域就不需要處理器介入。而中斷也僅僅出現(xiàn)在出現(xiàn)出錯時或緩沖器滿時。(3)中斷IRQ和快速中斷FIQ一般的ARM沒有DMA的功能,為了提高I/O處理的能力,對于一些要求I/O處理速率比較高的事件,系統(tǒng)安排快速中斷FIQ(FastInterrupt),而對其余的I/O源仍安排一般中斷IRQ。2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)
ARM協(xié)處理器接口
ARM為了便于片上系統(tǒng)SOC的設(shè)計,處理器內(nèi)核盡可能精簡,要增加系統(tǒng)的功能,可以通過協(xié)處理器來實現(xiàn)。在邏輯上,ARM可以擴(kuò)展16個協(xié)處理器,每個協(xié)處理器可有16個寄存器。協(xié)處理器號功能15系統(tǒng)控制14調(diào)試控制器13~8保留7~4用戶3~0保留
例如,MMU和保護(hù)單元的系統(tǒng)控制都采用CP15協(xié)處理器;JTAG調(diào)試中的協(xié)處理器為CP14,即調(diào)試通信通道DCC(DebugCommunicationChannel)。2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)
ARMAMBA接口
ARM處理器也可以通過先進(jìn)微控制器總線架構(gòu)AMBA(AdvancedMicrocontrollerBusArchitecture)來擴(kuò)展不同體系架構(gòu)的宏單元及I/O部件。AMBA事實上已成為片上總線OCB(OnChipBus)標(biāo)準(zhǔn)。AMBA包括以下三類總線:先進(jìn)高性能總線AHB先進(jìn)系統(tǒng)總線ASB先進(jìn)外圍總線APB2.1.2ARM處理器結(jié)構(gòu)1324ARM的體系結(jié)構(gòu)ARM的流水線結(jié)構(gòu)ARM存儲器結(jié)構(gòu)ARMI/O結(jié)構(gòu)5ARMAMBA接口6ARM協(xié)處理器接口ARMJTAG調(diào)試接口78馮諾依曼結(jié)構(gòu)與哈佛結(jié)構(gòu)JTAG調(diào)試接口的結(jié)構(gòu)
JTAG是聯(lián)合測試工作組(JointTestActionGroup)的簡稱,是在名為標(biāo)準(zhǔn)測試訪問端口和邊界掃描結(jié)構(gòu)的IEEE的標(biāo)準(zhǔn)1149.1的常用名稱。此標(biāo)準(zhǔn)用于測試訪問端口,使用邊界掃描的方法來測試印刷電路板。
JTAG最初是用來對芯片進(jìn)行測試的,基本原理是在器件內(nèi)部定義一個TAP(TestAccessPort測試訪問口)通過專用的JTAG測試工具對內(nèi)部節(jié)點(diǎn)進(jìn)行測試。JTAG測試允許多個器件通過JTAG接口串聯(lián)在一起,形成一個JTAG鏈,能實現(xiàn)對各個器件分別測試?,F(xiàn)今,JTAG接口還常用于實現(xiàn)ISP(In-SystemProgrammable;在線編程),對FLASH等器件進(jìn)行編程。JTAG調(diào)試接口的結(jié)構(gòu)因為只有一條數(shù)據(jù)線,通信協(xié)議有必要像其他串行設(shè)備接口一樣為串行傳輸。時鐘由TCK引腳輸入。配置是通過TMS引腳采用狀態(tài)機(jī)的形式一次操作一位來實現(xiàn)的。每一位數(shù)據(jù)在每個TCK時鐘脈沖下分別由TDI和TDO引腳傳入或傳出。可以通過加載不同的命令模式來讀取芯片的標(biāo)識,對輸入引腳采樣,驅(qū)動(或懸空)輸出引腳,操控芯片功能,或者旁路(將TDI與TDO連通以在邏輯上短接多個芯片的鏈路)。JTAG調(diào)試接口的結(jié)構(gòu)由測試訪問端口TAP(TestAccessPort)控制器、指令寄存器、數(shù)據(jù)寄存器以及與JTAG接口兼容的ARM架構(gòu)處理器組成。JTAG的控制寄存器①測試訪問端口TAP控制器對嵌入在ARM處理器核內(nèi)部的測試功能電路進(jìn)行訪問控制,是一個同步狀態(tài)機(jī)。通過測試模式選擇TMS和時鐘信號TCK來控制其狀態(tài)機(jī)。②指令寄存器是串行移位寄存器,通過它可以串行輸入執(zhí)行各種操作的指令。③數(shù)據(jù)寄存器組是一組串行移位寄存器。操作指令被串行裝入由當(dāng)前指令所選擇的數(shù)據(jù)寄存器,隨著操作的進(jìn)行,測試結(jié)果被串行移出。其中:器件ID寄存器:讀出在芯片內(nèi)固化的ID號。旁路寄存器:1位移位寄存器,用1個時鐘的延遲把TDI連至TDO,使測試者在同一電路板測試循環(huán)內(nèi)訪問其他器件。邊界掃描寄存器(掃描鏈):截取ARM處理器核與芯片引腳之間所有信號,組成專用的寄存器位。JTAG測試信號TRST:測試復(fù)位輸入信號,測試接口初始化。TCK:測試時鐘,在TCK時鐘的同步作用下,通過TDI和TDO引腳串行移入/移出數(shù)據(jù)或指令,同時也為測試訪問端口TAP控制器的狀態(tài)機(jī)提供時鐘。TMS:測試模式選擇信號,控制測試接口狀態(tài)機(jī)的操作。TDI,測試數(shù)據(jù)輸入線,其串行輸入數(shù)據(jù)送至邊界掃描寄存器或指令寄存器(由TAP控制器的當(dāng)前狀態(tài)及已保存在指令寄存器中的指令來控制)。TDO:測試數(shù)據(jù)輸出線,把從邊界掃描鏈采樣的數(shù)據(jù)傳播至串行測試電路中的下一個芯片。TAP狀態(tài)機(jī)測試訪問端口TAP控制器是一個16狀態(tài)的有限狀態(tài)機(jī),為JTAG提供控制邏輯。狀態(tài)轉(zhuǎn)移圖如右圖:
JTAG接口控制指令控制指令用于控制JTAG接口各種操作,控制指令包括公用(Public)指令和私有(Private)指令。最基本的公用指令有:BYPASS:旁路片上系統(tǒng)邏輯指令,用于未被測試的芯片,即把TDI與TPO旁路(1個時鐘延遲)。EXTEST:片外電路測試指令,用于測試電路板上芯片之間的互連。IDCODE:讀芯片ID碼指令,用于識別電路板上的芯片。此時,ID寄存器在TDI與TDO引腳之間,在captureDR狀態(tài)中,芯片的ID復(fù)制至該寄存器,然后在shiftDR狀態(tài)中移出。INTEST:片內(nèi)測試指令,邊界掃描寄存器位于TDI與TDO引腳之間,處理器核邏輯輸入和輸出狀態(tài)被該寄存器捕獲和控制。2.1.3ARM處理器內(nèi)核
ARM體系結(jié)構(gòu)的處理器內(nèi)核有:ARM7TDMI、ARM8、ARM9TDMI、ARM10TDMI及ARM11TDMI等。ARM7TDMIARM7TDMI名字原義如下:ARM7ARM632位整數(shù)核的3V兼容的版本;T16位壓縮指令集Thumb;D在片調(diào)試(Debug)支持,允許處理器響應(yīng)調(diào)試請求暫停;M增強(qiáng)型乘法器(Multiplier),與以前處理器相比性能更高,產(chǎn)生全64位結(jié)果;I嵌入式ICE硬件提供片上斷點(diǎn)和調(diào)試點(diǎn)支持。ARM7TDMI體系結(jié)構(gòu)圖ScanChain133個掃描單元,包括數(shù)據(jù)總線和一個斷點(diǎn)控制信號。ScanChain0113個掃描單元,包括ARM所有的I/O,地址/數(shù)據(jù)總線和輸入/輸出控制信號。此鏈很復(fù)雜,不易控制,但包含信息豐富,可通過它得到ARM7TDMI內(nèi)核的所有信息。ScanChain238個掃描單元,通過控制EmbeddedICE宏單元,實現(xiàn)對ARM進(jìn)行指令的斷點(diǎn)、觀察點(diǎn)的控制。ARM7TDMI引腳圖ARM7TDMI-接口存儲器接口中斷調(diào)試接口協(xié)處理器接口ARM7TDMI-存儲器接口
MCLKnWAITA[31:0]D[31:0]nMREQ,SEQnRWLOCKABEDBEnTRANSABORTClocksandClockControlMemoryManagementMemoryInterfaceDataandAddressBusControlMemoryAccessControlnM[4:0]MAS[1:0]BL[3:0]APE,ALETBE
ECLKTBITBUSENnENINBIGENDARM7TDMInENOUTARM7TDMI-存儲器接口MCLK–輸入處理器工作的時鐘。靜態(tài)設(shè)計的ARM通過延長時鐘周期來訪問慢速的設(shè)備。nWAIT–輸入在ARM內(nèi)部與MCLK相與。必須在MCLK為低的相位階段改變。容許該信號從一個周期擴(kuò)展到另一個周期,延長總線訪問周期。ECLK–輸出核心邏輯的時鐘的輸出。在正常和調(diào)試狀態(tài)下反映內(nèi)部時鐘。ph1&ph2–內(nèi)部信號雙相位非覆蓋的內(nèi)部時鐘。處理器內(nèi)部工作周期。ARM7TDMI-存儲器接口MCLKnWAITPhase1Phase2Phase2Phase1ph2InternalClockECLKph1InternalClockARM7TDMI-存儲器接口MCLKnWAITPhase1Phase2Phase2Phase1ph2InternalClockECLKph1InternalClockARM7TDMI-存儲器接口MCLKnWAITPhase1Phase2Phase2Phase1ph2InternalClockECLKph1InternalClockARM7TDMI-存儲器接口nMREQ–輸出:存儲器請求.低有效,指示在接下來的周期中進(jìn)行存儲器訪問。SEQ–輸出:連續(xù)地址訪問高有效,指示在接下來的周期中地址不變或大一個操作數(shù)(字或半字)nRW–輸出:非讀/寫區(qū)分存儲器讀寫訪問LOCK–輸出:鎖定操作指示一條交換指令正在執(zhí)行,接下來的兩個處理器總線周期是不可見的。MAS[1:0]–輸出:存儲器訪問大小指示字、半字或字節(jié)訪問。ARM7TDMI-存儲器接口APE和ALE–輸入ARM建議兩個信號都為高,以便有最長的時間進(jìn)行地址譯碼。任何一個信號都可以連接到在數(shù)據(jù)訪問期間需要穩(wěn)定地址的設(shè)備。APE:地址流水線使能APE=1–地址是流水線的(在后續(xù)的相位2提供).APE=0–重新定時地址改變的時序,從MCLK的下降沿開始??刂茖[31:0]的透明鎖存。ALE:地址鎖存使能控制對A[31:0]的透明鎖存。僅用于已有的系統(tǒng)設(shè)計,因為它比APE更復(fù)雜。ARM7TDMI-存儲器接口ABE–輸入:地址總線使能當(dāng)ABE為低時,下面的信號處于高阻狀態(tài):A[31:0],nRW,LOCK,MAS[1:0],nOPC,andnTRANSDBE–輸入:數(shù)據(jù)總線使能當(dāng)DBE為低時,D[31:0]處于高阻狀態(tài)。TBE–輸入:測試總線使能當(dāng)TBE為低時,下面的信號處于高阻狀態(tài):D[31:0],A[31:0],nRW,LOCK,MAS[1:0],nOPC,andnTRANS在ABE和DBE都為低時,情況一樣。ARM7TDMI-存儲器接口nOPC–輸出低有效,指示處理器正在從存儲器取指。nTRANS–輸出低有效,指示處理器處于‘usermode’.nM[4:0]–輸出當(dāng)前操作模式,即User,FIQ,IRQ,Supervisor,Abort,SystemorUndefined.ABORT–輸入指示請求的訪問不容許。既用于指令預(yù)取,又用于Dataabort。ARM7TDMI-接口存儲器接口中斷調(diào)試接口協(xié)處理器接口ARM7TDMI-中斷接口nIRQnFIQISYNCInterruptsARM7TDMIARM7TDMI-中斷接口2個中斷源:nIRQandnFIQ–輸入nFIQ比nIRQ優(yōu)先級高。FIQ代碼可以在進(jìn)入中斷后直接訪問執(zhí)行。可以選擇(ISYNC–輸入)同步或異步時序。異步時序(ISYNC=0)損失一個周期的同步。同步時序(ISYNC=1)nIRQ和nFIQ必須在MCLK的下降沿的時候已經(jīng)建立且保持。nFIQ和nIRQ中斷可以通過設(shè)置CPSR寄存器中的F和I位屏蔽。ARM7TDMI-中斷接口ISYNC=0EarliestStartofInterruptSequenceInstructionfromInterruptvectorInterruptVectorAddressMCLKnFIQ/nIRQA[31:0]D[31:0]ARM7TDMI-中斷接口ISYNC=1EarliestStartofInterruptSequencevectorMCLKnFIQ/nIRQA[31:0]D[31:0]InterruptVectorAddressInstructionfromInterruptARM7TDMI-接口存儲器接口中斷調(diào)試接口協(xié)處理器接口ARM7TDMI-調(diào)試接口DBGRQBREAKPTDBGACKDebugInterface
ECLKEXTERN[1:0]DBGENARM7TDMIJTAGInterfaceARM7TDMI-調(diào)試接口TDI -Input -TestDataInTDO -Output -TestDataOutTMS -Input -TestModeSelectTCK -Input -TestClocknTRST -Input -TestReset(activelow)ARM7TDMI-調(diào)試接口DBGEN–輸入(DEBUGENABLE)必須保持高電平,以允許ARM7TDMI的軟件調(diào)試。EXTERN[1:0]–輸入輸入到EmbeddedICE宏單元,允許基于外部條件的斷點(diǎn)。ARM7TDMI-調(diào)試接口下面的信號僅用于擴(kuò)展外部調(diào)試。Multi-ICE不使用這些信號。BREAKPT–輸入(BREAKPOINT)在指令上標(biāo)志斷點(diǎn)。在數(shù)據(jù)上標(biāo)志觀察點(diǎn)。如果不用,保持低電平。DBGRQ–輸入(DEBUGREQUEST)強(qiáng)制ARM7TDMI核進(jìn)入調(diào)試狀態(tài),高有效。如果不用,保持低電平。DBGACK–輸出(DEBUGACKNOWLEDGE)ARM7TDMI進(jìn)入調(diào)試狀態(tài)的響應(yīng)信號。高電平指示ARM7TDMI核已進(jìn)入調(diào)試狀態(tài)。ARM7TDMI-調(diào)試接口TAP信號容許增加額外的鏈SCREG[3:0] -
輸出 當(dāng)前選擇的掃描鏈IR[3:0] -
輸出 當(dāng)前已加載的指令TAPSM[3:0] -
輸出 TAP狀態(tài)機(jī)狀態(tài)SDINBS -
輸出
掃描鏈串行數(shù)據(jù)輸入SDOUTBS -
輸入 掃描鏈串行數(shù)據(jù)輸出所需其它的移位、捕獲時鐘及多路復(fù)用器或選擇線。ARM7TDMI-接口存儲器接口中斷調(diào)試接口協(xié)處理器接口ARM7TDMI-協(xié)處理器接口nCPI,nOPCCPB,CPACoprocessorInterfaceARM7TDMIARM7TDMI-協(xié)處理器接口可以支持多達(dá)16個協(xié)處理器。nOPC–輸出:取操作碼低有效,指示正在取指令。使能協(xié)處理器跟蹤處理器指令流水線。nCPI–輸出:協(xié)處理器指令低有效,指示當(dāng)前正在執(zhí)行的指令是一條協(xié)處理器指令,且該指令應(yīng)該執(zhí)行。CPA–輸入:協(xié)處理器缺少高有效,當(dāng)能夠執(zhí)行所要求的協(xié)處理器操作的協(xié)處理器存在時變低。CPB–輸入:協(xié)處理器忙高有效,當(dāng)協(xié)處理器準(zhǔn)備好要執(zhí)行要求的協(xié)處理器操作時變低。如果沒有連接外部協(xié)處理器的話,將CPA和CPB拉高。采用了3級流水線結(jié)構(gòu),指令執(zhí)行分為取指、譯碼和執(zhí)行等3個階段;運(yùn)算器能實現(xiàn)32位整數(shù)運(yùn)算;采用了高效的乘法器,用32×8位乘法器實現(xiàn)32×32位乘法(結(jié)果為64位)。采用v4T版指令,支持16位Thumb指令集;嵌入式ICE(Embedded-ICE)模塊為ARM7TDMI提供了片內(nèi)調(diào)試功能。同時通過JTAG接口可以很方便地用PC主機(jī)對ARM7TDMI進(jìn)行開發(fā)和調(diào)試。還提供了存儲器接口、MMU接口、協(xié)處理器接口和調(diào)試接口,以及時鐘與總線等控制信號。ARM7TDMI主要特點(diǎn)ARM7TDMI主要性能指標(biāo)工藝:0.35μm(新近采用0.25μm);金屬布線:3層;電壓:3.3V(新近采用1.2V、0.9V);管子數(shù):74209只;內(nèi)核芯片面積:2.1mm2;時鐘:0~66MHz;MIPS:66;功耗:87mW;MIPS/W:690(采用0.25μm工藝,0.9V電壓,可達(dá)1200MIPS/W)。ARM9TDMI主要性能指標(biāo)工藝:025μm(0.18μm);金屬布線:3層;電壓:2.5V(1.2V);管子數(shù):11100只;核芯片面積:2.1mm2;時鐘:0~200MHz;MIPS:220;功耗:150mW;MIPS/W:1500。ARM9TDMI流水線結(jié)構(gòu)ARM9TDMI處理器內(nèi)核采用了5級流水線。ARM9TDMI主要特點(diǎn)采用指令和數(shù)據(jù)分離訪問的方式,即采用了指令Cache和數(shù)據(jù)Cache。用專門硬件來直接完成ARM與Thumb指令的譯碼。ARM9TDMI也有協(xié)處理器接口,允許在芯片增加浮點(diǎn)、數(shù)字信號處理或其他專用的協(xié)處理器。ARM9TDMI也提供相應(yīng)的軟核。ARM9E-S是具有DSP功能的能執(zhí)行v5TE版ARM指令的ARM9TDMI軟核,當(dāng)然其芯片面積要增加30%。在ARM9流水線設(shè)計中,增加專用流水段用于存儲器訪問和將結(jié)果寫回到寄存器組。而且,寄存器讀也移到譯碼段。這些改變通過減少在單一時鐘周期內(nèi)操作最大的邏輯數(shù)目,允許更高的時鐘頻率。ARM10TDMIARM10TDMI在系統(tǒng)結(jié)構(gòu)上主要采用增加時鐘速率和減少每條指令平均時鐘周期數(shù)CPI(ClockPerInstruction)兩大措施,以同樣的工藝,同樣的芯片面積,在性能上2倍于ARM9TDMI。
ARM10TDMI采用提高時鐘速率、6級流水線、分支預(yù)測邏輯、64位存儲器和無阻塞的存/取邏輯等措施,使ARM10TDMI的性能得到很大提高,是目前高檔ARM體系結(jié)構(gòu)的處理器內(nèi)核。流水線結(jié)構(gòu)2.1.4ARM處理器核在最基本的ARM處理器內(nèi)核基礎(chǔ)上,可增加Cache、存儲器管理單元MMU、協(xié)處理器CP15、AMBA接口以及EMT宏單元等,構(gòu)成ARM處理器核。以ARM7TDMI處理器內(nèi)核為基礎(chǔ)的有:ARM720T處理器核ARM740T處理器核以ARM9TDMI處理器內(nèi)核為基礎(chǔ)的有:ARM920T處理器核ARM940T處理器核ARM720T
ARM720T處理器核是在ARM7TDMI處理器內(nèi)核基礎(chǔ)上,增加8KB的數(shù)據(jù)與指令Cache,支持段式和頁式存儲的MMU、寫緩沖器及AMBA接口構(gòu)成。ARM740TARM740T處理器核與ARM720T處理器核相比,結(jié)構(gòu)基本相同,但ARM740處理器核沒有存儲器管理單元MMU,不支持虛擬存儲器尋址;而是用存儲器保護(hù)單元來提供基本保護(hù)和Cache的控制。這為低價格低功耗的嵌入式應(yīng)用提供了合適的處理器核。由于在嵌入式應(yīng)用中運(yùn)行固定軟件,也不需要進(jìn)行地址變換,所以可以省去地址變換后備緩沖器TLB。ARM920T
ARM920T處理器核是在ARM9TDMI處理器內(nèi)核基礎(chǔ)上,增加了分離式的指令Cache和數(shù)據(jù)Cache,并帶有相應(yīng)的存儲器管理單元I-MMU和D-MMU、寫緩沖器及AMBA接口等。ARM920T處理器核特性:工藝:0.25μm;金屬布線:4層;電壓:2.5V;管子數(shù):2500000只;核芯片面積:23~25mm2;時鐘:0~200MHz;MIPS:220;功耗:560mW;MIPS/W:390。ARM920T特性ARM940T
ARM940T處理器核與ARM740T處理器核相似,采用了ARM9TDMI處理器內(nèi)核,是ARM920T處理器核的簡化。沒有存儲器管理單元MMU,不支持虛擬存儲器尋址,而是用有儲器保護(hù)單元來提供存儲保護(hù)和Cache控制。ARM940T的存儲保護(hù)單元結(jié)構(gòu)與ARM740T的基本相同。主要內(nèi)容1324ARM體系結(jié)構(gòu)概述
編程模型ARM基本尋址方式ARM指令集5ARM9TDMI內(nèi)核6ARM9與ARM7的比較ARM920T核72.2.1數(shù)據(jù)類型ARM處理器支持下列數(shù)據(jù)類型:Byte字節(jié),8位;Halfword半字,16位(半字必須與2字節(jié)邊界對準(zhǔn));Word字,32位(字必須與4字節(jié)邊界對準(zhǔn))。2.2.2處理器模式ARM體系結(jié)構(gòu)支持7種處理器模式。處理器模式說明用戶usr正常程序執(zhí)行模式FIQfiq支持高速數(shù)據(jù)傳送或通道處理IRQirq用于通用中斷處理管理svc操作系統(tǒng)保護(hù)模式中止abt實現(xiàn)虛擬存儲器和/或存儲器保護(hù)未定義und支持硬件協(xié)處理器的軟件仿真系統(tǒng)sys運(yùn)行特權(quán)操作系統(tǒng)任務(wù)
處理器模式分類處理器模式用戶模式特權(quán)模式異常模式系統(tǒng)模式FIQIRQ管理中止未定義2.2.3處理器工作狀態(tài)ARM處理器有兩種工作狀態(tài):ARM:32位,這種狀態(tài)下執(zhí)行字對準(zhǔn)的ARM指令;Thumb:16位,這種狀態(tài)下執(zhí)行半字對準(zhǔn)的Thumb指令。ARM處理器在兩種工作狀態(tài)之間可以切換。ARM和Thumb之間狀態(tài)的切換不影響處理器的模式或寄存器的內(nèi)容。(1)進(jìn)入Thumb狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為1時,執(zhí)行BX指令進(jìn)入Thumb狀態(tài)。如果處理器在Thumb狀態(tài)進(jìn)入異常,則當(dāng)異常處理(IRQ﹑FIQ﹑Undef﹑Abort和SWI)返回時,自動轉(zhuǎn)換到Thumb狀態(tài)。(2)進(jìn)入ARM狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為0時,執(zhí)行BX指令進(jìn)入ARM狀態(tài)。處理器進(jìn)行異常處理(IRQ﹑FIQ﹑Reset﹑Undef﹑Abort和SWI)。在此情況下,把PC放入異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入ARM狀態(tài)。2.2.4寄存器組織ARM處理器總共有37個寄存器:31個通用寄存器,包括程序計數(shù)器(PC)。這些寄存器是32位的。6個狀態(tài)寄存器。這些寄存器也是32位的,但只使用了其中的12位。通用寄存器通用寄存器(R0~R15)可分成3類:不分組寄存器R0~R7:在所有的處理器模式下,它們每一個都訪問一樣的32位物理寄存器。分組寄存器R8~R14:它們每一個訪問的物理寄存器取決于當(dāng)前的處理器模式。每種處理器模式有專用的分組寄存器用于快速異常處理。寄存器R13通常用作堆棧指針,稱作SP。
寄存器R14用作子程序鏈接寄存器,也稱為鏈接寄存器LR。寄存器R8~R12各有兩組物理寄存器。一組為FIQ模式,另一組為除FIQ以外的其它模式。寄存器R13、R14各有6個分組的物理寄存器。1個用于用戶模式和系統(tǒng)模式,而其它5個分別用于5種異常模式。程序計數(shù)器R15:在ARM狀態(tài),位[1:0]為0,位[31:2]保存PC在Thumb狀態(tài),位[0]為0,位[31:1]保存PC。程序狀態(tài)寄存器在所有處理器模式下都可以訪問當(dāng)前程序狀態(tài)寄存器CPSR(CurrentProgramStatusRegister)。CPSR包含條件碼標(biāo)志、中斷禁止位、當(dāng)前處理器模式以及其它狀態(tài)和控制信息。每種異常模式都有一個程序狀態(tài)保存寄存器SPSR(SavedProgramStatusRegister)。當(dāng)異常出現(xiàn)時,SPSR用于保留CPSR的狀態(tài)。CPSR和SPSR格式如下:程序狀態(tài)寄存器條件碼標(biāo)志N、Z、C、V(Negative、Zero、Carry、oVerflow)位稱作條件碼標(biāo)志(ConditionCodeFlags)。通常條件碼標(biāo)志通過執(zhí)行下述指令進(jìn)行修改,即比較指令(CMN、CMP、TEQ、TST);一些算術(shù)運(yùn)算、邏輯運(yùn)算和傳送指令,它們的目的寄存器不是R15。這些指令通過在指令助記符后加上字符“S”進(jìn)行標(biāo)志設(shè)置。條件碼標(biāo)志的含義N:如果結(jié)果是帶符號二進(jìn)制補(bǔ)碼,若結(jié)果為負(fù)數(shù),則N=1;若結(jié)果為正數(shù)或0,則N=0。Z:若指令的結(jié)果為0,則置1,否則置0。C:-加法,包括比較指令CMN。產(chǎn)生進(jìn)位則C置1;否則置0。-減法,包括比較指令CMP。產(chǎn)生借位則C置0;否則置1。-對于結(jié)合移位操作的非加/減法指令,C置為移出值的最后1位。V:對于加法或減法指令,當(dāng)發(fā)生帶符號溢出時,V置1。程序狀態(tài)寄存器—溢出式子1:
式子2:
0111
(7)
0011
(3)
+
0111
(7)
+
0011
(3)
-------------------------------
---------------------------
1110
(-2)溢出
0110
(6)正確溢出標(biāo)志V:對于加法或減法指令,當(dāng)發(fā)生帶符號溢出時,V置1。式子3:
式子4:
1100
(-4)
1100
(-4)
+
1000
(-8)
+
1111
(-1)
-------------------------------
----------------------------
10100
(
4)溢出
11011
(-5)正確
--
--
進(jìn)位
進(jìn)位程序狀態(tài)寄存器—溢出總結(jié)兩個正數(shù)相加,如果結(jié)果為負(fù)數(shù),就產(chǎn)生了溢出。兩個負(fù)數(shù)相加,如果結(jié)果為正數(shù),就產(chǎn)生了溢出。不同符號的兩個數(shù)相加,不會產(chǎn)生溢出。對于加法,當(dāng)計算的結(jié)果最高位向上進(jìn)一位時,就會產(chǎn)生進(jìn)位情況.程序狀態(tài)寄存器控制位程序狀態(tài)寄存器PSR(ProgramStatusRegister)的最低8位I、F、T和M[4:0]用作控制位。①中斷禁止位I置1則禁止IRQ中斷;F置1則禁止FIQ中斷。②T位
T=0指示ARM執(zhí)行;T=1指示Thumb執(zhí)行。③模式位M0、M1、M2、M3和M4是模式位。這些位決定處理器的工作模式。M[4:0]模式可訪問的寄存器10000用戶PC、R14~R0、CPSR10001
FIQPC、R14_fiq~R8_fiq、R7~R0、CPSR、SPSR_fiq10010
IRQPC、R14_irq、R13_irq、R12~R0、CPSR、SPSR_irq10011管理PC、R14_svc、R13_svc、R12~R0、CPSR、SPSR_svc10111中止PC、R14_abt、R13_abt、R12~R0、CPSR、SPSR_abt11011未定義PC、R14_und、R13_und、R12~R0、CPSR、SPSR_und11111系統(tǒng)PC、R14~R0、CPSRThumb狀態(tài)的寄存器集Thumb
狀態(tài)下的寄存器集是ARM狀態(tài)下的寄存器集的子集。程序員可以直接訪問8個通用寄存器(R0~R7)、PC、SP、LR和CPSR。每一種特權(quán)模式都有一組SP、LR和SPSR。
Thumb狀態(tài)的寄存器集Thumb狀態(tài)寄存器與ARM狀態(tài)寄存器的關(guān)系注意:在Thumb狀態(tài)下,寄存器R8-R15(高寄存器)并不是標(biāo)準(zhǔn)寄存器集的一部分。2.2.5異常異常由內(nèi)部或外部源產(chǎn)生并引起處理器處理一個事件,例如外部中斷或試圖執(zhí)行未定義指令都會引起異常。ARM支持7種類型的異常。異常類型模式正常地址高向量地址復(fù)位管理0x000000000xFFFF0000未定義指令未定義0x000000040xFFFF0004軟件中斷(SWI)管理0x000000080xFFFF0008預(yù)取中止(取指令存儲器中止)中止0x0000000C0xFFFF000C數(shù)據(jù)中止(數(shù)據(jù)訪問存儲器中止)中止0x000000100xFFFF0010IRQ(中斷)IRQ0x000000180xFFFF0018FIQ(快速中斷)FIQ0x0000001C0xFFFF001C當(dāng)異常出現(xiàn)時,異常模式分組的R14和SPSR用于保存狀態(tài)。當(dāng)處理異常返回時,把SPSR傳送到CPSR,R14傳送到PC。這可用兩種方法自動完成,即使用帶“S”的數(shù)據(jù)處理指令,將PC作為目的寄存器;使用帶恢復(fù)CPSR的多加載指令。優(yōu)先級異常1(最高)復(fù)位2數(shù)據(jù)中止3FIQ4IRQ5預(yù)取中止6(最低)未定義指令、SWI2.2.5異常異常優(yōu)先級2.2.6存儲器和存儲器映射I/O地址空間ARM體系結(jié)構(gòu)使用232個8位字節(jié)的單一、線性地址空間。將字節(jié)地址做為無符號數(shù)看待,范圍為0~232-1。存儲器格式2.2.6存儲器和存儲器映射I/O非對準(zhǔn)的存儲器訪問存儲器映射I/O
若在ARM態(tài)執(zhí)行期間,將沒有字對準(zhǔn)的地址寫到R15中,結(jié)果通常不可預(yù)知或者地址的位[1:0]被忽略。若在Thumb態(tài)執(zhí)行期間,將沒有半字對準(zhǔn)的地址寫到R15中,則地址的位[0]通常忽略。當(dāng)執(zhí)行無效代碼時,從R15讀值的結(jié)果對ARM狀態(tài)來說總是位[1:0]為0,對Thumb狀態(tài)來說總是位[0]為0。ARM系統(tǒng)完成I/O功能的標(biāo)準(zhǔn)方法是使用存儲器映射I/O。從存儲器映射I/O地址加載用于輸入,向存儲器映射I/O地址存儲用于輸出。存儲器映射I/O位置的行為通常不同于對一個正常存儲器位置所期望的行為。例如,對于存儲器映射I/O位置,第2次加載的返回值可以不同于第1次加載的返回值。主要內(nèi)容1324ARM體系結(jié)構(gòu)概述
編程模型ARM基本尋址方式ARM指令集5ARM9TDMI內(nèi)核6ARM9與ARM7的比較ARM920T核7
尋址方式是根據(jù)指令中給出的地址碼字段來尋找真實操作數(shù)地址的方式。ARM處理器支持的基本尋址方式有:2.3ARM基本尋址方式寄存器尋址立即尋址寄存器移位尋址寄存器間接尋址變址尋址多寄存器尋址堆棧尋址塊復(fù)制尋址相對尋址寄存器尋址所需要的值在寄存器中,指令中地址碼給出的是寄存器編號,即寄存器的內(nèi)容為操作數(shù)。例如指令:ADDR0,R1,R2;R0R1+R2這條指令將2個寄存器(R1和R2)的內(nèi)容相加,結(jié)果放入第3個寄存器R0中。必須注意寫操作數(shù)的順序,第1個是結(jié)果寄存器,然后是第一操作數(shù)寄存器,最后是第二操作數(shù)寄存器。立即尋址立即尋址是一種特殊的尋址方式,指令中在操作碼字段后面的地址碼部分不是通常意義上的操作數(shù)地址,而是操作數(shù)本身。這樣的數(shù)稱為立即數(shù)。例如指令:ADDR3,R3,#1;R3R3+1ANDR8,R7,#0xff;R8R7[7:0]第2個源操作數(shù)為一個立即數(shù),以“#”為前綴,十六進(jìn)制值以在“#”后加“0x”或“&”表示。第1條指令完成寄存器R3的內(nèi)容加1,結(jié)果放回R3中。第2條指令完成R7的32位值與0FFH相“與”,結(jié)果為將R7的低8位送到R8中。寄存器移位尋址這種尋址方式是ARM指令集特有的。第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。例如指令:ADDR3,R2,R1,LSL#3;R3R2+8×R1寄存器R1的內(nèi)容邏輯左移3位,再與寄存器R2內(nèi)容相加,結(jié)果放入R3中。可以采取的移位操作如有:LSL:邏輯左移(LogicalShiftLeft)。寄存器中字的低端空出的位補(bǔ)0。0LSR:邏輯右移(LogicalShiftRight)。寄存器中字的高端空出的位補(bǔ)0。0可以采取的移位操作如有:寄存器移位尋址ASR:算術(shù)右移(ArithmeticShiftRight)。算術(shù)移位的對象是帶符號數(shù),若源操作數(shù)為正數(shù),則字的高端空出的位補(bǔ)0。若源操作數(shù)為負(fù)數(shù),則字的高端空出的位補(bǔ)1。RRX:擴(kuò)展為1的循環(huán)右移(RotateRighteXtendedby1place)。操作數(shù)右移一位,空位(位[31])用原C標(biāo)志值填充。
ROR:循環(huán)右移(ROtateRight)。從字的最低端移出的位填入字的高端空出的位。C寄存器間接尋址指令中的地址碼給出某一通用寄存器的編號。在被指定的寄存器中存放操作數(shù)的有效地址,而操作數(shù)則存放在存儲單元中,即寄存器為地址指針。例如指令:LDRR0,[R1];R0[R1]STRR0,[R1];R0[R1]寄存器間接尋址使用一個寄存器(基址寄存器)的值作為存儲器的地址。第1條指令將寄存器R1指向的地址單元的內(nèi)容加載到寄存器R0中。第2條指令將寄存器R0存入寄存器R1指向的地址單元。變址尋址變址尋址就是將基址寄存器的內(nèi)容與指令中給出的位移量相加,形成操作數(shù)有效地址。變址尋址用于訪問基址附近的存儲單元,包括基址加偏移和基址加索引尋址。寄存器間接尋址是偏移量為0的基址加偏移尋址?;芳悠茖ぶ坊芳铀饕龑ぶ非八饕龑ぶ贩绞剑夯沸杓樱ɑ驕p)最大4KB的偏移來計算訪問的地址。例如:LDRR0,[R1,#4];R0[R1+4]后索引尋址方式:基址不帶偏移作為傳送的地址,傳送后自動索引。例如:LDRR0,[R1],#4;R0[R1];R1R1+4
指令指定一個基址寄存器,再指定另一個寄存器(索引),其值作為位移加到基址上形成存儲器地址。例如:LDRR0,[R1,R2];R0[R1+R2]多寄存器尋址一次可以傳送幾個寄存器的值。允許一條指令傳送16個寄存器的任何子集(或所有16個寄存器)。例如指令:LDMIAR1,{R0,R2,R5};R0[R1];R2[R1+4];R5[R1+8]
由于傳送的數(shù)據(jù)項總是32位的字,基址R1應(yīng)該字對準(zhǔn)。這條指令將R1指向的連續(xù)存儲單元的內(nèi)容送到寄存器R0、R2和R5。堆棧尋址堆棧是按“先進(jìn)后出”(FILO)的特定順序進(jìn)行存取的存儲區(qū)。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲器區(qū)域(堆棧)。棧指針?biāo)付ǖ拇鎯卧褪嵌褩5臈m?。根?jù)增長方向,堆??煞譃椋合蛏仙L:即向高地址方向生長,稱為遞增堆棧(AscendingStack)。向下生長:即向低地址方向生長,稱為遞減堆棧(DescendingStack)。根據(jù)棧指針的指向位置,堆棧可分為:滿堆棧:堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項空堆棧:堆棧指針指向下一個數(shù)據(jù)項放入的空位置,這樣就有4種類型的堆棧表示遞增和遞減的滿和空堆棧的各種組合。ARM處理器支持所有這4種類型的堆棧。滿遞增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最高地址??者f增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向堆棧上的第一個空位置。滿遞減:堆棧通過減小存儲器的地址向下增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的最低地址。空遞減:堆棧通過減小存儲器的地址向下增長,堆棧指針指向堆棧下的第一個空位置。堆棧尋址塊復(fù)制尋址ARM支持兩種不同角度的尋址機(jī)制:堆棧角度和塊復(fù)制角度,兩者都映射到相同的基本指令。堆棧和塊拷貝角度的多寄存器加載和存儲指令映射如下圖。塊復(fù)制角度的尋址舉例,執(zhí)行指令之前的基址寄存器值是R9,自動尋址之后的基址寄存器是R9’。
塊復(fù)制尋址相對尋址相對尋址是變址尋址的一種變通,由程序計數(shù)器PC提供基地址。指令中的地址碼字段作為位移量,兩者相加后得到操作數(shù)的有效地址。位移量指出的是操作數(shù)與現(xiàn)行指令之間的相對位置。例如指令:BLSUBR;轉(zhuǎn)移到SUBR…;返回到此SUBR…;子程序入口地址MOVPC,R14;返回主要內(nèi)容1324ARM體系結(jié)構(gòu)概述
編程模型ARM基本尋址方式ARM指令集5ARM9TDMI內(nèi)核6ARM9與ARM7的比較ARM920T核7129名詞解釋:機(jī)器指令、偽指令、宏指令機(jī)器指令被處理器直接執(zhí)行,偽指令和宏指令不能。機(jī)器指令包括ARM指令集和Thumb指令集;偽指令是在源程序匯編期間,由匯編編譯器處理。其作用是為匯編程序完成準(zhǔn)備工作;宏指令在程序中用于調(diào)用宏,宏是一段獨(dú)立的程序代碼;在程序匯編時,對宏調(diào)用進(jìn)行展開,用宏體代替宏指令。2.4.0
ARM指令集概述130指令:是規(guī)定計算機(jī)進(jìn)行某種操作的命令。指令系統(tǒng):計算機(jī)能夠執(zhí)行的各種指令的集合。
ARM指令集概念131所有指令都是32位的。大多數(shù)指令都在單周期內(nèi)完成。所有指令都可以條件執(zhí)行。ARM指令為load/store類型?;局噶顑H36條,分成5+1類。有9種尋址方式。指令集可以通過協(xié)處理器擴(kuò)展。
ARM指令的特點(diǎn)132ARM指令為load/store類型。也即指令集僅能處理寄存器中的數(shù)據(jù),而且處理結(jié)果都要放回寄存器中,而對系統(tǒng)存儲器的訪問則需要通過專門的加載/存儲指令來完成。
ARM指令的特點(diǎn)133ARM指令可以分為5類機(jī)器指令。5類機(jī)器指令:存儲器訪問(6個)數(shù)據(jù)處理(16個算術(shù)邏輯、6個乘法、1個前導(dǎo)零)跳轉(zhuǎn)(4個)協(xié)處理器指令(7個)雜項指令(4個)ARM偽指令
ARM指令的特點(diǎn)134
ARM指令的格式ARM指令基本的語法格式為:<Opcode>{<cond>}{s}<Rd>,<Rn>{,<Operand2>}Opcode:指令操作碼。cond:指令的條件碼。S:決定指令的操作是否影響cpsr的值。Rd:目標(biāo)寄存器編碼。Rn:包含第一個操作數(shù)的寄存器編碼。Operand2:第2操作數(shù)。<>內(nèi)是必需的{}內(nèi)是可選的135
ARM指令的格式LDR
R0,[R1] ;讀取R1地址上的存儲器單元內(nèi)容, ;執(zhí)行條件ALBEQDATAEVEN;跳轉(zhuǎn)指令,執(zhí)行條件EQ,即相等 ;跳轉(zhuǎn)到DATAEVEN
ADDS
R1,R1,#1
;加法指令,R1+1=R1影響CPSR ;寄存器,帶有S
SUBNES
R1,R1,#0xD;條件執(zhí)行減法運(yùn)算(NE), ;R1-0xD=>R1,影響 ;CPSR寄存器,帶有S136
ARM指令的格式ARM指令典型的編碼格式為:(數(shù)據(jù)處理指令類)CondOpcodeSRnRdOperand20111215161920212425272831782.4.1條件執(zhí)行條件碼的位數(shù)和位置:幾乎每條ARM指令都可以包含4位條件碼域<cond>,它占用指令編碼的最高四位[31:28]。條件碼的表示:條件編碼共24
=16種,其中,15種用于指令的條件碼。每種條件碼用2個英文縮寫字符表示。2.4.1條件執(zhí)行帶條件指令的執(zhí)行:ARM處理器根據(jù)指令的執(zhí)行條件是否滿足,決定當(dāng)前指令是否執(zhí)行。
只有在cpsr中的條件標(biāo)志位滿足指定的條件時,指令才會被執(zhí)行。不符合條件的代碼依然占用一個時鐘周期(相當(dāng)于一個NOP指令)。條件碼的書寫方法:條件碼的位置在指令助記符的后面(因此也稱為條件后綴)。
例如:
MOVEQR0,R12.4.1條件執(zhí)行操作碼[31:28]助記符后綴標(biāo)志含義0000EQZ=1相等0001NEZ=0不等0010CS/HSC=1大于或等于(無符號>=)0011CC/LOC=0小于(無符號<)0100MIN=1負(fù)0101PLN=0正或零0110VSV=1溢出0111VCV=0未溢出1000HIC=1且Z=0大于(無符號>)1001LSC=0或Z=1小于或等于(無符號<=)1010GEN和V相同帶符號>=1011LTN和V不同帶符號<1100GTZ=0且N和V相同帶符號>1101LEZ=1或N和V不同帶符號<=1110AL任何總是(通常省略)2.4.2指令分類說明
32位ARM指令集由13種基本指令類型組成,分成5類機(jī)器指令及ARM偽指令:3種類型的存儲器訪問指令:控制存儲器和寄存器之間的數(shù)據(jù)傳送。3種類型的數(shù)據(jù)處理指令:使用片內(nèi)ALU、桶形移位器和乘法器針對31個寄存器完成高速數(shù)據(jù)處理操作。4種類型的分支指令:控制程序執(zhí)行流程、指令優(yōu)先級以及ARM代碼和Thumb代碼的切換。3種類型的協(xié)處理器指令:專用于控制外部協(xié)處理器。這些指令以開放和統(tǒng)一的方式擴(kuò)展了指令集的片外功能。
雜項指令:軟中斷指令、程序狀態(tài)指令A(yù)RM偽指令
ARM存儲器訪問指令(1)LDR和STR——字和無符號字節(jié)字節(jié)加載是用“0”擴(kuò)展到32位。LDR和STR都有如下4種可能的形式:
零偏移:Rn的值作為傳送數(shù)據(jù)的地址。句法:
op{cond}{B}{T}Rd,[Rn]
前索引偏移:在數(shù)據(jù)傳送之前,將偏移量加到Rn中。其結(jié)果作為傳送數(shù)據(jù)的存儲器地址。若使用后綴“!”,則結(jié)果寫回到Rn中,且Rn不允許是R15。句法:
op{cond}{B}Rd,[Rn,Flexoffset]{!}
ARM存儲器訪問指令(1)LDR和STR——字和無符號字節(jié)
程序相對偏移:程序相對偏移是前索引形式的另一種版本。匯編器由PC計算偏移量,并將PC作為Rn生成前索引指令。不能使用后綴“!”。句法:op{cond}{B}Rd,label
后索引偏移:Rn的值用做傳送數(shù)據(jù)的存儲器地址。在數(shù)據(jù)傳送后,將偏移量加到Rn中。結(jié)果寫回到Rn。Rn不允許是R15。句法:op{cond}{B}{T}Rd,[Rn],Flexoffset
ARM存儲器訪問指令(1)LDR和STR——字和無符號字節(jié)[例子]LDR R8,[R0] LDRNER2,[R5,#960]!
STR R2,[R9,#consta-struc]STRBR0,[R3,-R8,ASR#2]STR R5,[R7],#-8LDR R0,localdata ;R8[R0];(有條件地)R2[R5+960],;R5R5+960;consta-struc是常量的表達(dá)式,該
常量值的范圍為0~4095;R0[R3-R8/4],存儲R0的最低有效字節(jié),R3和R8不變;R5[R7],R7R7-8;加載一個字,該字位于標(biāo)號lacaldata所在地址(2)LDR和STR——半字和帶符號字節(jié)
ARM存儲器訪問指令這些指令有4種可能的形式:零偏移、前索引偏移、程序相對偏移和后索引偏移。以同樣的順序,4種形式的句法為op{cond}typeRd,[Rn]op{cond}typeRd,[Rn,offset]{!}op{cond}typeRd,labelop{cond}typeRd,[Rn],offset其中:type
必須是以下所列的其中之一:SH
對帶符號半字(僅LDR);H
對無符號半字;SB
對帶符號字節(jié)(僅LDR)。label
程序相對偏移表達(dá)式。
label必須是在當(dāng)前指令的±255字節(jié)范圍內(nèi)。offset
加在Rn上的偏移量。
ARM存儲器訪問指令(2)LDR和STR——半字和帶符號字節(jié)[例子]LDREQSHR11,[R6]LDRHR1,[R0,#22]STRHR4,[R0,R1]!LDRSB R6,constf;(有條件地)R11[R6],加載16位半字,帶符號擴(kuò)展到32位;R1[R0+22],
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025服裝連鎖加盟合同樣本
- 2025海上運(yùn)輸合同模板書
- 二零二五年度車輛轉(zhuǎn)讓與道路救援服務(wù)合同3篇
- 二零二五年度股權(quán)投資公司股東合作協(xié)議3篇
- 二零二五年度文化產(chǎn)業(yè)發(fā)展全新期權(quán)合同3篇
- 2025年度養(yǎng)羊產(chǎn)業(yè)人才培養(yǎng)與交流合作協(xié)議3篇
- 二零二五年度生態(tài)保護(hù)公益合作合同3篇
- 2025年度虛擬現(xiàn)實合伙人股權(quán)分配與內(nèi)容開發(fā)合同3篇
- 二零二五年度生態(tài)農(nóng)業(yè)用地農(nóng)村房屋買賣合同協(xié)議書
- 2025年度農(nóng)村自建房包工與智能安防系統(tǒng)安裝合同
- 采購員年終工作總結(jié)課件
- 建筑工程資金計劃
- 機(jī)電一體化設(shè)備組裝與調(diào)試電子教案
- 預(yù)約診療工作自查自糾報告
- 行業(yè)會計比較ppt課件(完整版)
- 新修訂《數(shù)據(jù)安全法》全文ppt
- 各項常規(guī)檢查前后的注意事項課件
- 2021年推進(jìn)婦幼健康領(lǐng)域中醫(yī)藥工作總結(jié)
- 綠化苗木組織供應(yīng)及售后服務(wù)方案
- YY∕T 0314-2021 一次性使用人體靜脈血樣采集容器
- 第五章_油樣分析
評論
0/150
提交評論