計算機是怎麼運行的?爲什麼它可以自動化的工作?這和時鐘信號又有什麼關係?

什麼是晶振和時鐘(信號)呢?在瞭解晶振和時鐘之前,我們先來思考這麼幾個問題:計算機爲什麼需要晶振?計算機爲什麼需要時鐘?晶振和時鐘有什麼關係?是什麼將它們兩個聯繫在一起?

計算機爲什麼需要晶振?計算機爲什麼需要時鐘?在微機原理課上,你可能已經瞭解或知道,晶振就是用來產生時鐘的啊,這兩個問題是一回事吧?沒錯,晶振確實是用來產生時鐘的,換句話說,如果計算機不需要時鐘,那麼產生時鐘的晶振也不被需要了。所以,這兩個問題的根落在了第二個問題上,計算機爲什麼需要時鐘?在思考這個問題之前,還要再問自己一個問題,計算機一定要有時鐘嗎?時鐘是用來幹什麼的呢?

如無特別說明,本文的時鐘都是指時鐘信號

如果不清出計算機到底是不是必須需要時鐘,沒關係,我們先來看看計算機是怎麼工作的,在你按下了電源鍵之後,計算機的內部究竟發生了什麼?本來現在可以來說這個問題了,但是好像只知其然而不知其所以然,感覺總缺點什麼,因爲我們好像還沒說計算機是怎麼一步一步發展到今天的,不去了解它的過去,又怎麼去讀懂它呢?關於計算機的發明史,就是人類科學技術的進步史。

計算機能發展到今天的成就,得益於很多其他學科所取得的成就,在電子計算機發明的前夜,我們細數一下那些在歷史的長河中流光溢彩的成就。

第一話:電

你要了解計算機,那麼就要從電開始,因爲電流是計算機得以工作的真正血脈。自從富蘭克林發明了電,後人圍繞着電的研究和發明就開始了。而電的老家是原子,直到道爾頓的出現,才真正完成了完整意義上的,科學的原子理論。後來人們逐漸發現了電壓電流電路和電路圖等,電學開始逐漸發揚光大。後來有人想到用電來表示數,開關可以控制電流的通斷,而開關只有兩種狀態,要麼開,要麼關,所以只需要用兩個數就能表示,這恰巧就是二進制啊,而二進制早在電發明的一個世紀前,就已經被萊布尼茲發明了。自此,二進制和電學結下了不解之緣,當開關斷開時,電流被切斷,這代表0;當開關接通時,電路中有電流通過,這代表1。或者再簡單點, 有電錶示1,沒有電錶示0,所以,二進制因爲和電學的深厚交情,而電又是電子計算機的根本,所以二進制自然也就成了計算機的根基,這就是計算機的0-1世界。不過現在離電子計算機的誕生還早的很,但是歷史的車輪滾滾向前。掌握了二進制和電,人們開始用開關設計電路,使它們可以完成二進制的加法運算,這個電路就叫全加器。隨後又利用大量的全加器構成一個串聯電路,這就是加法機。不過這個時候,你控制電路只能用手來不停的撥弄開關。

第二話:電子計算機發明的前夜

