時鐘周期、機器周期、指令周期概念MicrosoftWord文檔_第1頁
時鐘周期、機器周期、指令周期概念MicrosoftWord文檔_第2頁
時鐘周期、機器周期、指令周期概念MicrosoftWord文檔_第3頁
時鐘周期、機器周期、指令周期概念MicrosoftWord文檔_第4頁
時鐘周期、機器周期、指令周期概念MicrosoftWord文檔_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、窗體頂端窗體底端時鐘周期、機器周期、指令周期概念  ARM 時鐘周期:      時鐘周期也稱為振蕩周期,定義為時鐘脈沖的倒數(shù)(可以這樣來理解,時鐘周期就是單片機外接晶振的倒數(shù),例如12M的晶振,它的時間周期就是1/12 us),是計算機中最基本的、最小的時間單位。        在一個時鐘周期內(nèi),CPU僅完成一個最基本的動作。對于某種單片機,若采用了1MHZ的時鐘頻率,則時鐘周期為1us;若采用4MHZ的時鐘頻率,則時鐘 周期為250us。由于時鐘脈沖是計算機的基

2、本工作脈沖,它控制著計算機的工作節(jié)奏(使計算機的每一步都統(tǒng)一到它的步調(diào)上來)。顯然,對同一種機型的計算 機,時鐘頻率越高,計算機的工作速度就越快。     8051單片機把一個時鐘周期定義為一個節(jié)拍(用P表示),二個節(jié)拍定義為一個狀態(tài)周期(用S表示)。    機器周期:(ARM沒有機器周期的概念)     在計算機中,為了便于管理,常把一條指令的執(zhí)行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所

3、需要的時間稱為機器周期。一般情況下,一個機器周期由若干個S周期(狀態(tài)周期)組成。     8051系列單片機的一個機器周期同6個 S周期(狀態(tài)周期)組成。前面已說過一個時鐘周期定義為一個節(jié)拍(用P表示),二個節(jié)拍定義為一個狀態(tài)周期(用S表示),8051單片機的機器周期由6個 狀態(tài)周期組成,也就是說一個機器周期=6個狀態(tài)周期=12個時鐘周期。      例如外接24M晶振的單片機,他的一個機器周期=12/24M 秒;    指令周期:   

4、0; 執(zhí)行一條指令所需要的時間,一般由若干個機器周期組成。指令不同,所需的機器周期也不同。        對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機器周期。對于一些比較復(fù)雜的指令,例如轉(zhuǎn)移指令、乘法指令,則需要兩個或者兩個以上的機器周期。    通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。    總線周期:     由于存貯器和I/O端口

5、是掛接在總線上的,CPU對存貯器和I/O接口的訪問,是通過總線實現(xiàn)的。通常把CPU通過總線對微處理器外部(存貯器或 I/O接口)進行一次訪問所需時間稱為一個總線周期。    總結(jié)一下,時鐘周期是最小單位,機器周期需要1個或多個時鐘周期,指令周期需要1個或多個機器周期;機器周期指的是完成一個基本操作的時間,這個基本操作有時可能包含總線讀寫,因而包含總線周期,但是有時可能與總線讀寫無關(guān),所以,并無明確的相互包含的關(guān)系。 指令周期:是CPU的關(guān)鍵指標(biāo),指取出并執(zhí)行一條指令的時間。一般以機器周期為單位,分單指令執(zhí)行周期、雙指令執(zhí)行周期等?,F(xiàn)在的處理器的

6、大部分指令(ARM、DSP)均采用單指令執(zhí)行周期。機器周期:完成一個基本操作的時間單元,如取指周期、取數(shù)周期。時鐘周期:CPU的晶振的工作頻率的倒數(shù)。 例子:22.1184MHZ的晶振,它的晶振周期、時鐘周期和機器周期分別是多少?        以51為例,晶振22.1184M,時鐘周期(晶振周期)就是(1/22.1184)s,一個機器周期包含12個時鐘周期,一個機器周期就是 0.5425s。一個機器周期一般是一條指令花費的時間,也有些是2個機器周期的指令,DJNZ,是雙周期指令. - 紅皮書1

