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