後來,奧斯特發現電可以生磁,有人就在鐵上纏了線圈然後通電,可以吸附小鐵釘,這就是電磁鐵。有了電磁鐵的西鐵特性,在它的基礎上,又發明了繼電器,莫爾斯電報就是用這個來工作的。又過了幾年,法拉第發現了磁還可以生電,於是貝爾把一個線圈放進磁場中,並用一個紙片相連,由於說話時候產生聲波,會讓紙片振動,然後就會帶動線圈在磁場中運動,這樣就能產生強弱隨時間變化的電流,於是電話就誕生了。後來的事就是愛迪生大戰交流電,麥克斯韋預言了電磁波的存在,赫茲證明了電磁波的存在。電磁波又叫無線電波,自此人類進入了無線電通信的開端。到這裏,離電子計算機的發明還很遠,但是前面所有的發明,爲後來計算機的誕生創造了可能。剛纔一直再說的都是各種新技術的發明,其實在新技術不斷大明的同時,人類的思維也在不斷進步。計算機凝結了人類智慧的結晶,科學技術只是其中一個方面。抽象思維是人類最主要的思維方式,差不多也是我們人類所特有的。和形象思維不同,抽象思維通常被認爲是在追求真理,因而會出問題。由於抽象思維包括概念,命題和推理,所以,如果這三個中的任何一個出問題,麻煩就來了。最早注意到這些問題的人生活在公元前6世紀的印度,公元前5世紀的中國(戰國時期)和公元前4世紀的希臘。柏拉圖的學生亞里士多德創作了《範疇篇》《解釋篇》《分析前篇》《分析後篇》《論辯篇》《辨謬篇》。在英語裏,亞里士多德研究的內容叫做“logic”,中國的嚴復將其稱爲“名學”,他翻譯引進了《穆勒名學》。後來,乾脆把這個外來詞連同它的發音一起引進來,直接叫做“邏輯”, 而這門學問則叫做“邏輯學”。這個時候,人們表達邏輯還只是靠嘴說,沒有一些符號來將邏輯表達出來。最早,萊布尼茲有了這種想法,他想用一些符號來代替人類的思考和推理過程,可惜他終究也沒有發明這樣的符號。直到一百多年以後,布爾對邏輯進行數學化,成功的創立了一門新的學科:邏輯代數,有時候人們也稱之爲布爾代數。所以,用布爾代數解決邏輯問題,就用1表示真,0表示假。隨後,以邏輯代數爲基礎,布爾和他的支持者們最終完整的建立了一個新的學科門類——數理邏輯。後來,香農把布爾代數和電學結合了起來,開創了一個新的領域:開關電路。還記得在第一話萌芽的最後,那個時候要控制電路還得你用手不停的撥弄開關嗎,現在了有了開關電路,我們就可以用電壓和電流來代替人手去控制一些開關,一樣能改變電路的通斷狀態,要用電流的通斷來控制電路的開關需要使用繼電器,而繼電器早在前面已經發明瞭。
在這裏插入圖片描述
在繼電器基礎上,又發明了觸發器。
在這裏插入圖片描述
給繼電器加上電源,讓它的輸出作爲輸入,就是振盪器了,這東西在後面會很有用。
在這裏插入圖片描述
根據布爾的邏輯表達式和香農的開關電路,我們就可以設計出與門,或門和非門等等的邏輯門電路。與,或,非是三種最簡單的門電路,自從有了它們,這個世界開始變得與以往不同,看看現在的什麼數碼相機,智能微波爐,智能冰箱,智能手機,掌上游戲機,微型計算機,數字電視,甚至第一話中的加法機,不管它們有多麼複雜,搭建它們的最基礎的磚頭瓦塊差不多很大一部分都是這三種門電路。之前我們的加法機還是手動開關,現在全部可以用邏輯門電路來實現它了。到現在,我們差不多可以利用邏輯門電路來實現一些計算了,但離一臺真正的電子計算機誕生還有一段距離,但是很近了。

第三話:計算機時代的開路先鋒

