第三章CPU相關(guān)知識_第1頁
第三章CPU相關(guān)知識_第2頁
第三章CPU相關(guān)知識_第3頁
第三章CPU相關(guān)知識_第4頁
第三章CPU相關(guān)知識_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

嵌入式系統(tǒng)概論第三章CPU輸入/輸出機(jī)制管態(tài),異常,陷阱存儲管理和地址轉(zhuǎn)換高速緩存CPU的性能和功耗1嵌入式系統(tǒng)概論3.1I/O編程I/O設(shè)備模擬元件或非電子元件數(shù)字邏輯——與CPU相關(guān)I/O設(shè)備與CPU的接口——一組寄存器CPUstatusregdataregmechanism2I/OI/O設(shè)備的寄存器數(shù)據(jù)寄存器:I/O與CPU交互的數(shù)據(jù)I/O設(shè)備讀寫的數(shù)據(jù)狀態(tài)寄存器:提供設(shè)備運(yùn)行的狀態(tài)、信息只讀方式,由設(shè)備完成對這些寄存器的操作,CPU只能讀取它可讀、可寫方式,不僅設(shè)備可對這些寄存器操作,CPU也可以進(jìn)行讀、寫操作3嵌入式系統(tǒng)概論I/O設(shè)備的分類計算機(jī)所管理的I/O設(shè)備按輸入輸出對象的不同可以分為以下3類:用戶可讀寫設(shè)備,用于用戶與計算機(jī)通信。如:顯示器、鍵盤、鼠標(biāo)、打印機(jī)等機(jī)器可讀寫設(shè)備,用于電子裝置與計算機(jī)通信。如:硬盤、U盤、控制器通信設(shè)備,用于與遠(yuǎn)程設(shè)備通信。如:Modem、ISDN終端4嵌入式系統(tǒng)概論嵌入式系統(tǒng)概論應(yīng)用:8251UART

(Universalasynchronousreceiver/transmitter)串行通訊的基本設(shè)備UART功能被集成到ARM9有3組發(fā)送接收接口,通過通用的I/O接口復(fù)用獲得的允許發(fā)送接收參數(shù)編程5嵌入式系統(tǒng)概論8251UART與CPU接口CPU串口68251串行數(shù)據(jù)通信系統(tǒng)模型

DTE-DataTerminalEquipment,常常是計算機(jī).

DCE-DataCommunicationEquipment,常常是MODEM,也可以是計算機(jī).串行接口

–主要是8251A、16550、8250等,連接DTE和DCE。7嵌入式系統(tǒng)概論串行通訊數(shù)據(jù)以字符流的形式timebit0bit1bitn-1nocharstartstop...8嵌入式系統(tǒng)概論串行通訊的參數(shù)波特率(Baud(bit)rate)每個字符的位數(shù)是否有奇偶校驗(Parity/noparity)奇、偶校驗(Even/oddparity)結(jié)束位的長度

(1,1.5,2位).9嵌入式系統(tǒng)概論I/O編程兩種方法支持I/O編程特殊的I/O指令I(lǐng)ntelx86提供

in,out

指令內(nèi)存映射I/O大多數(shù)CPUs應(yīng)用內(nèi)存映射I/O支持I/O指令的CPU并不排除內(nèi)存映射I/O10內(nèi)存映射I/O為每一個I/O設(shè)備的寄存器提供地址程序使用普通的CPU讀寫指令來與設(shè)備通訊Definelocationfordevice:DEV1EQU0x1000Read/writecode:LDRr1,#DEV1LDRr0,[r1]LDRr0,#8STRr0,[r1]11嵌入式系統(tǒng)概論內(nèi)存映射I/O——高級語言

