作為一個軟工狗,如何明白時鐘是如何驅動CPU工作的?

看了大家的回答,我覺得我真正想問的問題是:時鐘是如何驅動CPU工作的。

除了大家推薦的《編碼》,下面是我找到的一個貌似能解答我的問題的網站,等有時間研究一下。

http://www.buthowdoitknow.com/

謝謝大家了。


起初,你困惑於時鍾。你對自己說: 是不懂數字電路

然後你會想 產生時鐘的振蕩電路 是什麼原理。你覺得不踏實,你對自己說:嗯,應該去學一下模電。

然後你會想 NPN PNP 是什麼原理,為什麼能造出三極體什麼的。你覺得不踏實,你對自己說:嗯,應該去學量子力學,物理知識。

然後你進入量子力學的世界,你發現數學能力捉急,之前理解的世界都是實數,沒有維度概念,你覺得不踏實。你對自己說:嗯,應該增加數學修養。

然後你進入數學的世界,打好數學基礎,然後苦惱於為何1+1=2 為何概率和等於1 久久不能釋懷,你覺得不踏實。 你對自己說:嗯,應該進一步思考數學的本源。

然後你進入更高級的數學世界,思考公理化,然後苦惱於天分有限,已經一把年紀了。

這個時候你身邊會你之前非常不屑的擺弄php js的小夥伴們已經搞起了自己的startup 拿到了風投 擁抱白富美走向人生巔峰了。

都是時鐘惹的禍

===================抖機靈的分界線,下面部分很無聊========================

時鐘其實是時序電路的心臟

構成一個CPU 有加法器 乘法器等等部件, 有些部件雖然不需要時鐘就可以工作,但是都只能解決簡單的任務比如加法, 乘法等等。 但是一般的任務都要比這個複雜所以有很多的加法,乘法, 為了將其組合協調所以需要時鐘來組織協調他們,而且只有時序電路才可以有記憶功能,才能勝任複雜的工作。

願意深究的話,這個答案應該能幫到你: 為什麼CPU需要時鐘才能工作? - 計算機 - 知乎


是,但是你可以不用理解鍾是什麼回事,也可以把軟體做好。


既然你想聽從頭講起的故事,作為一個化學狗轉行的碼農,我義不容辭,就先講講晶振的原理!我講完以後樓下EE狗們請跟進講LC電路蛤

晶振的物理基礎是固有諧振頻率,化學基礎是壓電效應。諧振是高中就會講的內容,這裡就不細說了,我們來講壓電效應。壓電效應,是由各向異性的電介質晶體,比如石英,受到外力作用而出現電介質極化併產生電壓的一種非線性力學現象,或者與之相對的,向晶體上加電壓而產生的力學現象。

石英是日常最常見的非線性晶體,來源於硅氧四面體不能完美密堆積而產生的各種晶胞構象。由於由有潛在極性的硅氧四面體規則堆積成晶體,所以在某些晶面上,石英整體會呈現極性,並因為電荷的規則分層排布成為電介質。衡量電介質性能的值叫介電常數。

當外加電壓的時候,石英晶體會發揮電介質的特性,讓硅氧四面體變形來極化自己,從而抵消外加的電場,在此過程中產生力學特性。相反,當石英晶體受力的時候,晶胞參數就會改變,硅氧四面體變形,使其極性變化,從而硅氧四面體和石英本身的介電常數改變,這樣一來再受電場的時候,因為其介電常數變化,就會使得電容變化,可以測得電壓變化。形變的彈性也會改變。這就是壓電晶體的正壓電和反壓電效應。

當固定的晶體受力的時候,當然會回彈,產生振動。如果外加電場也周期性變化,使得晶體周期性受力,和石英晶體的固有頻率相同,那麼晶體就會受到電場而反覆振動,反過來增強電場,形成諧振。而如何形成這樣的振蕩電場和如何測量,就是EE狗們的工作啦~請跟進~

===================================================

我要寫一點量子力學的二極體原理嗎?


做純軟不建議涉及電路了,人沒那麼大精力,像時鐘電路這種東西沒個五六年功底是理解不了的,電子論壇普遍認可的:三年軟體,十年模電,二十年射頻。所以你經常可以見到三十歲的軟體大牛。但模電這些基礎的東西國內浮躁的環境基本已經很少人深入研究了,學習周期太長,即便學成了可能還不如軟體賺得多。但提醒一點,我國進口金額第一的不是石油,是跟沙子成分一樣的晶元。


題主學的是軟工,一個工程師最基本的技能就是在一堆抽象化的東西上面做上層建築,最忌諱的就是刨根問底。

不是說刨根問底不重要,在時間充分的情況下刨根問底也是好的,但是相比起這個,在抽象概念上做上層建築的能力,也就是給你一堆定義,你可以做出一個世界,是重要十倍的事情。