前面講了很多東西,包括繼電器,觸發器,邏輯門等等,這些都是鋪墊,爲了讓你對於瞭解計算機爲什麼會自動工作(計算),這種“自動”的本質是怎麼發生的有一個知識鋪墊,所以在第一話和第二話中,進行了大量的鋪墊。在第二話中,我們知道可以用繼電器來製造一個運算電路,這個東西組成的 電路已經可以來實現一些計算了,第一次有了可以實現自動計算的電路了。但是人們卻並不滿足於此,那又是什麼驅動着人們來改造它呢?首先,繼電器要工作,需要電流驅動,但是它的吸合和釋放卻是一個機械過程,換句話說,它一半是機械的,一半是電子的。雖然人們倡導機械化,但是對於一個計算機來說,機械化太致命了。繼電器可以用來做觸發器,但是它畢竟是機械的一開一合,效率可想而知。計算機應當擺脫機械,包括笨拙的繼電器,完全實現純電子化的運算,這對於計算機的先驅們也是很自然地想法。世界上第一支電子二極管管發明於1904年,第三年,也就是1906年,才發明了電子三極管。而電子二極管和三極管的發明不是因爲要造計算機,而是被廣泛的應用在電話,電報和無線電通信。因爲此時,電子計算機還沒走過理論準備階段。下面就是電子管的樣子。
在這裏插入圖片描述
純電子化的運算很奇妙,兩股代表着不同數值的電流在某個裝置內匯合,相互影響,變成另一股合適的電流,這就是計算結果。最重要的是,這個過程中沒有機械的影子,看不到繼電器銜鐵的吸合與釋放,而實現了這個想法的人就是阿塔納索夫。阿塔納索夫的核心思想是使用二進制,並採用電子管來製作進行加減乘除所需要的邏輯電路。電子管是新材料,繼電器能做的它也能做。因爲電子管是純電子的,所以開關速度要比繼電器快成千上萬倍。下圖就是阿塔納索夫發明的世界上第一臺電子管計算機。
在這裏插入圖片描述
但是電子管計算機中所用的電子管在當時非常昂貴,而且電子管造出來的計算機實在大的離譜,第一臺電子管計算機佔地170平方米,重達30噸,一個房間才能放下。下面就是使用了18800個電子管造出來的第一臺“可編程“計算機ENIAC。
在這裏插入圖片描述
體積大自然能耗就高,喫電很兇, 據傳ENIAC每次一開機,整個費城西區的電燈都爲之黯然失色。1947年,肖克利和他的兩位同事發明了晶體管。和電子管一樣,晶體管也是製作邏輯門,乃至各種觸發器的好材料。而且,使用晶體管,可以更省電,體積更小。下面就是晶體管的樣子。
在這裏插入圖片描述
然後人們利用新的材料和新的技術,繼續着設計。使用多個觸發器可以構成一個寄存器,它可以保存計算的中間結果。下面就是一個寄存器的電路。
在這裏插入圖片描述
接着就設計一個加法器電路。因爲在加法器的邏輯電路中,有一部分線路大家要共用,所以就把大家共用的公共線路稱爲總線,大家只要輪流使用總線就可以。爲了讓電路可以實現做一連串的加法,還要設計控制器電路。這時,要想相加兩個數,還需要通過開關來手動裝載每次需要的數,這很不方便,所以能不能設計一個電路,把需要計算的所有數和結果可以存起來,然後讓控制器進行裝載,然後相加。利用多個上升沿D觸發器(本身也是一個電路)可以實現一個存儲器。
在這裏插入圖片描述
然後,爲了可以實現自動化的操作,還要設計地址譯碼器電路,取數控制器電路。具體怎麼設計,並不是我們關心的,但是我們要知道,計算機可以實現”自動化“的操作,實質上都是邏輯電路來實現的。要想讓這個加法器真正的自動化工作起來,除了設計好它的邏輯電路,還要告訴它怎麼做,你有兩種選擇。我們先撇開加法器做加法的每一步具體過程,裝載,相加等,我們來舉一個喫飯的例子,來說明這兩種選擇。比如我們要命令一個人喫飯,你可以直接對他下達”喫飯“的命令,也可以命令他”先拿勺子“ ,然後”舀起一勺飯“,然後”張嘴“,然後”送到嘴裏",最後"嚥下去"。那你願意每個邏輯單路單元弄一個開關,然後執行每一個動作都掰一下開關呢,還是提前編制一條指令,這條指令裏包含一個操作碼和操作數,操作碼錶明要執行的動作,是裝載還是相加;操作數就是你要操作的那個數。操作碼來指出這條指令的功能,比如你可以用10001表示“裝載”,10010表示“相加”,電路的設計可以讓裝載完操作碼後,然後通過循環移位,自動的到存放操作碼的下一個存儲器單元取操作數。這麼一來,只需要提前將你編制好的指令的操作碼和數據裝載進存儲器,然後就可以讓加法器的電路按照你的指令來運作了。剛纔爲了實現一個可以自動取數並做加法的加法機,我們設計了存儲器電路,地址譯碼器電路,控制器電路,寄存器電路,把這些邏輯電路單元組織起來,就可以實現一個簡單的加法器了。 下面就是一個加法機的邏輯電路圖,用一隻開關就可以完成將所有的數從存儲器裏依次取出並逐個相加的過程。
在這裏插入圖片描述
在上面這個電路中,爲了執行每條指令,你都得按動9次開關,所以這很累,還記得之前的振盪器嗎,是它該大顯身手的時候了,它可以代替你不停按開關的工作。振盪器會不停的向電路發出脈衝,所以存放在存儲器中的指令會被一條接着一條執行,只要不斷電,它將永無休止。看起來好像不太聰明的樣子,所以,你還需額外的設計一條停機指令,比如11111它只有操作碼,不需要操作數,在所有指令的後面,放一條停機指令,這樣在所有指令都執行完後,當停機指令被送到譯碼器,振盪器將不再產生脈衝到達控制器,加法器也就停止工作了。爲此,需要重新設計一下電路,像下面這樣;
在這裏插入圖片描述
終於從加法機出來了,上面的自動加法機也是計算機,雖然不能用來聽音樂,看視頻,玩遊戲,但是,你發現,它有存儲器,有運算器(雖然只能做加法),一個控制器,還有一個驅動控制器的心臟——振盪器,這看着多麼像計算機的雛形。