Peek和poke讀操作intpeek(char*location){ return*location;}寫操作 voidpoke(char*location,charnewval){ (*location)=newval;}12I/O操作的方式13嵌入式系統(tǒng)概論忙等I/O方式輪詢(polling):通過CPU讀I/O設(shè)備狀態(tài)寄存器來詢問設(shè)備是否空閑14嵌入式系統(tǒng)概論忙等I/O方式-輸出設(shè)備編程將一個字符串寫到輸出設(shè)備#defineOUT_CHAR0x1000#defineOUT_STATUS0x1001Char*mystring=“Hello,world.”;Char*current_char;current_char=mystring;while(*current_char!=‘\0’){ poke(OUT_CHAR,*current_char);poke(OUT_STATUS,1); while(peek(OUT_STATUS)!=0); current_char++;}15嵌入式系統(tǒng)概論忙等I/O方式-輸入/輸出同步方式編程#definein_CHAR0x1000#definein_STATUS0x1001#defineOUT_CHAR0x1100#defineOUT_STATUS0x110116嵌入式系統(tǒng)概論忙等I/O方式-輸入/輸出同步方式編程(續(xù))while(TRUE){ /*read*/ while(peek(IN_STATUS)==0); achar=(char)peek(IN_DATA); /*write*/ poke(OUT_DATA,achar); poke(OUT_STATUS,1); while(peek(OUT_STATUS)!=0); }17I/O中斷忙等I/O效率非常低I/O設(shè)備的速度遠(yuǎn)遠(yuǎn)小于CPU的速度除了測試,CPU不能做其它任何事情CPU的很多操作是可以與I/O事件并行執(zhí)行中斷機(jī)制:可以改變CPU的控制流順序強(qiáng)制CPU執(zhí)行一段特定代碼——中斷處理子例程18嵌入式系統(tǒng)概論I/O中斷由I/O設(shè)備邏輯決定什么時候中斷CPU響應(yīng)中斷——可能無法立即響應(yīng)將程序計數(shù)器指向設(shè)備處理子例程前臺程序:無中斷情況下CPU運(yùn)行的程序19嵌入式系統(tǒng)概論中斷機(jī)制CPUstatusregdataregmechanismPCintrrequestintrackdata/addressLR20嵌入式系統(tǒng)概論中斷的物理連接CPU和設(shè)備通過CPU總線連接CPU和設(shè)備

通過握手協(xié)議進(jìn)行通訊設(shè)備發(fā)出中斷請求CPU準(zhǔn)備處理I/O設(shè)備請求時,CPU發(fā)出中斷響應(yīng)21嵌入式系統(tǒng)概論中斷行為基于調(diào)用中斷子例程的形式(保護(hù)現(xiàn)場)中斷強(qiáng)制下一條指令調(diào)用中斷服務(wù)子例程執(zhí)行中斷子例程(恢復(fù)現(xiàn)場)返回前臺程序22正在運(yùn)行的程序中斷點(diǎn)中斷處理程序中斷處理開始中斷處理結(jié)束嵌入式系統(tǒng)概論例:應(yīng)用基本中斷將字符從輸入設(shè)備復(fù)制到輸出設(shè)備23CPUstatusregdataregoutputdevicestatusregdatareginputdevice嵌入式系統(tǒng)概論例:應(yīng)用基本中斷將字符從輸入設(shè)備復(fù)制到輸出設(shè)備中斷子例程voidinput_handler()/*輸入中斷子例程*/{ achar=peek(IN_DATA); gotchar=TRUE;}voidoutput_handler()/*輸出中斷子例程*/{}24嵌入式系統(tǒng)概論例:應(yīng)用基本中斷將字符從輸入設(shè)備復(fù)制到輸出設(shè)備(續(xù))main(){ while(TRUE){ if(gotchar){ poke(OUT_DATA,achar); poke(OUT_STATUS,1); gotchar=FALSE; } } }25例:具有緩沖區(qū)的中斷I/O字符隊列headtailheadtaila26#defineBUF_SIZE8chario_buf[BUF_SIZE];intbuf_head=0,buf_tail=0;interror=0;voidempty_buffer();voidfull_buffer();intnchars();voidadd_char(charachar);charremove_char();27基于緩沖區(qū)的輸入中斷子例程voidinput_handler(){ charachar; if(full_buffer())error=1; else{achar=peek(IN_DATA);add_char(achar);} poke(IN_STATUS,0); if(nchars()==1) {poke(OUT_DATA,remove_char());poke(OUT_STATUS,1);} }28基于緩沖區(qū)的輸出中斷子例程voidoutput_handler(){ if(!empty_buffer()){ poke(OUT_DATA,remove_char()); poke(OUT_STATUS,1); } }29調(diào)試中斷代碼若忘記改變寄存器的內(nèi)容前臺程序會展示一些非常奇怪的錯誤錯誤很難重現(xiàn)---它依賴與中斷的時間30如何發(fā)現(xiàn)中斷在開始執(zhí)行每條指令之前檢查中斷請求信號是否有中斷請求一旦出現(xiàn)中斷,PC將指向中斷服務(wù)子例程注意:要保護(hù)和恢復(fù)現(xiàn)場31中斷優(yōu)先級和中斷向量兩種機(jī)制允許中斷處理更多的設(shè)備優(yōu)先級(Priorities):確定哪種中斷首先獲得CPU向量(Vectors):

允許中斷設(shè)備制定其中斷服務(wù)子例程大多數(shù)CPU這兩種方式都支持32具有優(yōu)先級的中斷