沒幾個人能說出執行printf ("hello world"); 過程中電腦究竟發生了什麼.

但是這並不妨礙我精通多個語言的hello world.


看到修改後的問題我覺得我應該強答一發。

對,就是因為我,D Flip Flop。

我是數字系統中最常用的小電路模塊之一。當然實際常用的還有RS Flip Flop等親兄弟姐妹,以及鎖存器等堂兄弟姐妹。

他們和我一樣有一個特點,雙穩態,也就是說可以存儲一bit。有數據輸入端,輸入0或1這樣的數據。有控制輸入端,當這個端輸入一些特定的東西的時候,內部存儲的值就會根據數據輸入而改寫。我們Flip Flop家是看見時鐘上升或者下降就會改寫,而我單名一個D字,意思就是直接把數據輸入複製到內部存儲。

試想一個加法器君,他記性不好,不能存儲狀態,那麼a=a+1這種運算就需要我了。讓我的數據輸入接他的輸出,他的輸入接我的輸出,只要我從控制輸入端看到了該改寫的信號,就完成了a=a+1。

而時鐘就是在控制輸入端最常見的小夥伴了。還是上面的問題,要實現循環怎麼辦?一個時鐘信號接到我的控制輸入,時鐘每隔一段時間就告訴我該改寫了,於是我和加法器君就完成了while(true){a=a+1;}

一個功能完整的簡單的CPU的邏輯其實就是這樣

// 取指令的地址
#define PC program_counter
// 如果跳轉到別的地方運行完一段代碼還得回來,就得記住原來的地址
#define RA return_address
// 要能定時和處理IO必須可以中斷
#define IH interruption_handler

while(true)
{
int instruction = *(PC++);
if(interrupted)
{
RA = PC;
PC = IH;
}
else switch(category(instruction))
{
case jump:
if(is_function_call(instruction))
{
RA = PC;
}
PC = jump_target(instruction);
break;
case arithmetic:
calculate(instruction);
break;
case memory:
access_memory(instruction);
break;
}
}


你需要的不是了解那些細節,而是接受並且理解合理的抽象。

比如說,你把cpu當成圖靈機機器本體,把內存當成圖靈機紙帶,那麼一個時鐘周期就是對狀態轉移函數的一次運算。

比如說,你把cpu+內存當成有限狀態機,那麼……好吧,這個也叫狀態轉移函數的。

如果你把cpu當成執行機器指令的抽象機器,那麼時鐘就是pc寄存器(ip寄存器)的一跳。


某984.5學校,專業電子信息工程,今年大四,我學到現在也只在數電上看過如何產生時鐘,555和石英兩個,至於講解時鐘到底是個啥,到底為啥要弄出這個來的,貌似沒有。


你不需要晶振是什麼

你不需要知道鎖相環是什麼

你不需要知道振蕩電路是什麼

你不要知道ROM地址

你不要知道TX RX 上拉電阻下拉電阻是什麼

你不需要了解pnp npn是什麼

你不需要知道的太多了,照樣可以寫出hello world。

如果看的人多,再來寫點單片機的文檔吧

----前電子人照樣可以做伺服器


很奇怪, 如果樓主是這個專業的, 難道會沒有學過微機原理或者單片機之類的課程?

這都是屬於很底層也很基礎的知識範疇.

類似的如果學習過PLC編程就會對於"節奏"格外敏感了. 某個"節奏"下某個繼電器的狀態直接可以控制到宏觀的電路上來. 當然, 實際上PLC中的CPU時鐘並不等同於PLC程序中的一個運行時序, 但是理解起來卻很容易.

同樣的, 在彙編中也很容易學習到時鐘周期的概念. 某個指令需要多少個時鐘才能完成, 背後就是多少邏輯電路做了多少步的動作.

"空乏"一點來說, CPU也好內存也好, 都是數字電路, 它們在工作的時候都會處於某個"狀態",即: 通和斷, 或者你理解成1和0之類的. 軟體就是讓這些電路按照某個時間順序或者條件下為"通"和"斷"的狀態

許許多多的邏輯電路在軟體的控制下最終得出一個最終結果, 也就是你程序的運行結果.

所有的這些電路運行都需要有一個統一的"節奏", 比如要執行"與"操作時, 與門的兩個引腳必須在這之前先被設定為0或1.(這只是一個最最基本的"運算", 想必你肯定是知道的)

所以, 時鐘就是給這些邏輯電路喊口令,打拍子的. 要是沒有統一的時鐘(或者沒有時鐘). 你想想計算機還能運行什麼東西? 都亂套了.


不需要。

我在上大學之前就知道有個東西叫晶振,還知道cpu的頻率是受特殊組件控制的,主頻=外頻x倍頻,外頻和內存頻率、PCI-E頻率相關,也知道超頻需要加電壓,不然有些操作沒法在一個時鐘周期內做完,系統就不穩定崩了。。。。

