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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

11、00;    采用KEIL uVISION2進(jìn)行編譯、鏈接,生成可執(zhí)行文件。當(dāng)調(diào)用該集成環(huán)境中的Debug時(shí),可以得到上述源程序混合模式的反匯編代碼: 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列為機(jī)器碼,后面

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

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

14、2 LPC2114工作機(jī)制及指令周期的測試 LPC2114是基于ARM7TDMI核的可加密的單片機(jī),具有零等待128 KB的片內(nèi)Flash,16 KB的SRAM。時(shí)鐘頻率可達(dá)60 MHz(晶振的頻率為11.059 2 MHz,時(shí)鐘頻率設(shè)置為11.059 2×4 =44.236 8 MHz,片內(nèi)外設(shè)頻率為時(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è)置為輸出口,并對其進(jìn)行循環(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進(jìn)行編譯、鏈接,生成可執(zhí)行文件。當(dāng)調(diào)用AXD Debu

16、gger時(shí),可以得到上述源程序的反匯編代碼: 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列為機(jī)器碼,后面是編譯、鏈接后的匯編語言代碼。循環(huán)部分的語句最關(guān)鍵的就是下面3句: 4000023c0xe5810004strr0,r1,#4 400002400xe581000cstrr0,r1,#0xc 400002440xeafffffcb0x4000023c 在AXD Debugger中,將其調(diào)用到RAM中運(yùn)行程序得到循環(huán)部分GPIO的P0.25的輸出波形,如圖2所示。 從圖中可以看出,循環(huán)周期中保持為高電

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

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

20、;為了觀察乘法指令,特地采用下述匯編語言進(jìn)行了實(shí)驗(yàn)。 首先是沒有乘法指令的匯編源程序:          INCLUDELPC2294.INC ;引入頭文件          ; P0.25引腳控制LED4,低電平點(diǎn)亮          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點(diǎn)亮          STRR1,R0          ;無條件跳轉(zhuǎn)到LOOP          B LOOP 

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

27、為450 ns左右,低電平的時(shí)間為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進(jìn)行編譯、鏈接后的匯編代碼為: 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中運(yùn)行程序得到循環(huán)部分的GPIO的P0.25腳輸出波形,如圖4所示。 從圖中可以看出,循環(huán)周期中保持為高電平的時(shí)間為550 ns左右,低電平的時(shí)間為550 ns左右。與上例比較可知,多出的MUL乘法指令和MOV傳送指令共占用100 ns。 綜上所述,得出如下結(jié)論: 當(dāng)指令放在RAM中運(yùn)行時(shí),指令“str r0,r1,#4”和指令“strr0,r1,#0xc”均需350 ns左右,相當(dāng)于14個(gè)指令周期;指令“l(fā)dr r0,0x4000012c”的執(zhí)行時(shí)間為100 ns,相當(dāng)于4個(gè)指令周期;MUL乘法指

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

33、同時(shí)TMS320F2812還通過采用8級流水線來提高系統(tǒng)指令的執(zhí)行速度。 為了觀察指令周期,對TMS320F2812的GPIOA0進(jìn)行循環(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  其中最重要的是要對通用輸入/輸出進(jìn)行初始化和確定系統(tǒng)CPU時(shí)鐘。其中系統(tǒng)的時(shí)鐘通過PLL設(shè)定為100 MHz,而初始化 InitGpi

36、o() 的源程序?yàn)椋?#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(;)的地方加斷點(diǎn),可以很容易找到上面主程序中循環(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列為機(jī)器碼,后面就是匯編語言程序。指令“MOV 32,#0xFFFF”使GPI

38、O輸出高電平,指令“MOV 32,#0”使GPIO輸出低電平。其中含有6個(gè)使GPIOA0輸出高電平的指令和3個(gè)使GPIOA0輸出低電平的指令,系統(tǒng)的指令周期為10 ns,因此循環(huán)周期中保持高電平的時(shí)間為60 ns。通過將該程序放在H0 SARAM中進(jìn)行調(diào)試,可得GPIOA0的波形,如圖5所示。其中高電平時(shí)間正好為60 ns。注意,由于3個(gè)低電平之后要進(jìn)行跳轉(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論