第四話:萌芽

1936年,24歲的天才圖靈提出了“圖靈機”的概念。圖靈機以布爾代數爲基礎,將邏輯中的任意命題用一種通用的機器來表示和完成,並能按照一定的規則推導出結論。圖靈機的設想被譽爲現代計算機的開山之作,它描述了一種假想的可實現通用計算的機器,下圖就是圖靈機的模型。
在這裏插入圖片描述
在這個模型中,有一條無限長的紙帶,紙帶上劃分出了很多不同顏色的方格,在機器內部有一個機器頭,可以在紙帶上移來移去。機器頭有一組內部狀態,還有一些固定的程序。在 每個時刻,這個機器頭會從當前的紙帶上讀入一個方格的信息,然後結合自己的內部狀態查找程序表,根據程序輸出信息到紙帶方格上,並轉換自己的內部狀態,然後進行移動。 圖靈機從來沒有成爲一臺真正的機器,它是想象出來的,但卻給同時代的人很大的啓發。

第五話:現代的通用計算機

圖靈的思想爲現代計算機的設計指明瞭方向。一臺計算機應當包括一個存儲器和一個運算器,指令和數據都放在存儲器裏,在控制器的指揮下一條指令一條指令地自動執行。這種安排是從第二次世界大戰開始的,並且這種形式一直沿用到現在。還記得前面說過的那個第一臺“可編程”的電子管計算機ENIAC嗎,它就是採用了這種結構形式。第一個提出採用這種結構形式並把這種設想付諸實踐的是馮 · 諾依曼,所以這種體系結構又稱爲“馮 · 諾依曼體系結構”,這不是唯一的計算機體系結構,還有一種計算機體系結構叫哈佛體系結構。

第六話:集成電路時代