---序號小的優(yōu)先級高CPUdevice1device2devicenL1L2..Lninterruptacknowledge33使用輪詢讓幾個設(shè)備共享一個中斷34中斷的優(yōu)先級Masking(屏蔽):發(fā)生中斷的優(yōu)先級比正在中斷的優(yōu)先級低,CPU將不響應(yīng)該優(yōu)先級低的中斷。Nonmaskableinterrupt(NMI,不可屏蔽中斷):最高優(yōu)先級,永不屏蔽電源故障35中斷向量不同的設(shè)備有不同的中斷服務(wù)子例程中斷向量表handler0handler1handler2handler3Interruptvectortablehead36一般的中斷機(jī)制intr?NY假設(shè)優(yōu)先級的選擇已經(jīng)處理.NignoreYvector?YYNtimeout?Ybuserrorcalltable[vector]intrpriority>currentpriority?continueexecutionN37ack中斷開銷中斷服務(wù)子例程執(zhí)行的時間中斷機(jī)制的開銷寄存器存儲/恢復(fù)流水相關(guān)補(bǔ)償Cache相關(guān)補(bǔ)償38ARM中斷ARM支持兩類中斷快速中斷請求(FIQs).中斷請求(IRQs).中斷表開始地址:0.39ARM最壞延遲27個時鐘周期2周期同步外部請求最多20周期完成當(dāng)前指令3周期的數(shù)據(jù)異常終止2周期進(jìn)入中斷處理狀態(tài)40管態(tài)通過SWI指令進(jìn)入SWICODE_1在中斷向量表中的地址:0x08.進(jìn)入管理模式將CPSR存儲到SPSR.41異常(Exception)內(nèi)部檢測到的錯誤與指令是同步的,但它是不可預(yù)料的通常是內(nèi)部產(chǎn)生的有多種異常,處理的方法與中斷類似,有優(yōu)先級和向量表42Trap(陷阱)又叫軟中斷(softwareinterrupt):由指令產(chǎn)生的異常,然后進(jìn)入管態(tài)ARM通過SWI指令進(jìn)入軟件中斷43協(xié)處理器(Co-processor)增加一些功能單元,可以通過指令來調(diào)用浮點(diǎn)單元通過協(xié)處理器完成的ARM允許有16個協(xié)處理器浮點(diǎn)數(shù)處理是用協(xié)處理器編號為1和2的44Caches和CPUsCPUcachecontrollercachemainmemorydatadataaddressdataaddress45Cache操作主存被映射到cache中.Caches類型:指令caches;數(shù)據(jù)caches;指令caches+數(shù)據(jù)caches.主存的讀取時間就是不確定的.46TermsCachehit:(高速緩存命中)位置就在cache中.Cachemiss:(高速緩存未命中)位置不在cache中.Workingset:(工作集)在一段時間內(nèi)CPU訪問的一小段存儲單元,這個活動單元的集合就叫工作集.47未命中的類型Compulsory(cold):(強(qiáng)制性未命中)存貯單元第一次被訪問.Capacity:(容量未命中)工作集過大.Conflict:(沖突未命中)多個地址映射到同一個cache單元上.48主存的性能h=cache命中率.tcache=cache訪問時間,tmain=內(nèi)存的訪問時間.平均內(nèi)存訪問時間:tav=htcache+(1-h)tmain49多級cacheCPUL1cacheL2cache50mainmemory多級cache訪問時間h1=L1cache命中率.h2=L1未命中,L2命中率.tL1

和tL2–cache1和cache2訪問時間平均內(nèi)存訪問時間:tav=h1tL1+(h2-h1)tL2+(1-h2-h1)tmain51替換策略(placementpolicy)Replacementpolicy:選擇哪個cache單元的內(nèi)容被淘汰,騰出空間存儲新內(nèi)存的內(nèi)容兩種策略:隨機(jī)替換.最近最少使用(Least-recentlyused(LRU)).Cache的組織全相聯(lián)(Fully-associative):任何位置的內(nèi)存都可以存儲到cache的任何位置(幾乎重沒有實(shí)現(xiàn)).直接映射(Direct-mapped):每個存儲單元被精確的映射到cache的某個單元上.n-路組相聯(lián)(N-wayset-associative):每一個存儲單元被映射到n組中的某個單元上.Cache的優(yōu)點(diǎn)經(jīng)常訪問的內(nèi)容保留在高速緩存中.Cache能夠一次能夠?qū)攵鄠€字,它是以塊為單位進(jìn)行導(dǎo)入、導(dǎo)出。第一次訪問后,順序訪問的速度快.直接映射cache有效標(biāo)記=標(biāo)記索引偏移hitvalue標(biāo)記數(shù)據(jù)10xabcdbytebytebyte...bytecache塊地址cache寫操作通寫(Write-through):每次寫操作都同時改變高速緩存和相應(yīng)的主存單元.回寫(Write-back):只有當(dāng)cache中的內(nèi)容要被移出時,才將數(shù)據(jù)寫到主存中.直接映射cache許多地址映射到相同的cache塊中.沖突很容易產(chǎn)生:考慮一個具有1024個塊的直接映射數(shù)組a[]使用的地址0,1,2,…數(shù)組b[]使用的地址1024,1025,1026,…操作a[i]+b[i]產(chǎn)生沖突.組相聯(lián)cache直接映射caches的集合:Set1Set2Setn...hitdata例:直接映射vs.組相聯(lián)cache直接映射cacheAfter001access:block tag data00 - -01 0 111110 - -11 - -After010access:block tag data00 - -01 0 111110 0 000011 - -cache:4個塊,每個塊存儲一個數(shù)據(jù),地址與cache的對應(yīng):