7、18頁說cpu的操作頻率可達(dá)60MHZ,這個頻率是機器周期還是指令周期?ARM機器周期跟指令周期有什么對應(yīng)關(guān)系?由于ARM采用的是三級流水線的技術(shù),所有的指令執(zhí)行都由相同的三個階段取指,譯碼,執(zhí)行,那么所有的指令的執(zhí)行時間是不是都是相同的?    我的理解是:如果ARM不接pll(即ARM直接采用晶振的周期),ARM的機器周期就是晶振的振蕩周期,這兩個是等同的,所有的指令的執(zhí)行時間都是相同的,且都等于晶振周期;如果ARM連接并使能pll,則1/Fcclk就是機器周期,指令的執(zhí)行頻率等于Fcclk。請教高手指點更正,多謝!  zlgarm :&#

8、160;沒有機器周期的概念,只有主時鐘的概念,它是OLL的輸出。如果程序和數(shù)據(jù)均在片內(nèi)RAM中,這樣計算指令執(zhí)行時間1、一般指令需1個主時鐘時間2、每次跳轉(zhuǎn)增加3個主時鐘時間(也許是2個,需要確認(rèn))3、從RAM中取一個操作數(shù)多增加一個主時鐘時間,以次類推4、保存一個結(jié)果到RAM中多增加一個主時鐘時間,以次類推5、訪問片內(nèi)外設(shè),增加一個外設(shè)時鐘時間注意偽指令ldr rn,=x需要從ram中取一個操作數(shù)。 slump: 如果從FLASH中運行,啟動MAM后,當(dāng)指令不在MAM緩沖中,需用MAMTIM個周期進行MAM預(yù)取指。所以程序跳轉(zhuǎn)的開銷是相當(dāng)大的。 - &

9、#160;8051、ARM和DSP指令周期的測試與分析本文對三種最具代表性的微控制器(AT89S51單片機、7TDMI核的LPC2114型單片機和TMS320F2812)的指令周期進行了分析和。為了能觀察到指令周期,將三種控制器的GPIO口設(shè)置為數(shù)字輸出口,并采用循環(huán)不斷地置位和清零,通過觀察GPIO口的波形變化得到整個循環(huán)的周期。為了將整個循環(huán)的周期與具體的每一條指令的指令周期對應(yīng)起來,通過C語言源程序得到匯編語言指令來計算每一條匯編語言的指令周期。      1 AT89S51工作機制及指令周期的 AT89S51單片機的時鐘采用內(nèi)部方式,時鐘發(fā)生器對

10、振蕩脈沖進行2分頻。由于時鐘周期為振蕩周期的兩倍(時鐘周期振蕩周期P1+振蕩周期P2),而1個機器周期含有6個時鐘,因此1個機器周期包括12個晶振的振蕩周期。取石英晶振的振蕩頻率為11.059 2 MHz,則單片機的機器周期為12/11.059 2=1.085 1 s。51系列單片機的指令周期一般含14個機器周期,多數(shù)指令為單周期指令,有2周期和4周期指令。 為了觀察指令周期,對單片機的P1口的最低位進行循環(huán)置位操作和清除操作。源程序如下:     #include     main() while(1) P1=0x01; P1=0x

11、00;    采用KEIL uVISION2進行編譯、鏈接,生成可執(zhí)行文件。當(dāng)調(diào)用該集成環(huán)境中的Debug時,可以得到上述源程序混合模式的反匯編代碼: 2:main() 3: 4:while(1) 5: 6:P1=0x01; 0x000F759001MOVP1(0x90),#0x01 7:P1=0x00; 0x0012 E4CLRA 0x0013 F590MOVP1(0x90),A 8: 0x001580EDSJMPmain (C:0003) 其中斜體的代碼為C源程序,正體的代碼為斜體C源程序?qū)?yīng)的匯編語言代碼。每行匯編代碼的第1列為該代碼在器中的位置,第2列為機器碼,后面