電子管計算機的龐大我們已經見識到了,後來有了晶體管,計算機的體積變小了不少。下面是世界第一臺晶體管計算機TRADIC(“催迪克”)。
在這裏插入圖片描述
第一臺晶體管計算機誕生於肖克利獲得諾貝爾獎那年,1956年。在翻過了肖克利這一頁後,晶體管的發展繼續向前。1958年,基爾比發明了集成電路。1959年,諾伊斯發明了一種新的工藝,可以在一塊本徵硅上製造大量晶體管,這就是製造CPU的雛形。我想這裏有必要簡單說一下晶體管是怎麼工作的,因爲後來集成電路中的那些小到肉眼看不見的晶體管和它的工作原理是一樣的。先來回憶一下晶體管的樣子:
在這裏插入圖片描述
沒錯,記住它有三隻腳丫子,這三隻腳丫子都有名字,分別叫做基極(B),集電極(C),和發射極(E)。它的工作原理也很簡單,以NPN晶體管爲例,看下面這張圖就很容易理解;
在這裏插入圖片描述
圖裏B,C,E分別代表基極,集電極,發射極。想象在集電極和發射極中間是一根水管,左側有一根小水管連接着水管中的閥門。水壓代表電壓,流經水管的水流代表電流。當水流流經小水管時,將打開集電極和發射極之間的閥門,讓水流經過發射極流向地面。怎麼樣,是不是很好理解呢? 你可能會問,這麼大的晶體管,怎麼做到小到看不見集成到電路里的呢?彆着急,下面會說到的。從諾伊斯發明這種工業化生產集成電路的方法開始,在隨後的幾十年裏,這種技術該進了好多回,每改進一回,集成的晶體管數量都會千百倍的增加,這就是著名的摩爾定律:集成電路上可容納的晶體管數目,約每隔兩年便會增加一倍。
在這裏插入圖片描述
差不多接近尾聲了,最後,我們來解釋一下晶體管怎麼做到小到看不見,放到集成電路中的,順便,我們一起來看一下CPU的內部世界。CPU就是中央處理單元,它可以說是主板上最重要的一個部件,前面我們講電,邏輯電路,加法器等等,最終其實都是爲了理解CPU是怎麼工作的。CPU可以說是人類的一個壯舉,其內部複雜的簡直難以想象。我們了來看一個Pentium處理器的內部邏輯電路,下面這幅圖:
在這裏插入圖片描述
可以看到,在這個CPU的內部結構中,有許多的邏輯電路單元,通過我們前面很多話的鋪墊,相信你已經不難理解,這些邏輯電路單元怎麼相互配合實現自動化的運算。CPU的內部電路就是由衆多的邏輯門構成的,就像下面這幅圖:
在這裏插入圖片描述
上面只是一個很簡單的CPU的邏輯電路,實際的CPU要想實現複雜的自動化的運算和控制整個電路,內部的電路結構要比這個複雜的多,比如下面這幅圖是一個模擬真實CPU的圖:
在這裏插入圖片描述
如果看到不太清,我們可以把某一個部分放大來看:
在這裏插入圖片描述
你可以看到這裏面有很多的走線,實際上,它們就是銅線,但卻只有幾十納米粗細,肉眼無法看到。這些銅線連接着衆多的邏輯門,輸送着電流。接下來,我們看個真的CPU內部結構。通過電子顯微鏡成像,我們可以看到一個真實的CPU的內部細節:
在這裏插入圖片描述
把某個區域放大來看看:
在這裏插入圖片描述
可以明顯的看到,衆多的銅線交錯縱橫,貌似它們是分層的結構,再放大來看下:
在這裏插入圖片描述
這次可以清楚的看到,CPU內部的銅線的銅線確實是分層的,而且越往下,銅線越細。再放大看看:
在這裏插入圖片描述
差不多好像可以看到晶體管了,這裏的晶體管和之前介紹的那種三隻腳的晶體管原理是一樣的,只不過工藝的進步,可以讓它的實現變得更小。我們舉一個邏輯門的例子來說,就以與門的構造爲例:
在這裏插入圖片描述
上面的符號,學過邏輯電路的一定不會陌生,這是一個與門,揭開它的白色蓋子,讓我們看看它內部電路怎麼構造的:
在這裏插入圖片描述
上圖,就是與門的內部電路實現,在真實的CPU中,差不多也是這個樣子。可以清楚的看到,與門的實現用了3個晶體管,你應該對晶體管怎麼工作的不太陌生了,因爲上面剛剛介紹過它是怎麼工作的,如果忘了,可以再返上去看下。
在這裏插入圖片描述
原來晶體管的那三隻引腳,已經被十幾納米的銅線所替代了。如果你對這些銅線是怎麼架起來的很有興趣,可以去看一下Intel的CPU生產流程工藝,這是在一個叫做光刻的過程中完成的。現在,我們對CPU怎麼自動的來工作的,應該有一些明白了,可能還有些模糊,最後,我們一起來總結一下。我們只從最本質的層面來說,也就是不會說它是怎麼取址執行的,不談論寄存器,不論它是AMD的,還是Intel的CPU,在它們各自的內部,可能都有自己的微架構,甚至同品牌但不同型號的微架構也會有所不同,所以拋開這些細枝末節的東西,我們從最本質的層面來說。最本質的是什麼?電!CPU是電驅動的。如果用一句話總結CPU怎麼運行的,可以這樣來描述:電流沿着銅線不停的通過晶體管組成的門電路。這就是CPU在運行的時候,內部正在發生事情。至於CPU具體怎麼取址執行的,這些其實已經是在更高的層面來說了,可以具體到某個CPU架構來說,不是這篇文章的重點。現在我們已經從最本質的層面知道了CPU內部是如何運作的了。