地址

標(biāo)記塊直接映射cache(續(xù))After011access:block tag data00 - -01 0 111110 0 000011 0 0110After100access:block tag data00 1 100001 0 111110 0 000011 0 0110直接映射cache(續(xù))After101access:block tag data00 1 100001

1

000110 0 000011 0 0110After111access:block tag data00 1 100001 1 000110 0 000011

1

01002-路組相聯(lián)cacheCache的最后狀態(tài)(2個大小的直接映射的cache):set blk0tag blk0data blk1tag blk1data00 1 1000 - -010 1111 1 000110 0 0000 - -11 0 0110 1 01002-路組相聯(lián)cache地址

標(biāo)記塊Cache的最后狀態(tài)(與直接映射的cache大小一樣):set blk0tag blk0data blk1tag blk1data0 01 0000 10 10001 10 0001 11 0100例:cachesStrongARM:16KB,32-路,32-字節(jié)塊指令cache.16KB,32-路,32-字節(jié)塊數(shù)據(jù)cache.策略:回寫

CPU的性能周期時間(Cycletime).CPU的流水線(CPUpipeline).高速緩存(cache).流水線幾條指令在不同的部件上同時執(zhí)行由于各種條件導(dǎo)致流水線阻滯:分支;內(nèi)存延遲;etc.流水線結(jié)構(gòu)ARM73-級流水:取指(fetch):

從內(nèi)存取出指令;譯碼(decode):

指令的操作碼和操作數(shù)被譯碼從而決定執(zhí)行什么功能;Execute:執(zhí)行已譯碼的指令.ARM流水線的執(zhí)行addr0,r1,#5subr2,r3,r6cmpr2,#3fetchtimedecodefetchexecutedecodefetchexecutedecodeexecute123性能的測量Latency:(延時)一條指令流出流水線所花費(fèi)的時間。Throughput:(吞吐量)單位時間內(nèi)執(zhí)行指令的數(shù)目建立時間:流水線開始工作,須經(jīng)過一定時間才能達(dá)到最大吞吐率,這就是建立時間。流水線增加其吞吐量,但并沒有減少其延時阻滯(Pipelinestalls)若某一步?jīng)]有按照相同的時間完成,流水線就阻滯阻滯增加了延時,減少了吞吐量ARM多周期的load指令fetchdecodeexldr2ldmiar0,{r2,r3}subr2,r3,r6cmpr2,#3exldr3fetchtimedecodeexsubfetchdecodeexcmp控制阻滯分支通常引入阻滯(分支補(bǔ)償)直到條件計算完后才知道執(zhí)行那條指令A(yù)RMpipelinedbranchtimefetchdecodeexbnebnefoosubr2,r3,r6fetchdecodefooaddr0,r1,r2exbnefetchdecodeexaddexbne例:ARM執(zhí)行時間確定FIR濾波器的執(zhí)行時間:for(i=0;i<N;i++) f=f+c[i]*x[i];循環(huán)測試的分支可能花費(fèi)多于一個周期.BLTloop

最好情況下花費(fèi)1個時鐘周期,最糟情況下花費(fèi)3個時鐘周期。內(nèi)存性能分析Caches的引入使得執(zhí)行時間非確定了依賴于執(zhí)行的順序Cache未命中補(bǔ)償(Cachemisspenalty):由于cache未命中而需要花費(fèi)的額外時間未命中的原因:強(qiáng)制性未命中,容量未命中,沖突未命中CPU功耗在某些情況下,CPU的功耗與其運(yùn)行時間同等重要功率和能量:(Powervs.energy)功耗是能量消耗和功率消耗的簡稱熱量的產(chǎn)生取決于功率;電池的壽命取決于能量的消耗.CMOS的功耗CMOS幾乎所有的數(shù)字系統(tǒng)都有的Voltagedrops:功耗V2與成正比.切換:(Toggling)切換越多,功耗越多.泄漏:(Leakage)消除漏電的唯一方法切斷電源.CPU節(jié)能的方法CPU在低電壓下使用.在低時鐘頻率下使用內(nèi)部禁止當(dāng)前執(zhí)行功能不需要的功能單

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論