然而並沒什麼卵用。這並不是軟工必備知識。數電和模電也不是為了教你一個時鐘的概念。

模電我沒上。數電我上了,講的是各種邏輯門電路的概念和功能。比如常見的教學用門電路的電氣特性、門電路組合得到的鎖存器、觸發器等等。


模電數電沒有講時鐘,,,時鐘是微機原理講的。。。

經過評論區提示。。。還是有講的。。。ne555定時器還是。。。勉強算的吧。。。雖然我更多用這個輸出方波。。。


題主為何不去學一下固體物理


..........

晶元都是低電壓直流供電的,電壓圖形一條直線,沒有波段,也就沒有周期。

沒有周期也就不可能逐條完成程序(讓PC指針+1),這點能理解嗎??

時鐘就是提供震蕩周期,讓PC指針+1,最終目的是讓晶元能一步一步完成程序。

.

就這樣解釋吧,雖然中間還有好多好多東西


應該看數電和verilog HDL,時鐘主要還是數字電路中的概念。一般verilog HDL的書中都會講到時序電路、時鐘周期、建立時間、保持時間、狀態機等概念,把這些都弄明白了,也就知道時鐘是怎麼回事了。

不過,如果哪天樓主把以上都弄明白了,就會發現還有更基礎的東西,那接下來就要看半導體器件了。知道半導體器件了,還有半導體材料;再接下來的東西可能就是電子、電荷了吧,時髦一點還可以和量子物理扯上點關係呢。

PS:較真一下,樓主貼出來的那段英文所講的內容誤導性太大,嚴格來講基本都是錯的。


如果對這一塊完全沒有概念,推薦一本科普的書。

https://book.douban.com/subject/4822685

事實上我覺得你看完這本書就夠了,如果有什麼不懂的點,可以再去看延伸的書。

==============下面都是裝逼用的============

說到一個時鐘,其實牽扯到的東西還是很多的。

底層的是震蕩電路,大概你需要看看高頻電子線路,高頻電子線路的基礎是模擬電路,到具體的器件和PCB板上,可能還需要高速PCB設計和CMOS器件設計。

上層一些的是,數字電路,最重要的是要知道競爭冒險,上升時間和下降時間,這個和時鐘密切相關,器件能跑多快就是由這個決定的。

更上層一些,你可能需要知道處理器內部是怎麼調頻調壓的,為了不讓執行順序出現混亂,處理器做了什麼額外的工作等等

最上層到代碼層面,如果你不是直接面對硬體的嵌入式狗和驅動狗,大概只需要知道延時是不精準的就可以了?

#所以軟工為什麼要在意時鐘啊喂#


不夠,我學了數電模電,最近做實驗連個48M時鐘振蕩電路都設計不出來,所以還得學


我的個媽呀!學電子的要強答一發!

時鐘嘛,其實和模電關係不是很大,主要是數電,數電上常見的各種解碼器編碼器啊各種觸發器啊什麼的,這些是基礎器件工作離不開時鐘的控制,就像你的心跳來保證你的動脈供血一樣,心臟跳一下泵一下血,同樣的時鐘決定了你器件工作頻率,工作速度什麼的,因為他們都是接受一個脈衝(上升沿下降沿)或者電平(高電平低電平),收到了這東西才開始工作的。

但是呢。

現在我也在了解一些上層軟體方面啦,不只局限於電子硬體。但是感覺是,有這些硬體基礎,再去看軟體的那些東西有點居高臨下和小兒科的趕腳。哈哈,不知道會不會被軟體大神打。

廢話完了,我想說,其實你可以不用管時鐘是啥也可以搞好軟體的。個人在接觸軟體開發過程中,並沒有覺得做軟體需要特別關注硬體的很小的細節方面,知道大致硬體框架就行啦。

然後,你要學微機原理就行啦,了解cpu運行機制,看看cpu每個時鐘在幹啥,每個時鐘又有分段。了解一下其實也行

坐公交上手機隨便答的,沒什麼條理和思路,哈哈。希望可以給你一個參考。


如果不是科班出身的,就看這本書:

編碼的奧秘 (豆瓣)


推薦閱讀:

人耳可聽頻率範圍是20~20000Hz,220V交流電的頻率是50Hz,為什麼聽不到電的聲音呢?
用電高峰時段,是先切除居民用電還是保障居民用電?負荷切除的順序是怎樣的?
在電網中無功功率為何會抬高電壓?
我用電壓轉換器轉成110V,測量電壓為120V-140V之間,請問這種情況下美國電器能正常使用嗎?
如何看待周圍人持有「空調開關費1度電。」的觀點?

TAG:計算機 | 計算機技術 | 電氣工程 | 電子工程EE |