回答晶振和時鐘

現在,我們已經知道了計算機是怎麼一步一步被創造出來的,CPU運行的時候內部實際又在發生着什麼。有了一個比較系統的認識以後,現在就可以來回答我們開頭提出的那個問題:計算機一定要有時鐘嗎?時鐘是用來幹什麼的呢?現在我們就把時鐘弄明白,它存在的意義是什麼,要解決什麼問題。通過前面的介紹,你已經知道了CPU是靠電流驅動的,而1代表有電流,0代表沒電流,而電流的通斷由晶體管來控制着,晶體管就像一個開關一樣。如果我們用一個波形圖來表示電流的變化情況,它的變化應該是這樣的:
在這裏插入圖片描述
在凹下去的地方就是0,凸起來的地方就是1。可以看到,從0變化到1並不是瞬間完成的,而是有一個斜率,這就意味着在從0變化到1是有一段過渡的時間。爲什麼不是瞬間完成呢?其實你可以回想一下你擰開水龍頭的情景,當你擰動水龍頭的時候,水流是從小逐漸變大的,而電流的變化也有這種現象。電流本質是沿着一個方向運動的電子,當你開始加一個5V的電壓,電壓從0到5V也需要過渡的時間,所以剛加電壓的時候,只能驅動少量電子向一個方向運動,隨着電壓逐漸變大,被驅動的電子也越來越多,所以電流是在逐漸變大。我們把從0變化到1(或者從1變化到0)所用的時間稱爲傳播延遲。但是,這個過渡時間(傳播時延)其實是極其短暫的,基本是在納秒(ns)級別,對於我們來說納秒幾乎感覺不到,但是對於電路來說,卻不能忽略。爲什麼不能忽略?如果你想明白了那你就知道時鐘存在的意義了,如果沒有猜到,沒關係,那就先把這個問題跳過去,後面會解釋的。因爲這個過渡時間是納秒級別的,所以上面這個圖的斜率其實非常陡,就像下面這樣:
在這裏插入圖片描述
這種圖對於分析問題非常不方便,如果你是研究問題的人,你願意對着這樣的圖來研究下去嗎?所以,人們爲了圖看起來更方便,就直接把它畫成一條直來直去的豎線,就成了下面這幅圖:
在這裏插入圖片描述
把這樣的一個方波,就稱爲一個脈衝。在我們現在討論的話題裏,也就是關於CPU的脈衝的時候,把這種脈衝稱爲時鐘脈衝,它還有另一種常見的叫法,叫時鐘信號,都是一回事,簡稱爲時鐘。你可能會好奇問爲什麼叫時鐘呢?難道和我們看時間的鐘表有什麼關係嗎?請你回想一下,前面我們說過有一個東西叫振盪器,它可以不停的產生脈衝信號,這種東西被用在安上電池才能走動的鐘表中。在這種鐘錶裏面,有一個振盪器,它每隔一秒產生一個脈衝,用來驅動一個小小的電機,促使它每次轉動一個角度,並通過齒輪傳動機構帶動秒針跟着向前移動一步,還“嗒”地響一下。由於這個原因,這種振盪脈衝經常被稱爲時鐘脈衝,或者時鐘信號,以表彰它至今仍在某些鐘錶裏面努力工作的精神。現在知道爲什麼叫時鐘脈衝了吧,原來和鐘錶中的振盪器有關。前面我們講的振盪器是爲了給電路的一個脈衝,讓整個電路在脈衝的驅動下工作。你可能會馬上想到,晶振就是產生時鐘的,那主板上的晶振也是爲了產生時鐘脈衝然後驅動CPU工作吧?如果你這麼想,顯然你認爲CPU依靠時鐘脈衝才能工作。其實,CPU沒有時鐘照樣可以工作,這種CPU叫做異步CPU(asynchronous CPU),而我們平常所說的需要時鐘的CPU屬於同步CPU(synchronous CPU),目前市面上在銷售的CPU差不多都是同步CPU。而且,可以告訴你的是,異步CPU還比同步CPU更快,那爲什麼不用異步CPU呢?因爲異步CPU的設計更加複雜,在最開始的門電路設計上就已經與同步CPU不一樣了。還有一點,我認爲是代價的衡量,因爲即使異步CPU更快,這個時間在每一次改變晶體管狀態的時候屬於納秒(ns)級別的,即使快1000ns,對於人來說幾乎感覺不到,但是異步的設計無疑增加時間和人力的成本,究竟要不要爲了納秒級別的提升而設計比同步CPU更加複雜的電路,相信設計CPU的工程師們一定比我們更清楚。所以,現在你應該知道了,時鐘不是爲了驅動CPU工作的,那時鐘究竟是幹什麼的呢?剛纔說只有同步CPU纔會需要時鐘,那就來理解一下同步這個詞,理解了“同步”,就知道時鐘的作用了。理解同步,需要舉一個生動的例子,運動會的100米比賽再好不過了。現在有5個人要參加比賽,有一根起跑線。當比賽即將開始,5個人陸續向起跑線走來。第一個人先到了,但是他還不能起跑,因爲這個比賽有五個人,他還要再等等其他四個人都站到起跑線上才能開始。如果不需要等待,假設他們的速度都是一樣快,那離起跑線最近的那個人勢必先到達終點,那這場比賽就亂套了。所以,只有等五個人全部站在了起跑線上,也就是說這5個人同步了,然後就可以跑了。
在這裏插入圖片描述
同步理解了,那時鐘呢?現在,我們要記錄一個時間,就是剛纔的5個人中,走到起跑線時間最多的那個人的時間作爲他們這組的同步時間,就是最多用多長時間你們這5個人就能在起跑線上都站好了,假設這個時間是20秒,我們就把這個時間叫做一個時鐘週期。也就是在這個時鐘週期內,保證5個人已經全部站在起跑線上了,這個時候裁判一打搶,他們就可以跑出去。我們假設這個比賽不止一組,剛纔那5個人是第一組。裁判是個機器人,他每隔20秒就打一次槍,也就是一個時鐘週期就打一次槍。現在輪到第2組,經過一個20秒的時鐘週期,5個保證全部到了起跑線,然後裁判機器人打槍,第二組起跑。接下來的每一組都是如此,5人站到起跑線,起跑,5人站到起跑線,起跑。所以,時鐘週期的意義就是能保證5個人能全部出現在起跑線上,也就是可以確保這5個人同步了,然後再進行下一步的動作。當然這是一個比較通俗的解釋,爲了可以對時鐘的作用有一個感覺,知道它是爲了控制一個時間範圍,起到同步的作用。在前面,我們已經知道了CPU是通過很多的邏輯門來工作的,而邏輯門的實現就是依靠晶體管的開關作用。比如現在有兩條電流要經過一個非門,第一條電流它過來時候可能是從別的門的輸出過來的,第二條電流可能直接過來的,沒經過邏輯門。那當這兩條電流到達邏輯門的時候,肯定是第二條電流先到達。第一條電流因爲要經過一個邏輯門,所以會有傳播延遲,等它從那個邏輯門出來的時候,第二條已經先於它到達了非門。由於第二條電流一到達,非門就會發生變化,但是要想非門正確輸出,必須等待第一條電流也到達後, 將兩條電流匯合的結果再作爲輸出。非門不能在第二條電流一到達就產生輸出,要給它一個時間限制,假如是20納秒,經過20納秒後,非門才能輸出。而在20納秒內,第一條電流一定會到達,因爲這個20秒是按第一秒能到達的最長時間算的。通過一個具體的例子更能說明問題,考慮下面一個邏輯電路:
在這裏插入圖片描述
當A=B=1時,Q=0。當輸入信號發生變化時,邏輯元件不會立即對輸入變化做出反應,會有一個傳播時延(propagation delay)。當B變化爲0時,由於B也作爲XOR的直接輸入,所以XOR異或門會立即感知一個輸入變爲0的狀態變化,XOR輸出變爲了1。但是由於傳播時延的作用,AND與門的輸出會過一小段時間才變爲0,XOR的輸出會在變爲1後隔一小段時間重現變爲0。表現爲下圖就是這樣:
在這裏插入圖片描述
上面這種現象叫作空翻(race condition),即指輸出中出現了一個不希望有的脈衝信號。

