時(shí)鐘周期簡介
時(shí)鐘周期也稱為振蕩周期,定義為時(shí)鐘頻率的倒數(shù)。時(shí)鐘周期是計(jì)算機(jī)中最基本的、最小的時(shí)間單位。在一個(gè)時(shí)鐘周期內(nèi),CPU僅完成一個(gè)最基本的動(dòng)作。時(shí)鐘周期是一個(gè)時(shí)間的量。時(shí)鐘周期表示了SDRAM所能運(yùn)行的最高頻率。更小的時(shí)鐘周期就意味著更高的工作頻率。
時(shí)鐘周期是同步電路中時(shí)鐘基礎(chǔ)頻率的倒數(shù)。它以時(shí)間動(dòng)作重復(fù)的最小周期來度量,度量單位采用時(shí)間單位。在單個(gè)時(shí)鐘周期內(nèi)(現(xiàn)代非嵌入式微處理器的這個(gè)時(shí)間一般都短于1納秒),邏輯零狀態(tài)與邏輯一狀態(tài)來回切換。由于發(fā)熱和電氣規(guī)格的限制,周期里邏輯零狀態(tài)的持續(xù)時(shí)間歷來要長于邏輯一狀態(tài)。
CPU時(shí)鐘周期概述
在微程序控制器中,時(shí)序信號(hào)比較簡單,一般采用節(jié)拍電位——節(jié)拍脈沖二級(jí)體制。就是說它只要一個(gè)節(jié)拍電位,在節(jié)拍電位又包含若干個(gè)節(jié)拍脈沖(時(shí)鐘周期)。節(jié)拍電位表示一個(gè)CPU周期的時(shí)間,而節(jié)拍脈沖把一個(gè)CPU周期劃分為幾個(gè)叫較小的時(shí)間間隔。根據(jù)需要這些時(shí)間間隔可以相等,也可以不等。
指令周期是取出并執(zhí)行一條指令的時(shí)間。
指令周期常常有若干個(gè)CPU周期,CPU周期也稱為機(jī)器周期,由于CPU訪問一次內(nèi)存所花費(fèi)的時(shí)間較長,因此通常用內(nèi)存中讀取一個(gè)指令字的最短時(shí)間來規(guī)定CPU周期。這就是說,一條指令取出階段(通常為取指)需要一個(gè)CPU周期時(shí)間。而一個(gè)CPU周期時(shí)間又包含若干個(gè)時(shí)鐘周期(通常為節(jié)拍脈沖或T周期,它是處理操作的最基本的單位)。這些時(shí)鐘周期的總和則規(guī)定了一個(gè)CPU周期的時(shí)間寬度。
處理器一條指令需要幾個(gè)時(shí)鐘周期
對(duì)于軟件工程師來說,印象流我們可能會(huì)覺得執(zhí)行一條指令一個(gè)時(shí)鐘周期嘛,一條指令算是一個(gè)最小的原子操作,不可能再細(xì)分了吧。
如果看看諸如《see mips run》,《arm體系架構(gòu)》等書籍就會(huì)了解到,這個(gè)問題可沒這么簡單了,因?yàn)樘幚砥髟O(shè)計(jì)中使用了流水線技術(shù)。
一條指令還是相當(dāng)復(fù)雜的,處理器在一個(gè)時(shí)鐘周期內(nèi)肯定是完不成的,可能需要好多個(gè)時(shí)鐘周期來完成執(zhí)行。如果這樣讓處理器執(zhí)行完一條指令,再去執(zhí)行另一條,處理器的效率是很低的,假如一條指令是5個(gè)時(shí)鐘周期完成,對(duì)于500MHZ的處理器串行運(yùn)行指令,1秒內(nèi)取指100000000次。
因此處理器引入了流水線技術(shù),將一條指令劃分為多個(gè)功能,由不同的功能部件來執(zhí)行,并且這些功能部件可以并行工作。下面是一個(gè)arm7的三級(jí)流水線運(yùn)行圖。
流水線劃分為取指 譯碼 執(zhí)行,但并不是僅需3個(gè)時(shí)鐘周期即執(zhí)行完指令。因?yàn)閳?zhí)行單元模塊的操作較多,可能需要多個(gè)周期,取指 譯碼一般是一個(gè)時(shí)鐘周期,這樣可以看出雖然一條指令完成需要多個(gè)時(shí)鐘周期,但是總體來說看在每個(gè)時(shí)鐘周期都有一條指令開始取指。如果我們的處理器是500MHZ,則1秒內(nèi)取指了500000000次。
不同的處理器設(shè)計(jì)時(shí)流水線級(jí)數(shù)不一樣,現(xiàn)在主流的有三級(jí) 五級(jí) 七級(jí),增加流水線級(jí)數(shù),簡化流水線的各級(jí)邏輯,可以提高處理器的性能。
回答咱們開頭的問題也就明白了,一條指令需要的時(shí)鐘周期還真不固定,這得看處理器的流水線級(jí)數(shù),也得看該指令的復(fù)雜度,在執(zhí)行階段需要幾個(gè)時(shí)鐘周期。
對(duì)于流水線各級(jí)具體工作這里就不細(xì)說了,網(wǎng)上文章很多,畢竟咱們是做軟件的,硬件點(diǎn)到為止,流水線各級(jí)工作是有處理器內(nèi)部邏輯單元來完成的,對(duì)于軟件來說都是不可見的,軟件可操作的最小原子操作就是指令。
不過呢,處理器的流水線技術(shù)在有一個(gè)事情對(duì)咱們軟件造成了影響,那就是PC值。
據(jù)我了解的處理器流水線設(shè)計(jì),前三級(jí)基本都是取指 譯碼 執(zhí)行。處理器的PC寄存器中存儲(chǔ)的是處理器的取指地址,根據(jù)上述流水線機(jī)制,而我們的處理器執(zhí)行的指令地址是落后于要去預(yù)取的指令的地址,落后2個(gè)時(shí)鐘周期。
也就是說我們?cè)谌×说谝粭l指令后,等該指令到了執(zhí)行階段時(shí),我們的處理器其實(shí)已經(jīng)預(yù)取了往后的第二條指令了。
對(duì)于32位處理器,一條指令占據(jù)4字節(jié)。這也就是PC值 = 當(dāng)前指令地址 + 8的根本原因啦。
評(píng)論
查看更多