流水線ARM7是三階流水線
Fetch是指從內(nèi)存中讀取指令
Decode是指對(duì)指令譯碼
Execute是指執(zhí)行指令,并將結(jié)果回寫至內(nèi)存
舉例為:MSR指令使能中斷,但只有當(dāng)?shù)谌齻€(gè)時(shí)鐘節(jié)拍完成時(shí),中斷才得到使能。
流水線能夠增加指令執(zhí)行的吞吐率,當(dāng)較長(zhǎng)的流水線也就意味著一條指令需要更多的時(shí)鐘節(jié)拍來完成。流水線還存在的問題是如果碰到跳轉(zhuǎn)語(yǔ)句,已讀入流水線的后續(xù)指令可能就沒有用了,為此ARM10采用了分支預(yù)測(cè)處理;另外,下一句指令若需要用到當(dāng)前指令的結(jié)果時(shí)可能也需要特殊處理。
當(dāng)發(fā)生中斷時(shí),處理器將完成當(dāng)前指令的Execute,其他已讀取流水線的指令將被放棄,但此時(shí)pc指向的是當(dāng)前指令的后兩句地址,中斷返回時(shí),應(yīng)執(zhí)行當(dāng)前語(yǔ)句的下一句,也就是pc-4。這部分在中斷時(shí)會(huì)重新介紹。
ARM9和ARM10的流水線
盡管ARM7,ARM9,ARM10的流水線不同,但它們有相同的流水線特性,ARM7的代碼也能在ARM9,ARM10上運(yùn)行。
----------------------------
Exceptions異常,Interrupts中斷 和 Vector Table向量表向量表通常存放在0x00000000內(nèi)存地址,也有可能存放在0xffff0000內(nèi)存地址。一個(gè)異常/中斷對(duì)應(yīng)著一個(gè)地址,在異常/中斷發(fā)生時(shí),處理器懸滯正常的指令執(zhí)行,并從向量表里對(duì)應(yīng)的地址加載指令,這條指令通常是一條跳轉(zhuǎn)指令,目標(biāo)是將程序計(jì)數(shù)器pc跳轉(zhuǎn)到一段子程序來服務(wù)異常/中斷。
可見向量表的作用就是將pc跳轉(zhuǎn)到相應(yīng)的地址上去執(zhí)行程序。每種異?;蛑袛嘤懈髯缘奶幚砥鞴ぷ髂J剑ㄉ弦黄?種特權(quán)模式),在工作模式的切換過程中,又會(huì)涉及到寄存器的操作,這部分在后續(xù)會(huì)詳細(xì)介紹。
----------------------------
緩存馮諾依曼結(jié)構(gòu)的緩存
哈佛結(jié)構(gòu)的緩存
TCM is fast SRAM located close to the core and guarantees the clock cycles required to fetch instructions or data。
內(nèi)存管理(略)MPU: memory protection unit
MMU: memory management unit
協(xié)處理器協(xié)處理器,通過讀寫協(xié)處理器寄存器來控制緩存、TCM、內(nèi)存管理等。
----------------------------
ARM命名及版本實(shí)際應(yīng)用中用到了ARM926EJ-S,它是第一代加入Jazelle技術(shù)的ARM內(nèi)核。