一個簡單的辦法就是在輸出端放置一個邊沿觸發器:
在這裏插入圖片描述
邊沿觸發器的作用就是隻有當CLK端輸入從0變到1時,數據端D的輸入纔會影響邊沿觸發器的輸出。這樣,所有的傳播時延都會被邊沿觸發器所隱藏掉,這時Q端的輸出將變得穩定。比如:
在這裏插入圖片描述
其中灰色的部分代表沒有邊沿觸發器時的Q端輸出狀態。我們可以看出,當有了邊沿觸發器後,Q端的輸出變得穩定,基本消除了傳播時延。

從上面的例子我們可以看出CPU爲什麼要時鐘:目前絕大多數的微處理器都是被同步時序電路所驅動,而時序電路由各種邏輯門組成。正如上面說的那樣,邏輯門需要一小段時間對輸入的變化做出反應(propagation delay)。所以需要時鐘週期來容納傳播時延,並且時鐘週期應當大到需要容納所有邏輯門的傳播時延。

前面我們也說了有異步CPU,它採用Asynchronous sequential logic設計,即不需要時鐘信號做同步。但是這種異步邏輯電路雖然速度比同步時序電路快,然而設計起來比同步時序電路複雜的多,並且會遇到上面說的空翻現象(race condition),所以,現在絕大多數的CPU還是需要時鐘做信號同步的。

現在徹底明白了時鐘的作用了吧?由於現在是集成電路,所以產生時鐘的元件就由晶振來承擔了。最後總結一下,我們的思路是從一個問題開始嵌套的問下去,一直追問到本質,然後又通過分析本質,逐級回溯到最初的問題,看似沒有聯繫的幾個方面,實則有着千絲萬縷的聯繫,所以說,計算機是人類智慧的結晶。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章