12、是編譯、鏈接后的匯編語言代碼。所有指令共占用6個機器周期(其中“MOV P1(0x90),#0x01”占用2個機器周期,“CLR A”和“MOV P1(0x90),A”各占用1個機器周期,最后一個跳轉(zhuǎn)指令占用2個機器周期),則總的循環(huán)周期為6×機器周期6×1.085 1 s6.51 s。                         &

13、#160;                              圖1 P1口最低位的波形  將編譯、鏈接生成的可執(zhí)行文件到AT89S51的Flash中執(zhí)行可以得到P1口最低位的波形,如圖1所示。整個循環(huán)周期為6.1 s,與上面的分析完全一致。     

14、2 LPC2114工作機制及指令周期的測試 LPC2114是基于ARM7TDMI核的可加密的單片機,具有零等待128 KB的片內(nèi)Flash,16 KB的SRAM。時鐘頻率可達(dá)60 MHz(晶振的頻率為11.059 2 MHz,時鐘頻率設(shè)置為11.059 2×4 =44.236 8 MHz,片內(nèi)外設(shè)頻率為時鐘頻率的1/4,即晶振的頻率)。7TDMI核通過使用三級流水線和大量使用內(nèi)部寄存器來提高指令流的執(zhí)行速度,能提供0.9 MIPS/MHz的指令執(zhí)行速度,即指令周期為1/(0.9×44.236 8)=0.025 12 s,約為25 ns。 為了觀察指令周期,將LPC2114中

15、GPIO的P0.25腳設(shè)置為輸出口,并對其進行循環(huán)的置位操作和清除操作。C源程序如下: #include"config.h" /P0.25引腳輸出 #defineLEDCON0x02000000 intmain(void) /設(shè)置所有引腳連接GPIO PINSEL0 = 0x00000000; PINSEL1 = 0x00000000; /設(shè)置LED4控制口為輸出 IO0DIR = LEDCON; while(1) IO0SET = LEDCON; IO0CLR = LEDCON; return(0); 采用ADS1.2進行編譯、鏈接,生成可執(zhí)行文件。當(dāng)調(diào)用AXD Debu

16、gger時,可以得到上述源程序的反匯編代碼: main0xe59f1020ldrr1,0x40000248 400002240xe3a00000movr0,#0 400002280xe5810000strr0,r1,#0 4000022c0xe5810004strr0,r1,#4 400002300xe3a00780movr0,#0x2000000 400002340xe1c115c0bicr1,r1,r0,asr #11 400002380xe5810008strr0,r1,#8 4000023c0xe5810004strr0,r1,#4 400002400xe581000cstrr0,r1

17、,#0xc 400002440xeafffffcb0x4000023c 400002480xe002c000dcd0xe002c000 每行匯編代碼的第1列為該代碼在器中的位置,第2列為機器碼,后面是編譯、鏈接后的匯編語言代碼。循環(huán)部分的語句最關(guān)鍵的就是下面3句: 4000023c0xe5810004strr0,r1,#4 400002400xe581000cstrr0,r1,#0xc 400002440xeafffffcb0x4000023c 在AXD Debugger中,將其調(diào)用到RAM中運行程序得到循環(huán)部分GPIO的P0.25的輸出波形,如圖2所示。 從圖中可以看出,循環(huán)周期中保持為高電

18、平的時間為1350 ns左右,低電平的時間為450 ns左右,即指令“str r0,r1,#4”和指令“str r0,r1,#0xc”均需350 ns左右,而跳轉(zhuǎn)指令則需100 ns左右。這主要是由于以下原因造成的: ARM的大部分指令是單周期的,但是也有一些指令(如乘法指令)是多周期的; 基于核的微控制器只有加載、存儲和指令可以對存儲器的數(shù)據(jù)進行訪問,這樣從存儲器讀數(shù)據(jù)或向存儲器寫數(shù)據(jù)要增加1個時鐘周期; 訪問片內(nèi)外設(shè)要增加一個外設(shè)時鐘周期。當(dāng)然,每個指令還要有1個時鐘周期,跳轉(zhuǎn)時要清空流水線還要另加一定的時鐘周期。       &

19、#160;                                              圖2 GPIO的P0.25腳輸出波形  

20、;為了觀察乘法指令,特地采用下述匯編語言進行了實驗。 首先是沒有乘法指令的匯編源程序:          INCLUDELPC2294.INC ;引入頭文件          ; P0.25引腳控制LED4,低電平點亮          LEDCONEQU0x02000000       

21、   EXPORTMAIN          ;聲明程序代碼塊          AREALEDCONC,CODE,READONLY          ;裝載寄存器地址,PINSEL0          MAINLDRR0,=PINSEL0  

22、60;       ;設(shè)置數(shù)據(jù),即設(shè)置引腳連接GPIO          MOVR1,#0x00000000          STRR1,R0; R0 R1          LDRR0,=PINSEL1        

23、0; STRR1,R0          LDRR0,=IO0DIR          LDRR1,=LEDCON          ;設(shè)置LED控制口為輸出          STRR1,R0        

24、  ;設(shè)置GPIO控制參數(shù)          LOOPLDRR1,=LEDCON          LEDSETLDRR0,=IO0SET          ; LED控制I/O置位,即LED4熄滅          STRR1,R0    

25、;      LEDCLRLDRR0,=IO0CLR          ; LED控制I/O復(fù)位,即LED4點亮          STRR1,R0          ;無條件跳轉(zhuǎn)到LOOP          B LOOP 

26、60;采用ADS1.2進行編譯、鏈接后的匯編代碼為: LOOP 0xe3a01780movr1,#0x2000000 LEDSET0xe59f0028 ldrr0,0x40000128 400000fc0xe5801000strr1,r0,#0 LEDCLR0xe59f0024 ldrr0,0x4000012c 40000104 0xe5801000strr1,r0,#0 40000108 0xeafffff9 bLOOP  在AXD Debugger中,將其調(diào)用到RAM中運行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖3所示。 從圖中可以看出,循環(huán)周期中保持為高電平的時間

27、為450 ns左右,低電平的時間為550 ns左右。 資源來自"歲月聯(lián)盟"   本文來自"歲月聯(lián)盟"                                    

28、0;               圖3 GPIO的P0.25腳輸出波形2  在上例的LOOP循環(huán)部分中加入乘法指令,即將循環(huán)部分改為:          LOOP LDRR1,=LEDCON          LEDSETLDRR0,=IO0SET    &#

29、160;     STRR1,R0          MOVR2,#0x0234          MULR2,R1,R2          LEDCLRLDRR0,=IO0CLR          STRR1,R0   

30、;       B LOOP  采用ADS1.2進行編譯、鏈接后的匯編代碼為: LOOP0xe3a01780movr1,#0x2000000 LEDSET0xe59f0030ldrr0,0x40000130 400000fc0xe5801000strr1,r0,#0 400001000xe3a02f8dmovr2,#0x234 400001040xe0020291 mulr2,r1,r2 LEDCLR0xe59f0024 ldrr0,0x40000134 4000010c0xe5801000strr1,r0,#0 40000

31、1100xeafffff7bLOOP  在AXD Debugger中,將其調(diào)用到RAM中運行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖4所示。 從圖中可以看出,循環(huán)周期中保持為高電平的時間為550 ns左右,低電平的時間為550 ns左右。與上例比較可知,多出的MUL乘法指令和MOV傳送指令共占用100 ns。 綜上所述,得出如下結(jié)論: 當(dāng)指令放在RAM中運行時,指令“str r0,r1,#4”和指令“strr0,r1,#0xc”均需350 ns左右,相當(dāng)于14個指令周期;指令“l(fā)dr r0,0x4000012c”的執(zhí)行時間為100 ns,相當(dāng)于4個指令周期;MUL乘法指

32、令和MOV傳送指令共占用100ns,相當(dāng)于4個指令周期;跳轉(zhuǎn)指令共占用100 ns,相當(dāng)于4個指令周期。       3 TMS320F2812工作機制及指令周期測試 TMS320F2812是TI公司的一款用于控制的高性能和高性價比的32位定點DSP芯片。該芯片最高可在150 MHz主頻下工作(本文將其設(shè)置到100 MHz),并帶有18K×16位等待周期片上SRAM和128K×16位片上Flash(存取時間為36 ns)。TMS320F2812采用哈佛總線結(jié)構(gòu),即在同一個時鐘周期內(nèi)可同時進行一次取指令、讀數(shù)據(jù)和寫數(shù)據(jù)的操作,

33、同時TMS320F2812還通過采用8級流水線來提高系統(tǒng)指令的執(zhí)行速度。 為了觀察指令周期,對TMS320F2812的GPIOA0進行循環(huán)的置位操作和清除操作。C源程序如下: #include "DSP28_Device.h" void main(void) InitSysCtrl();/*初始化系統(tǒng)*/ DINT;/*關(guān)中斷*/ IER = 0x0000; IFR = 0x0000; InitPieCtrl();/*初始化PIE控制寄存器*/ InitPieVectTable();/*初始化PIE矢量表*/ InitGpio();/*初始化EV*/ EINT; ERTM;

34、 for(;) GpioDataRegs.GPADAT.all=0xFFFF; GpioDataRegs.GPADAT.all=0xFFFF; GpioDataRegs.GPADAT.all=0xFFFF; GpioDataRegs.GPADAT.all=0x0000; GpioDataRegs.GPADAT.all=0x0000; GpioDataRegs.GPADAT.all=0x0000;                 

35、0;                                   圖4 GPIO的P0.25腳輸出波形3  其中最重要的是要對通用輸入/輸出進行初始化和確定系統(tǒng)CPU時鐘。其中系統(tǒng)的時鐘通過PLL設(shè)定為100 MHz,而初始化 InitGpi

36、o() 的源程序為: #include "DSP28_Device.h" void InitGpio(void) EALLOW; /多路復(fù)用器選為數(shù)字I/O GpioMuxRegs.GPAMUX.all=0x0000; /GPIOAO為輸出,其余為輸入 GpioMuxRegs.GPADIR.all=0x0001; GpioMuxRegs.GPAQUAL.all=0x0000; EDIS;  通過在主程序for(;)的地方加斷點,可以很容易找到上面主程序中循環(huán)部分程序編譯后的匯編指令: 3F8011 L1: 3F8011761FMOVWDP,#0x01C3 3F80

37、13 2820 MOV32,#0xFFFF 3F8015 2820 MOV32,#0xFFFF 3F8017 2820 MOV32,#0xFFFF 3F8019 2820 MOV32,#0xFFFF 3F801B 2820 MOV32,#0xFFFF 3F801D 2820 MOV32,#0xFFFF 3F801F 2B20 MOV32,#0 3F8020 2B20 MOV32,#0 3F8021 2B20 MOV32,#0 3F8022 6FEF SBL1,UNC  其中第1列為程序在RAM中的位置,第2列為機器碼,后面就是匯編語言程序。指令“MOV 32,#0xFFFF”使GPI

38、O輸出高電平,指令“MOV 32,#0”使GPIO輸出低電平。其中含有6個使GPIOA0輸出高電平的指令和3個使GPIOA0輸出低電平的指令,系統(tǒng)的指令周期為10 ns,因此循環(huán)周期中保持高電平的時間為60 ns。通過將該程序放在H0 SARAM中進行調(diào)試,可得GPIOA0的波形,如圖5所示。其中高電平時間正好為60 ns。注意,由于3個低電平之后要進行跳轉(zhuǎn),故清空流水線的周期要長一些。                      圖5 TMS320F2812中GPIOA0的波形1  為了觀察乘法指令的周期,將上述循環(huán)部分的C源程序修改為: for(

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論