轉載的

這個問題從高中就開始疑惑,計算機究竟是如何理解人類思維,如何進行計算?我很想知道最最基本的工作原理,但是大學裏好多課程,數字邏輯,計算機組成原理,只是從不同層次上解釋了計算機的工作原理,很可惜的是,我並沒有把知識穿起來。看了很多人的回答,大家也只是解釋了一部分問題,沒有完整的把計算機整個的抽象層次説清楚。在大學裏我看到了 Charles Petzold的《編碼 隱匿在計算機軟硬件背後的語言》,這部永不退色的計算機經典著作,為了講明白了這件事兒,今天我決定用自己簡略的話,回顧一下作者寫作的思路,用我的理解為大家講述計算機的工作原理。希望我能夠完成。

今天的計算機已經變得相當複雜,是有史以來人類創造的最複雜最精密的儀器,沒有之一,是二十世紀技術領域的“登峯造極之作”,計算機與生俱來的層次化體系結構,掩蓋了技術背後最本質的東西,現在已經很少有人去關心計算機最本質的工作原理,我希望能剖析計算機一層層‘“抽象”面紗,展現最本質的“計算”過程。基本的知識基礎是高中物理,高中數學。



第一節 計算器

下面回到高中課堂,我依稀記得在電磁學那一部分,講到了電磁繼電器,當時老師説,繼電器是很重要的發明,我打開物理課本,“什麼破東西嘛”,太簡單了,那時候覺得像繼電器這樣的發明沒什麼用。高中數學中也講到,布爾代數,簡單老説就是,與、或、非,而且教科書上説,布爾代數意義重大云云。下面問題來了,我只用繼電器能不是實現簡單的計算器?注意是“計算器”,而不是計算機,答案是肯定的,來,那就看看,如何用繼電器打造出一個”計算器“,進而打造出一台”計算機“

<img src="https://pic4.zhimg.com/50/1fc0540c5f07d5eebb68575ca70e2756_hd.jpg" data-rawwidth="991" data-rawheight="422" class="origin_image zh-lightbox-thumb" width="991" data-original="https://pic4.zhimg.com/1fc0540c5f07d5eebb68575ca70e2756_r.jpg">


ivregress截面 截面表什麼意思_bc

兩個繼電器串聯,點亮一盞燈,這算不算實現了“與”的操作呢?兩“真”為”真“

<img src="https://pic1.zhimg.com/50/5d53b4b54c655ee27b1e430136d5498c_hd.jpg" data-rawwidth="1018" data-rawheight="490" class="origin_image zh-lightbox-thumb" width="1018" data-original="https://pic1.zhimg.com/5d53b4b54c655ee27b1e430136d5498c_r.jpg">


ivregress截面 截面表什麼意思_5e_02

兩個繼電器並聯,點亮一盞燈,是不是實現了”或“的操作?一真為真

<img src="https://pic3.zhimg.com/50/0c6a6c0b33ad91d0c399d55fd662da97_hd.jpg" data-rawwidth="1081" data-rawheight="413" class="origin_image zh-lightbox-thumb" width="1081" data-original="https://pic3.zhimg.com/0c6a6c0b33ad91d0c399d55fd662da97_r.jpg">


ivregress截面 截面表什麼意思_5e_03

一個繼電器本身就可以實現”非“的操作

這樣一來,物理上的繼電器,和布爾代數,完美的融合起來,我把與或非門繼電器實現稱作”物理層“,每張圖右邊的符號表示,稱作”布爾邏輯層“,從”物理層“到”布爾邏輯層“是我們的第一層抽象,很簡單吧?(當然現代計算器從物理實現到邏輯實現,已經不再使用繼電器,而是在硅芯片上雕刻一個個的晶體管,但晶體管的數量絕對不會減少,這一點@丁旭 已經説得很明白)

接下來可能有人問,你整這些小兒科的東西,有什麼用呢?別急,看我慢慢展開!

我們知道,布爾代數是一種數學,既然是在一種數學,那麼存在數學運算啊,數學運算能用繼電器實現嗎,of course

<img src="https://pic4.zhimg.com/50/df0c9b68c81ac1122840e69ddbc64bae_hd.jpg" data-rawwidth="1245" data-rawheight="582" class="origin_image zh-lightbox-thumb" width="1245" data-original="https://pic4.zhimg.com/df0c9b68c81ac1122840e69ddbc64bae_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_04

一個或門,一個與非門,一個與門,按照圖示連在一起形成了一個最常見的運算,異或運算,”相同為假,不同為真“,那物理實現上怎麼做呢?請在大腦中想想怎麼連線,一共七個繼電器就可以實現,有了異或運算,我們就可以實現更復雜的運算,下面就和我們實現一台”計算器“直接相關了

<img src="https://pic1.zhimg.com/50/f895be5fdc8725ffc9f188eac4beef38_hd.jpg" data-rawwidth="976" data-rawheight="564" class="origin_image zh-lightbox-thumb" width="976" data-original="https://pic1.zhimg.com/f895be5fdc8725ffc9f188eac4beef38_r.jpg">


ivregress截面 截面表什麼意思_工作原理_05

一個異或門和一個與門,形成一個”半加器“,圖示下邊的符號表示一個半加器,這裏是新一層的抽象,從布爾邏輯運算到”計算器件“的抽象

<img src="https://pic2.zhimg.com/50/698a1a781324d261ae7a4e46bab7f75b_hd.jpg" data-rawwidth="1202" data-rawheight="577" class="origin_image zh-lightbox-thumb" width="1202" data-original="https://pic2.zhimg.com/698a1a781324d261ae7a4e46bab7f75b_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_06

有一個半加器,距離我們實現手工打造一個”計算機“還很遠,然而兩個半加器,一個或門,可以實現一個”全加器“,為什麼叫全加器呢?因為我們使用它可以實現一位加法的計算!(這裏是二進制,問題的題目,為什麼計算機能讀懂”0“和”1“,看到這裏是不是心頭一喜呢?)

<img src="https://pic4.zhimg.com/50/b0e15c8c39e3395716d600568027e8c1_hd.jpg" data-rawwidth="1097" data-rawheight="601" class="origin_image zh-lightbox-thumb" width="1097" data-original="https://pic4.zhimg.com/b0e15c8c39e3395716d600568027e8c1_r.jpg">


ivregress截面 截面表什麼意思_bc_07

有了一位”全加器“,我們實現8位加法的計算還遠嗎?當然不遠,8個全加器,按圖示相連,就可以實現8位加法計算(和我們在紙上進行加法運算很像,進位的操作很顯然。當然,這裏都是進行二進制加法),右下方是8位加法器的表示方式。

要是這會兒在19世紀,在電力革命的年代,我一定要親手打造一個計算器!

<img src="https://pic2.zhimg.com/50/abcf1616b6be0b25ca278b6e76fd1be5_hd.jpg" data-rawwidth="1164" data-rawheight="555" class="origin_image zh-lightbox-thumb" width="1164" data-original="https://pic2.zhimg.com/abcf1616b6be0b25ca278b6e76fd1be5_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_08

畫的比較簡陋,見過卡車上的按鈕嗎?上下撥動的那種,這是我穿越回19世紀站在專利局門口,闡述我”偉大”的發明,“我發明的計算器,有兩排輸入按鈕,每個按鈕上下撥動表示輸入的是0或者1,最下排是9個燈泡,燈泡的亮與滅,指示這一位是0,還是1,我的發明是劃時代的,可以把人類從繁雜的計算過程中解救出來...”

“什麼?就因為我的計算器不能實現減法運算兒拒絕我的專利申請,減法運算?減法運算,怎樣實現計算機的減法運算呢?”

計算機發展過程中,最重要的思想是“抽象”,一層層的抽象封裝了實現的細節,使的計算機開發人員更關注與邏輯的實現,相信有了我上面的表述,讀者應該能看懂下邊的抽象思想:

<img src="https://pic4.zhimg.com/50/c48d5ad5b23a47402bddfd269bd073a4_hd.jpg" data-rawwidth="700" data-rawheight="236" class="origin_image zh-lightbox-thumb" width="700" data-original="https://pic4.zhimg.com/c48d5ad5b23a47402bddfd269bd073a4_r.jpg">


ivregress截面 截面表什麼意思_bc_09

這個電路實現了把輸入的數據取反(0->1,1->0)

<img src="https://pic1.zhimg.com/50/efa7a48f599592511e7f632c3bbdc403_hd.jpg" data-rawwidth="546" data-rawheight="228" class="origin_image zh-lightbox-thumb" width="546" data-original="https://pic1.zhimg.com/efa7a48f599592511e7f632c3bbdc403_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_10

這是求補器的“抽象”

減法的邏輯實現我直接給出,相信讀者也應該能看明白

<img src="https://pic4.zhimg.com/50/4b9152b553157da23f057aa9c2306872_hd.jpg" data-rawwidth="669" data-rawheight="442" class="origin_image zh-lightbox-thumb" width="669" data-original="https://pic4.zhimg.com/4b9152b553157da23f057aa9c2306872_r.jpg">


ivregress截面 截面表什麼意思_工作原理_11

我還清楚的記得,在計算機組成這門課上,老師講述,原碼和補碼概念,“在計算機內部,正數的補碼是它本身,負數的補碼,記得取反加1“,為什麼取反加1呢?看看上邊的實現,計算機內部如何實現減法?有個取反操作,還有個進位操作,這不正是”取反加1“嗎?

下面從邏輯實現層,回到物理層,思考下,需要多少繼電器才能實現這樣的 ”小發明“,算了,嚇一跳吧?然而我們的計算機先驅康拉德·楚澤花費了十年心學,3000多個繼電器才早出一個計算機原型,所以,,,本着向先哲致敬的精神,讓我們在大腦中”打造出“一台計算機

<img src="https://pic1.zhimg.com/50/75447866082deb93fdac708c02304401_hd.jpg" data-rawwidth="686" data-rawheight="283" class="origin_image zh-lightbox-thumb" width="686" data-original="https://pic1.zhimg.com/75447866082deb93fdac708c02304401_r.jpg">


ivregress截面 截面表什麼意思_工作原理_12

”我的專利不僅僅能實現加法操作,也能實現減法操作,計算具有普遍性,具有劃時代的意義,可以把人類從複雜的計算中解救而出來...“

至此,我們實現了一個簡單的計算器實現,不難吧?然而這才只是萬里長征的第一步。

接下來我來説説,計算機是如何存儲信息的,這真是個費力活兒,在不太遙遠的過去,二十年前,計算機的存儲量還非常有限,我記得初中那會兒還沒有MP3,用磁帶聽歌,直到最近,存儲技術才有了長足的進步,當然這是後話。

第二節,計數器

人類的感官,聽覺,觸覺,味覺,視覺,感官器官接受外界的刺激,在大腦中留下神經信號,進而形成對“外部世界”的認識,那抽象的事物怎麼去認識呢?

電燈通電點亮燈泡,高中的物理知識解釋,足夠了。電可以讓物體運動,這個道理人人都懂。坐在回家的高鐵上,讓我想想一下高速列車是如何運動的:駕駛員按下通電按鈕,帶動電車引擎,電車引擎通過傳動裝置把牽引力傳給電車車輪,列車得以啓動。高速列車的動力系統也相當複雜,我不瞭解每一個實現的細節,但是我可以想想出電車引擎的工作原理,為什麼?因為這些都是實實在在的實物,看得見摸得着。那我想想出計算機的工作原理嗎?答案是不能,為什麼?因為計算機一層層的“抽象”,一個小小的物理器件上集成了上億的基本元器件,使計算機真正的工作原理是我們越來越遙遠。

下面還讓我們回到19世紀末,二十世紀初,那個激盪人心的電力革命的年代,讓我們去還原真實的技術實現過程。回到高中物理課堂

我們已經講解了如何去製造一個一台簡易的“計算器”,不知不覺下課了,這時我聽到一陣刺耳的下課鈴聲。電鈴和計算機有關係嗎?我直接上圖吧

<img src="https://pic4.zhimg.com/50/61105d437b8c7907fc082ca91298634b_hd.jpg" data-rawwidth="500" data-rawheight="500" class="origin_image zh-lightbox-thumb" width="500" data-original="https://pic4.zhimg.com/61105d437b8c7907fc082ca91298634b_r.jpg">


ivregress截面 截面表什麼意思_bc_13


注意看旁邊的那個金屬小錘子

<img src="https://pic1.zhimg.com/50/efbc42bb94d00e4ae7551b7e00780eb5_hd.jpg" data-rawwidth="570" data-rawheight="324" class="origin_image zh-lightbox-thumb" width="570" data-original="https://pic1.zhimg.com/efbc42bb94d00e4ae7551b7e00780eb5_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_14

電鈴的工作原理如上圖所示,大家想象下,電鈴的小錘子震盪起來敲打金屬蓋發出聲音的情形,duang,duang,daung,形象吧?(這種電路叫做震盪器)

<img src="https://pic1.zhimg.com/50/43689534f8a324e541ffe65a6faf82b2_hd.jpg" data-rawwidth="513" data-rawheight="168" class="origin_image zh-lightbox-thumb" width="513" data-original="https://pic1.zhimg.com/43689534f8a324e541ffe65a6faf82b2_r.jpg">


ivregress截面 截面表什麼意思_5e_15

振盪器是不是可以實現計數功能呢?交替的輸出0和1,哈哈,感嘆造物的神奇吧!

下面我們再來看一些神奇的電路,當初的先驅們是怎麼想到這些複雜而精緻的設計

<img src="https://pic4.zhimg.com/50/b6e75df9b37db978235fc44d5afaa343_hd.jpg" data-rawwidth="614" data-rawheight="216" class="origin_image zh-lightbox-thumb" width="614" data-original="https://pic4.zhimg.com/b6e75df9b37db978235fc44d5afaa343_r.jpg">


ivregress截面 截面表什麼意思_5e_16

閉上上方的電路,燈亮了

<img src="https://pic3.zhimg.com/50/4062212aa930d6a50c628f05d316bf3c_hd.jpg" data-rawwidth="582" data-rawheight="225" class="origin_image zh-lightbox-thumb" width="582" data-original="https://pic3.zhimg.com/4062212aa930d6a50c628f05d316bf3c_r.jpg">


ivregress截面 截面表什麼意思_5e_17

斷開上方的電路,燈依然在亮

<img src="https://pic1.zhimg.com/50/35e969d3c178a380f62b5cb8f6375270_hd.jpg" data-rawwidth="499" data-rawheight="199" class="origin_image zh-lightbox-thumb" width="499" data-original="https://pic1.zhimg.com/35e969d3c178a380f62b5cb8f6375270_r.jpg">


ivregress截面 截面表什麼意思_5e_18

閉合下方電路,燈滅了

<img src="https://pic2.zhimg.com/50/92b6e7737148a2a833630d7f9db307a7_hd.jpg" data-rawwidth="488" data-rawheight="187" class="origin_image zh-lightbox-thumb" width="488" data-original="https://pic2.zhimg.com/92b6e7737148a2a833630d7f9db307a7_r.jpg">


ivregress截面 截面表什麼意思_工作原理_19

斷開下方的電路,燈依然不亮

電路的奇特之處在於:同樣是在開關都斷開的狀態下,燈泡有時候亮,有時候不亮,當開關都斷開時,電路有兩個穩定狀態,這類電路叫做“ 觸發器”。(英國物理學家1918在工作中發現的)

觸發器電路可以保持信息,確切的説,可以“記憶”某些信息,他可以“記憶”那個開關先閉合。觸發器是一個大家族,大家要是有興趣可以去看相關資料。請記住一點!觸發器是用來“記憶”信息的,我再給出兩類常用的觸發器

<img src="https://pic4.zhimg.com/50/331750ce438f1fa6ece5722c7d963a31_hd.jpg" data-rawwidth="517" data-rawheight="247" class="origin_image zh-lightbox-thumb" width="517" data-original="https://pic4.zhimg.com/331750ce438f1fa6ece5722c7d963a31_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_20

這個叫做“D型觸發器”,具體實現如上圖,我們的表示一直都停留在很“底層”,一直都很關注實現的細節,隨着細節實現越來越多,我們需要上升到高一層的層次,更加關注功能的實現,而不是陷於細節實現的泥潭!(想一想,為什麼説,計算機具有與生俱來的層次結構)

數據端簡寫為D,時鐘端簡寫為Clk,功能表如下:

<img src="https://pic3.zhimg.com/50/eb33d69de15ff30f3405ae2d7cda3b0d_hd.jpg" data-rawwidth="248" data-rawheight="194" class="content_image" width="248">


ivregress截面 截面表什麼意思_bc_21

腦袋裏想象下,觸發器是一個很聽話的孩子,當clk端通電時,相當於告訴孩子,“孩子啊,你要記住我傳給的信息”,clk斷電時,孩子在自由自在的玩耍,完全不接受任何傳過來的指令,很形象,不是嗎?

在D型觸發器的基礎上實現了更復雜的功能,“ 邊緣觸發的D型觸發器”

<img src="https://pic1.zhimg.com/50/c935dbb047ae91a8ddd145011eeb7dee_hd.jpg" data-rawwidth="587" data-rawheight="242" class="origin_image zh-lightbox-thumb" width="587" data-original="https://pic1.zhimg.com/c935dbb047ae91a8ddd145011eeb7dee_r.jpg">


ivregress截面 截面表什麼意思_5e_22

“抽象”圖

<img src="https://pic4.zhimg.com/50/04533d2e1e81dfa82358c30247f7af19_hd.jpg" data-rawwidth="156" data-rawheight="91" class="content_image" width="156">


ivregress截面 截面表什麼意思_工作原理_23

again,抽象的思想,使我們脱離的細節實現(上圖),更加關注功能

<img src="https://pic2.zhimg.com/50/6f72ff93401485845b9fce471663e998_hd.jpg" data-rawwidth="220" data-rawheight="145" class="content_image" width="220">


ivregress截面 截面表什麼意思_ivregress截面_24

向上的箭頭,表示電信號從0到1變化的那一瞬間有效,再次在腦袋裏想象下,觸發器是一個很聽話的孩子,當clk從0->1變化時,相當於告訴孩子,“孩子啊,趕緊接住我給你的球,球在這裏指信息”,其他狀態下,孩子在自由自在的玩耍,完全不接受任何傳過來的指令。

有人問,説了這麼多,到底想幹什麼?好的,告訴你,用這些可以實現一個計數器,記得小孩子學數數嗎?我們要做的的就是要用機器來從0開始數數,真的嗎?恩,離這一步已經很近了,不信看下邊

<img src="https://pic2.zhimg.com/50/fd8fa89f2ff60f7515cc5893bff7ba9f_hd.jpg" data-rawwidth="369" data-rawheight="156" class="content_image" width="369">


ivregress截面 截面表什麼意思_5e_25


簡單的,把振盪器和觸發器相連

<img src="https://pic3.zhimg.com/50/232f79df6e2e612d67f3bc2bd779dafc_hd.jpg" data-rawwidth="518" data-rawheight="188" class="origin_image zh-lightbox-thumb" width="518" data-original="https://pic3.zhimg.com/232f79df6e2e612d67f3bc2bd779dafc_r.jpg">


ivregress截面 截面表什麼意思_工作原理_26


電平信號的變化

稍微擴展一下,實現更復雜的功能,應該能看明白吧

<img src="https://pic2.zhimg.com/50/65c84dbb7a2ad9ca691aff8494b9b587_hd.jpg" data-rawwidth="528" data-rawheight="179" class="origin_image zh-lightbox-thumb" width="528" data-original="https://pic2.zhimg.com/65c84dbb7a2ad9ca691aff8494b9b587_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_27

電平信號的變化(標上0和1)

<img src="https://pic4.zhimg.com/50/99066d4b5cb7db76c286e58255672644_hd.jpg" data-rawwidth="594" data-rawheight="253" class="origin_image zh-lightbox-thumb" width="594" data-original="https://pic4.zhimg.com/99066d4b5cb7db76c286e58255672644_r.jpg">


ivregress截面 截面表什麼意思_工作原理_28

嗨嗨,清醒下,我們得到了什麼?把上圖順時針旋轉90度,你發現了嗎

<img src="https://pic3.zhimg.com/50/ae382b0ce95c316b8ee811980d69b4e2_hd.jpg" data-rawwidth="354" data-rawheight="461" class="content_image" width="354">


ivregress截面 截面表什麼意思_ivregress截面_29

這不就是在計數嗎?用二進制的方式計數!

把8個觸發器連接在一起,然後放入一個盒子裏,構成了一個8位計數器,能從0數數到2^8-1,(0-255),這個計數器稱為“8位行波計數器”

<img src="https://pic3.zhimg.com/50/d8731896e52c98108fc9135065beb4ba_hd.jpg" data-rawwidth="477" data-rawheight="167" class="origin_image zh-lightbox-thumb" width="477" data-original="https://pic3.zhimg.com/d8731896e52c98108fc9135065beb4ba_r.jpg">


ivregress截面 截面表什麼意思_工作原理_30

現在,我們已經懂得如何繼電器來做加法、減法、計數了,這一件很有成就感的事兒,使用的技術也是100多年前就存在的技術。

第三節 存儲器

我想用繼電器打造一個存儲量為64K x 8的存儲陣列,我能實現嗎?這會兒可是在二十世紀初!如果我穿越回那個年代,一定會再次為我的“發明”申請專利,如果真是這樣,那計算機的發展史上會留下我的名字(呵呵,意淫一下),下面就看看我是如何實現我的“發明”吧

上節,我已經提到,觸發器可以“記憶”1位的信息

<img src="https://pic1.zhimg.com/50/9833ff487aa16bb2ce862a99723af1bb_hd.jpg" data-rawwidth="563" data-rawheight="244" class="origin_image zh-lightbox-thumb" width="563" data-original="https://pic1.zhimg.com/9833ff487aa16bb2ce862a99723af1bb_r.jpg">


ivregress截面 截面表什麼意思_5e_31

就是上圖這個樣子,我們把它抽象成:

<img src="https://pic3.zhimg.com/50/49416d79c4556296808e73277b631ab0_hd.jpg" data-rawwidth="227" data-rawheight="137" class="content_image" width="227">


ivregress截面 截面表什麼意思_5e_32

我們把上圖稱作“1位鎖存器”,想一想,兩個輸入線和一個輸出線都是什麼意思,我上節已經解釋過,來、來、來,想一想那個淘氣的小朋友。

有了“1”,那麼距離“100000”還會遠嗎?無非就是如何組織n個“1”,“抽象”的量級提升的過程

<img src="https://pic4.zhimg.com/50/fdb0e71298af7f53f4265cd1c601337c_hd.jpg" data-rawwidth="736" data-rawheight="337" class="origin_image zh-lightbox-thumb" width="736" data-original="https://pic4.zhimg.com/fdb0e71298af7f53f4265cd1c601337c_r.jpg">


ivregress截面 截面表什麼意思_工作原理_33

這是8位鎖存器

<img src="https://pic2.zhimg.com/50/e6001e7cee4fee19efb3f0e93b29c4bf_hd.jpg" data-rawwidth="490" data-rawheight="153" class="origin_image zh-lightbox-thumb" width="490" data-original="https://pic2.zhimg.com/e6001e7cee4fee19efb3f0e93b29c4bf_r.jpg">


ivregress截面 截面表什麼意思_5e_34

簡寫成這種形式

再來看兩個神奇的發明,或許你也會為發明者神奇的構思所折服

<img src="https://pic3.zhimg.com/50/a1b5b1067aff3bb66f5e7c4e44e41664_hd.jpg" data-rawwidth="590" data-rawheight="253" class="origin_image zh-lightbox-thumb" width="590" data-original="https://pic3.zhimg.com/a1b5b1067aff3bb66f5e7c4e44e41664_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_35

我想製作出這麼一個元器件,他要實現這些功能。想想一下,某一天,你成了一個名人,每天前來拜訪的人絡繹不絕,今天呢,來了八個人,但是你時間有限,只能見一個人,那就讓5號來吧(把拜訪者編號,0-7),5號拜訪者帶來了自己的禮物(0或者1的信息)。看圖,左邊的三根線表示拜訪者的地址(當然是二進制編碼),000,001,010,011,100,101,110,111,5號就是101,這時候呢,我只需要把S0和S2通電,那麼5號拜訪者就進來了,獻上自己的禮物(1位的信息)。

怎麼實現這個功能呢?有興趣的自己去研究下面實現,請記住,我們現在討論的內容抽象的層次已經不是最最底層的實現了,而是更加關注於邏輯器件實現的功能

<img src="https://pic1.zhimg.com/50/5ce1334ec94cbd23fe8d2d239c75b87f_hd.jpg" data-rawwidth="578" data-rawheight="463" class="origin_image zh-lightbox-thumb" width="578" data-original="https://pic1.zhimg.com/5ce1334ec94cbd23fe8d2d239c75b87f_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_36

這叫“8-1選擇器”

反過來,我有一封信需要送出去,這封信的內容是0或者1,現在我也有8個快遞小哥可以選擇,編號分別是000,001,010,011,100,101,110,111,我讓誰去給我送信呢?那就還是5號吧,於是我把地址分別設置為101,5號小哥就去給我送信了,給出具體實現,有興趣的自己去看吧

<img src="https://pic1.zhimg.com/50/c415fae875bae2918b3bddb7f29ffef7_hd.jpg" data-rawwidth="437" data-rawheight="504" class="origin_image zh-lightbox-thumb" width="437" data-original="https://pic1.zhimg.com/c415fae875bae2918b3bddb7f29ffef7_r.jpg">


ivregress截面 截面表什麼意思_工作原理_37

這個電路名兒叫做“3-8譯碼器”

有了8-1選擇器和3-8譯碼器,就可以製作出一個8位存儲器了

<img src="https://pic1.zhimg.com/50/f62f1d4cbbe509c9c738fd1d5425468d_hd.jpg" data-rawwidth="674" data-rawheight="488" class="origin_image zh-lightbox-thumb" width="674" data-original="https://pic1.zhimg.com/f62f1d4cbbe509c9c738fd1d5425468d_r.jpg">


ivregress截面 截面表什麼意思_工作原理_38

again,把複雜的電路實現,抽象成簡單的符號表示

<img src="https://pic3.zhimg.com/50/fd0390995d3b7f0066a49de6d3c8fab7_hd.jpg" data-rawwidth="430" data-rawheight="171" class="origin_image zh-lightbox-thumb" width="430" data-original="https://pic3.zhimg.com/fd0390995d3b7f0066a49de6d3c8fab7_r.jpg">


ivregress截面 截面表什麼意思_工作原理_39

讀/寫存儲器,通常叫做隨機訪問存儲器或者叫RAM,RAM可存儲8個單獨的1位數據

如何得到16 X 1的RAM呢?相信大家都能想到,用2個 8 X 1的RAM,我彷彿回到了《計算機組成》的課堂,讓我再來做一次作業吧

<img src="https://pic2.zhimg.com/50/bfb5aec48893487c50feee07b5be62ee_hd.jpg" data-rawwidth="530" data-rawheight="357" class="origin_image zh-lightbox-thumb" width="530" data-original="https://pic2.zhimg.com/bfb5aec48893487c50feee07b5be62ee_r.jpg">


ivregress截面 截面表什麼意思_5e_40

簡寫如下:

<img src="https://pic2.zhimg.com/50/733d785f5c7131b1860d8e80d346472d_hd.jpg" data-rawwidth="446" data-rawheight="196" class="origin_image zh-lightbox-thumb" width="446" data-original="https://pic2.zhimg.com/733d785f5c7131b1860d8e80d346472d_r.jpg">


ivregress截面 截面表什麼意思_bc_41

這種方式或許正確,但是使用了三根地址線,兩根數據線,能不能使用4根地址線1根數據線呢?

加一個2-1選擇器不就行了嗎?(設計一個2-1選擇器,這會兒應該不算什麼難事兒)

<img src="https://pic4.zhimg.com/50/5b389368380349bad23c2d954426ffaa_hd.jpg" data-rawwidth="557" data-rawheight="539" class="origin_image zh-lightbox-thumb" width="557" data-original="https://pic4.zhimg.com/5b389368380349bad23c2d954426ffaa_r.jpg">


ivregress截面 截面表什麼意思_bc_42

再次用符號簡寫:

<img src="https://pic4.zhimg.com/50/15f7d75b93ab9fd1a53b56f586386889_hd.jpg" data-rawwidth="461" data-rawheight="198" class="origin_image zh-lightbox-thumb" width="461" data-original="https://pic4.zhimg.com/15f7d75b93ab9fd1a53b56f586386889_r.jpg">


ivregress截面 截面表什麼意思_5e_43


回到我們的出發點,怎麼得到64K X 8的存儲陣列呢?

無非就是努力提高8位鎖存器的集成程度嘛,我可以想象,讀者看到這裏,腦子裏全是密密麻麻的的連線,或許你還一時想象不到連線的方式,但是看到這裏,64K X 8的存儲陣列一定能用某種方式實現,對吧?雖然沒有實現其電路圖,但我也可以説,我理解了存儲器工作原理,(你懂了嗎?)。

<img src="https://pic1.zhimg.com/50/1b19ffd075754b9c0c3d5fa8bfef0230_hd.jpg" data-rawwidth="544" data-rawheight="188" class="origin_image zh-lightbox-thumb" width="544" data-original="https://pic1.zhimg.com/1b19ffd075754b9c0c3d5fa8bfef0230_r.jpg">


ivregress截面 截面表什麼意思_5e_44

1024 X 8RAM的符號表示,2的16次方,即64K,地址線有16根,數據線有8根

為了申請我的專利,我需要做出一個機器的外部殼子,和第一節中的“計算器”一樣,把這個機器的殼子把我所有實現的過程封裝起來,形成一個“黑盒”,只保留幾個外部的接口(也就是那幾根數據線,一定要記得他們的功能),我要做成的外部盒子是這個樣子

<img src="https://pic4.zhimg.com/50/490b053886294f7543b31941a5d2d0d0_hd.jpg" data-rawwidth="626" data-rawheight="260" class="origin_image zh-lightbox-thumb" width="626" data-original="https://pic4.zhimg.com/490b053886294f7543b31941a5d2d0d0_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_45

上一排的對應16根數據線,下一排有8根數據線,這個不用解釋,相信把上文看完的都能明白什麼意思,takeover這個按鈕表示是否使得當前控制面板處於“激活狀態”,也就是説,這個開關的作用是確定由控制面板還是又外部所連接的其他電路(從來沒説過,沒有連接外部其他電路,或者想象下,我這個機器殼子外面有一排的針孔,外部電路可以接進去,想想電腦機箱後邊的針孔,就是這個意思,Soga)來控制。如果有其他電路相連。這時候takeover為 0(圖示狀態),此時存儲器由其他電路接管,控制面板上的其他開關不起作用,當takeover為1 時,控制面板將重新獲得對存儲器的控制能力。

最後還是給出電路實現

<img src="https://pic4.zhimg.com/50/f3282dc784fd325ac9a32d0f0dc9e642_hd.jpg" data-rawwidth="655" data-rawheight="471" class="origin_image zh-lightbox-thumb" width="655" data-original="https://pic4.zhimg.com/f3282dc784fd325ac9a32d0f0dc9e642_r.jpg">


ivregress截面 截面表什麼意思_工作原理_46

想一下,機器殼子後面的針孔連那裏,控制面板的開關又連接哪裏?

<img src="https://pic2.zhimg.com/50/7381d966f2b1c58ea11ed73b09e92017_hd.jpg" data-rawwidth="600" data-rawheight="372" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic2.zhimg.com/7381d966f2b1c58ea11ed73b09e92017_r.jpg">


ivregress截面 截面表什麼意思_工作原理_47

簡化的圖示,是不是又用到“抽象”的思想呢?

一個辛辛苦苦裝滿65,536字節(8位為一個字節,字節編碼請去參考ASCII編碼)珍貴數據的64K X 8的RAM陣列,如果斷電,會發生什麼事情?首先電磁鐵會因為失去電流失去磁性,隨着“梆”的一聲,金屬片講彈回原位,RAM中的所有數據將如風中殘燭一般消失在黑暗之中,所以,RAM也成為“易失性”存儲器。

那我一手打造的64K X 8的存儲陣列,需要多少繼電器呢?答案是是500W左右,是不是驚訝到恐怖呢?誰會沒事兒造出這麼個恐怖的怪獸?(100年後的今天,用二極管,三極管,集成這麼多元器件的芯片,連指甲蓋的大小都不到,感嘆人類技術的進步吧)。

我穿越回二十世紀初,再次站在專利局的門口,為我這項“偉大的發明”申請專利,瑞士專利局的愛因斯坦會因此嚇尿嗎?世界上最聰明的大腦,能理解“黑箱”背後發生了什麼嗎?

第四節 自動操作

説了這麼多電子線路的知識,我相信的我的講述方式,大家都是能看懂的,前面所寫的,其實只是為大家講述一件事兒,“把電子元器件內部實現展開”,現有的一個個電子元器件,現在就是一個個小工具(把內部實現封裝起來,保留外部接口,外部接口,就是那一根根地址線,數據線,和其他開關)、原材料。那我們現在看一看現在都有那些原材料呢?

計算器:一個會算數的小朋友,每次你把要進行計算的兩個數給他,拍一下小朋友的頭,小朋友幫我算一下吧,他會把計算的結果給你,沒有一點誤差,計算速度很快,並且樂此不疲。

計數器:一個一直在數數的小朋友

存儲器:辛辛苦苦裝滿了64K 字節的箱子

譯碼器:《唐伯虎點秋香》中有個代號,9527,一個數字,你説它什麼意思呢?如果,我“規定”9527指的是唐伯虎,讓譯碼器來做這件事,譯碼器你把9527給我帶過來(地址線用2進製表示9527,9527的二進制是多少呢?),這時候譯碼器“很聽話”的把唐伯虎叫過來。(在這裏,機器“理解了”人類的語言嗎?)

有了這些原材料,我們就可以着手打造一台computer了,我們的工作才剛剛開始,請讀者保持耐心,我們最終要實現的是一台通用計算機,這台“先進的”機器可以使加減法的過程自動化,is that unbelievable?這台機器可以解決所有能有加、減法處理的問題,而事實上現實中的許多問題確實可以用加法與減法來解決。

讓我來回顧一下自己的教育經歷。從咿呀學語之後,幼兒園開始,我們就要開始一生的學習了,小學的數學課現在還叫不叫“算數”?剛開始,我們扳着自己的手指數數“1,2,3,4,5,上山打老虎...”,學會數數之後呢?老師先教我們加法與減法,那麼乘法和除法呢?我依稀記得,是用加法和減法來實現的,對嗎?

加法與減法,可以從底而上,構建更加複雜的算數系統,以至於,微積分也是建立的基本的算數系統之上,我還清楚的記得泰勒公式帶給我的震撼,記得第一次見到牛頓迭代法時的情景。

<img src="https://pic1.zhimg.com/50/41bbe01adc4e96f1c24c8287a3c02fcb_hd.jpg" data-rawwidth="719" data-rawheight="103" class="origin_image zh-lightbox-thumb" width="719" data-original="https://pic1.zhimg.com/41bbe01adc4e96f1c24c8287a3c02fcb_r.jpg">


ivregress截面 截面表什麼意思_5e_48

最美的數學公式之一,不解釋為什麼了,參考大學微積分

假如,假如我們已經實現一台可編程的最原始的執行加減法運算的“計算機”,如何計算出e的值呢?

想明白這一切,就需要我們瞭解“自動操作”的過程,瞭解程序的本質什麼?編寫程序的過程就像堆多米諾骨牌,辛辛苦苦,小心翼翼堆了半天,只為了那一下推到骨牌的快感!下面這一部分內容較難,請讀者一定保持耐心,我會試着按我自己的理解講清楚,如果我有理解不對之處,歡迎大家指出來,討論改正

新紀元-能接受“指令”的計算器

有人問我,真的可以用上述提供的那些原材料(計算器、計數器、存儲器、譯碼器)造出一個計算機嗎?就像維克多·弗蘭肯斯坦組裝怪物一樣,當一切都已經就緒,看着我們一手打造出的龐大的怪物,小心翼翼的通上電,“醒來吧,孩子”,就像給他賦予生命一般,這些破銅爛鐵奇蹟般的甦醒過來,按照我給他的指令,完成我想要的工作,真的,人世間沒有比這樣的工作更讓人神往了,你能理解《模擬遊戲》中Turing對克里斯托弗的一往情深嗎?至少他打動了我的心。

扯多了,我可以很明確的告訴你,只用那些原材料確實可以打造出一台計算機,並且歷史上確實有人實現了!是誰?馮諾依曼?圖靈?很遺憾地告訴你,no。主人公的名字,我前邊已經提到了,他叫康拉德·楚澤,1935年還是一個工科學生的他,在位於柏林的家中打造出一個可編程的計算機,一共花了3000多個繼電器。

接下來讓我們穿越回到1935左右,讓我們跟隨“主人公”的思路,嘗試打造出一台“計算機”。

還記得上小學時,你學完數數,學完加減法之後,大人們常常考考你的題目是什麼?“你給我算一下從1一直加到100吧”,問題是,我能用機器代替我來算數嗎?哦哦,簡單,我的原材料裏不是有“加法器”了嗎?,稍作修改就行,好,看看我的設計

<img src="https://pic4.zhimg.com/50/8415ede484dafc8786a844425824df26_hd.jpg" data-rawwidth="506" data-rawheight="377" class="origin_image zh-lightbox-thumb" width="506" data-original="https://pic4.zhimg.com/8415ede484dafc8786a844425824df26_r.jpg">


ivregress截面 截面表什麼意思_5e_49


拿一個8位的加法器和一個8位的鎖存器,按上述方式相連,每次我們可以通過加法器的開關輸入我們要算的數(當然要輸入的數是0-255之間,計算的結果也是0-255之間,在這裏可以先計算1-10的和),我們小心翼翼的撥動開關,最後下方的一排指示燈顯示計算的結果。簡單吧(這個器件稱作累加器)可是我一不小心輸錯了一個數怎麼辦?只有重新來算,完全再來一遍,好麻煩啊,有沒有可以改進的方式呢?我突然想到,不是有存儲器嘛,可不可以把我要計算的數據先存入存儲器,再通過讀取存儲器的內容,把數據傳送到加法器,執行運算,最後顯示結果。

good idea!具體該怎麼做呢,我給出一種實現方案

<img src="https://pic3.zhimg.com/50/c84dc8648869aa61ad0e5edd0b85ed1a_hd.jpg" data-rawwidth="633" data-rawheight="513" class="origin_image zh-lightbox-thumb" width="633" data-original="https://pic3.zhimg.com/c84dc8648869aa61ad0e5edd0b85ed1a_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_50

一個振盪器(想想duang,duang,duang的電鈴),16位計數器(我們的存儲器容量不是64K X 8麼,需要16根地址線),一個64K X 8的RAM(RAM連接控制面板,控制面板可以輸入數據,還記得控制面板的takeover按鈕是做什麼用的麼?),一個8位加法器和一個8位鎖存器。

讓我們閉上眼睛,來想一想,這是怎麼工作的。首先,請清零開關,然後閉合控制面板上的takeover按鈕,這時候控制面板接管了存儲器,如果要算的有100個數,我們一次調整存儲器的地址線和數據線,把數據存入0000h-0063h的地址空間(這一部分你明白了嗎,該怎麼操作控制面板呢?上述地址空間用16進製表示)。數據輸入完了,我們斷開控制按鈕(takeover鍵),這時候控制面板失去對存儲器的控制,斷開清零開關,這時候,計數器開始工作,0000h,電信號傳入存儲器的地址線,存儲器呢,是一個忠實的倉庫保管員,來,我看看你要取什麼東西,他接過傳來的地址,哦原來要0000h盒子內的東西啊,好,你拿走吧,(0000h“盒子”內的東西就是剛才輸入的第一個數),第一個數據傳入到加法器,加法器小朋友一看,好了,你和自身相加,這不還是你自己嗎?他把計算結果給了鎖存器,鎖氣器把計算的結果放入一個臨時的盒子內。經過一點時間(很短)計數器變成0001h,還是和剛才一樣,計數器小朋友把自己的數給存儲器管理大叔,大叔根據傳過來的數,把取出的數據傳給加法器小朋友,加法器小朋友執行加法運算,把得到的結果給鎖存器。他們是如此的兢兢業業,樂此不疲,“機械式”的完成自己的任務,沒有一點兒怨言。

哎,計算的結果是什麼?我怎麼看到指示燈在閃爍,計算的結果哪裏去了?哦哦哦,計數器小朋友實在是太敬業了,根本沒有辦法讓他停止工作,當他數到FFFFh之後又從0000h開始數數了。

還有這樣的計算也太機械了,功能也實在是太有限了,要是我想把100個數,分成50組,計算每一組的和,這又該怎麼做到呢?聰明的讀者你也動動腦袋想一想,怎麼做到呢?

楚澤看到這裏也許和咱們一樣皺緊眉頭,怎麼做呢,怎麼做呢?該怎樣解決這個問題呢?這時候或許突然迸發出“革命性”的想法,把運算的結果存回到RAM陣列中不行嗎?這樣一來,就可以在適當的時候用RAM陣列 的控制面板來檢查運算結果(按下takeover),為了實現這個目的,在控制面板上加一排顯示燈。eureka!

改變之後的連線圖

<img src="https://pic2.zhimg.com/50/8c1058d66dbed66132e9a696c7bbd67d_hd.jpg" data-rawwidth="574" data-rawheight="476" class="origin_image zh-lightbox-thumb" width="574" data-original="https://pic2.zhimg.com/8c1058d66dbed66132e9a696c7bbd67d_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_51

這裏略去了一部分,包括振盪器和清零開關。這樣做是很好,但是問題來了,怎樣控制RAM寫入信號呢(何時存入RAM,把結果存在什麼位置?)

假如我有一個這樣的計算任務要完成:首先對三個數進行求和,然後對兩個數進行求和,最後再對三個數進行求和,圖示如下

<img src="https://pic3.zhimg.com/50/533ffcfdeb6fc903e399114eb3882744_hd.jpg" data-rawwidth="425" data-rawheight="343" class="origin_image zh-lightbox-thumb" width="425" data-original="https://pic3.zhimg.com/533ffcfdeb6fc903e399114eb3882744_r.jpg">


ivregress截面 截面表什麼意思_工作原理_52

圖中用一小段連續的紙條(標記上連續的格子)表示一小段存儲器,格子內表示存的內容。怎樣使自動加法器為我們完成這項任務呢?我們不能期待向RAM陣列中輸入一組數,然後自動加法器自動完成任務,自動加法器怎樣“理解”我們交給它的任務,它怎麼“知道”我們要他們幹什麼?

為了完成這個任務,我們需要用一些數字代碼來標示加法器需要完成的每一項工作:加載(Load)、相加(Add)、保存(Save)、終止(Halt)

有了上述的指令,我們就可以命令計算器來工作了(暫時不去了解如何實現),對於上述的任務,可以表示如下:(1)把0000h地址處的內容加載到累加器(2)把0001h地址處的內容加到累加器(3)把0002h地址處的內容加到累加器(4)把累加器中的內容存儲到0003h地址處(5)把0004h地址處的內容加載到累加器(6)把0005h地址處的內容加到累加器(7)把累加器中的內容存儲到0006h地址處(8)把0007h地址處的內容加載到累加器(9)把0008h地址處的內容加到累加器(10)把0009h地址處的內容加到累加器(11)把累加器中的內容存儲到000Ah地址處(12)命令自動加法器停止工作

有了這些指令代碼,那麼這些指令代碼存放在哪裏呢?得了,不去想了,簡單粗暴的解決方式就是在加一個RAM,一個RAM存放數據,另一個RAM存放數據對應位置的操作符(也就是上文指定的那些代碼),再次對我們的機器進行改造,改造後的結果如下

<img src="https://pic4.zhimg.com/50/4c87b392ea539c41eed286cb192596b0_hd.jpg" data-rawwidth="580" data-rawheight="464" class="origin_image zh-lightbox-thumb" width="580" data-original="https://pic4.zhimg.com/4c87b392ea539c41eed286cb192596b0_r.jpg">


ivregress截面 截面表什麼意思_5e_53

觀察要仔細啊,數據的RAM即可以通過Control Panel控制面板進行輸入,也可以接受外部的數據,而存儲代碼RAM只能通過控制面板寫入!

那麼往存儲代碼的RAM裏寫入什麼內容吧?機器又不認識load、store、add、halt這些單詞。既然機器不認識,我就讓他們認識!解決方式,就是編碼,其實兩位信息編碼足夠操作碼,代碼Load(加載),10hStore(保存),11hAdd(加法),20hHalt(停止),FFh

這樣一來,存儲代碼的那個RAM裏邊要存的內容就一目瞭然了

<img src="https://pic4.zhimg.com/50/1f7b442f1eac20bb008f4f575ec32254_hd.jpg" data-rawwidth="332" data-rawheight="363" class="content_image" width="332">


ivregress截面 截面表什麼意思_工作原理_54

看到這裏,讀者有疑問嗎?還是我最早提出的那個問題,機器是如何“理解”人類的語言的,我雖然把要操作的指令用0和1進行編碼,但你把編碼之後的內容拿給我們一手打造的這台機器,他還是“不明白”什麼意思,去進行何種操作啊!我們轉來轉去又轉回最初的起點,你讓冷冰冰的機器去“理解”人類的指令,無異於天方夜譚,機器就是機器,永遠也不可能具有思維,當初,我在這裏也是困擾好久,哦,原來如此!

我已經把答案告訴你了,機器就是機器,永遠也不可能具有思維

我不管你有沒有思維,你必須完成我給你的任務,你把上述的任務算個結果出來,這一點兒或許能辦到,嘻嘻

<img src="https://pic4.zhimg.com/50/e7c77b1509aa2d103645b5517788422e_hd.jpg" data-rawwidth="613" data-rawheight="650" class="origin_image zh-lightbox-thumb" width="613" data-original="https://pic4.zhimg.com/e7c77b1509aa2d103645b5517788422e_r.jpg">


ivregress截面 截面表什麼意思_bc_55


為了體現Load和Add命令,我的機器內部又進行了部分改變,你看出差別來了嗎?

其實上述有一小部分沒有連線。again,閉上眼睛,跟我來想想機器執行的過程,可愛的小朋友們和敬業的大叔們又來了。計數小朋友把數據給兩個RAM的倉庫管理員,一個取出數據,一個取出指令。數據傳給累加器和2-1選擇器(這是個什麼鬼)?數據到了2-1選擇器小朋友的面前,發現了一道門,門上寫着,“此山是我栽,此樹是我開,要想從此過,留下買路財”,小朋友,讓我過去吧,叔叔給你糖吃,2-1選擇器小朋友説,“我只有一條路,你們兩個人,我讓誰通過呢?”(圖中,2-1選擇器接收了兩組數據),就在這時候,2-1選擇器小朋友,收到了一條指令,這條指令來自哪裏呢?哦哦,剛才管代碼的RAM大叔,取出指令(10h或者,11h或者20h或者FFh),他把指令交給“指令解析器”(圖中沒有畫)指令解析器負責把信送給2-1選擇器、RAM、計數器的指令接收端(也就是2-1選擇器的S,RAM的W等,在這裏稱為控制信號,控制信號決定機器中某些部件是否工作或者決定某些期間如何工作。例如,如果代碼RAM陣列輸出是load指令,2-1選擇器S端收到0,如果代碼RAM陣列輸出是Add,2-1選擇器S端收到1,操作碼是指令Store時,數據RAM陣列的W收到1。實現“指令解析器”很困難嗎?想一想第二節中是如何送信的,3-8譯碼器,譯碼器實現只是一種方式,當然也可以用邏輯門來實現、你明白了嗎?),2-1選擇器小朋友收到了0,也就是要執行Load操作,8位鎖存器把臨時信息保存起來。然後計數器小朋友又開始數到了0001h,這些勤勞的小朋友和勤勞的大叔又繼續工作了...

用這種方式,我終於實現了我的想法,這真是一件值得高興的事兒,我要好好休息下,等等,休息之前,順便擴展一下我們的機器,讓它也能運算減法。好簡單,增加一條指令不就行了?Subtract(減)

<img src="https://pic1.zhimg.com/50/aa008dade8ed6fe728a7b082c9c3c6a3_hd.jpg" data-rawwidth="312" data-rawheight="183" class="content_image" width="312">


ivregress截面 截面表什麼意思_5e_56

相應的,機器內部實現再改造下,增加一個取反器

<img src="https://pic3.zhimg.com/50/baeeb55749d75c08c0c93dcf23f0d6b1_hd.jpg" data-rawwidth="670" data-rawheight="674" class="origin_image zh-lightbox-thumb" width="670" data-original="https://pic3.zhimg.com/baeeb55749d75c08c0c93dcf23f0d6b1_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_57

佈置一道作業題,取反器的那根控制信號線接在哪裏?

數據“流水”

我們從繼電器打造出門電路,進而實現加法器,計數器,存儲器,都是為了向我們的那個終極目標一步步前進。這就像點亮科技樹的過程,一步步提高,直到實現我們的終極目標--一台可編程的通用計算機,那現在來看看,我們的科技樹點亮到哪一步了,現在我們親手打造的“能讀懂人類指令的計算器”,離我們的目標還有多遠?

來看看我們這台機器能不能完成我們想要完成的任務。假設現在要把56h和2A相加,然後再從中減去38h,結果是多少呢?不是有指令了嗎?來,設置指令,讓機器去完成

<img src="https://pic3.zhimg.com/50/232a90291d342f0f880f3e6dcbeb0533_hd.jpg" data-rawwidth="526" data-rawheight="238" class="origin_image zh-lightbox-thumb" width="526" data-original="https://pic3.zhimg.com/232a90291d342f0f880f3e6dcbeb0533_r.jpg">


ivregress截面 截面表什麼意思_5e_58


由於指令和數據是分開存儲的,我們分別通過控制面板在RAM中輸入數據,啓動機器,機器就“神奇”的計算出結果,可以用個控制面板來查看計算的結果。

如果我的計算任務擴大一些,算一算1W個數的和吧?啊?10000個數,這時候我可以想象,站在台機器前面的“主人公”滿臉苦逼的表情,我們小心翼翼的輸入這指令,Load ...,Add ...,Add ...,Add ...,......Store ...。然後我們再輸入數據,這真是個體力活兒啊!當我們終於把這一切都完成之後,啓動機器,Come on,baby!計算吧

讓我們再次閉上眼睛,想象機器工作的情形,計數器多麼像一顆跳動的“心臟”,過一段時間發出一次“心跳”,存儲器收到心跳的脈衝,從此中取出數據,數據被傳送到累加器“加工廠”等待處理,要通過一道道的“門”(2-1選擇器),最後會傳到存儲器。每每想到這裏,我不禁想起在歡樂谷水上漂流的過程,穿過一道道門,經過一間間屋子,每經過一道關卡,都可能被水淋到(數據被加工),最後轉了一圈回到起點,機器內部執行的過程,就是數據坐在船上“流水”的過程,不是嗎?

讓我們來看看機器算出來的結果,這可真是一個激動的時刻,辛辛苦苦撥了半天開關,現在要見證奇蹟了。“咦”?怎麼結果不對,這數值也太小了!

哦,原來如此,我的累加器只能算8位的數據,讓我去安靜的哭一會兒去。

你可能想到,把兩個8位的加法器連在一起構成一個16位的設備,這是一種解決方案,但是,還有代價更小的解決辦法。

比如要計算76ABh+232Ch,最終結果是99D7h

<img src="https://pic2.zhimg.com/50/87f0ddf5ac90750f5189a348e4d20f19_hd.jpg" data-rawwidth="123" data-rawheight="82" class="content_image" width="123">


ivregress截面 截面表什麼意思_ivregress截面_59

我們可以把高低位分開來算

<img src="https://pic3.zhimg.com/50/9c5acf7260d0dae4cdfba7b212890b50_hd.jpg" data-rawwidth="159" data-rawheight="114" class="content_image" width="159">


ivregress截面 截面表什麼意思_工作原理_60

低位加法

<img src="https://pic2.zhimg.com/50/94b774c728adf104ff28d0b647acee25_hd.jpg" data-rawwidth="137" data-rawheight="99" class="content_image" width="137">


ivregress截面 截面表什麼意思_bc_61

高位加法

最後把計算的結果寫回存儲器

<img src="https://pic2.zhimg.com/50/76fe75c916e3139c6ba4beda8fd6464a_hd.jpg" data-rawwidth="629" data-rawheight="301" class="origin_image zh-lightbox-thumb" width="629" data-original="https://pic2.zhimg.com/76fe75c916e3139c6ba4beda8fd6464a_r.jpg">


ivregress截面 截面表什麼意思_5e_62

D7h被寫入地址0002h處,99h被寫入地址0005h處

這是很理想的狀況,因為,在上述的例子中把高低位分開計算,低位計算恰巧不存在進位的情況。如果要把76ABh和236Ch這兩個16位的數相加該怎麼做?ABh+6Ch=117h;1h+76h+23h=9Ah。計算的結果為9A17h,怎麼解決這個問題呢?可能有讀者已經想到了,加一個進位鎖存器(存儲進位)不就行了?那我再問一句,“那我們的指令碼是不是需要擴展一下呢?怎麼使得譯碼器來觸發讀取進位的信號呢?”讀到這裏,讀者也應該和我一樣,我們現在不關心具體實現細節,一定會有某種邏輯門的組合來實現,對吧?下邊我給出擴展的指令碼(也叫作操作碼)

<img src="https://pic2.zhimg.com/50/290ff25fd013817144e290055fab5ad2_hd.jpg" data-rawwidth="502" data-rawheight="251" class="origin_image zh-lightbox-thumb" width="502" data-original="https://pic2.zhimg.com/290ff25fd013817144e290055fab5ad2_r.jpg">


ivregress截面 截面表什麼意思_工作原理_63

上述指令中,增加了一個“進位加”(Add with Carry)和“借位減”(Subtract with Borrow)有了他們,就可以極大的擴展加法器的功能,而不僅僅侷限於8位數據的運算了,可以對16位,24位,32位,40位數進行加、減法操作了!比如對兩個32位數7A892BCDh和65A872FFh進行加法運算。僅僅需要1條Add指令和3條Add with Carry指令

<img src="https://pic3.zhimg.com/50/fcb0b3fcf56a33e3636a7d46b9c0160a_hd.jpg" data-rawwidth="590" data-rawheight="492" class="origin_image zh-lightbox-thumb" width="590" data-original="https://pic3.zhimg.com/fcb0b3fcf56a33e3636a7d46b9c0160a_r.jpg">


ivregress截面 截面表什麼意思_bc_64

我們通過增加操作碼指令擴展的我們的“計算器”,在通往終極目標的路上又邁出了堅實的一步,“數據流水”的方式也確實也可按照我們的意願實現一些計算任務,但是,對於計算1W個數相加之類的任務,總不能期待一條條的輸入指令吧?

讓我們看看問題出在哪裏。第一,對於上圖來説,保存計算結果的存儲單元地址不連續。第二。當前設計的自動加法器不允許在隨後的計算中重複使用的前面的中間結果,一旦我們把計算的結果寫回存儲器,我們就無法再次讀取它的值了。

產生上述情況的原因就在於,我們構造的自動加法器,代碼的存儲和數據的存儲是同步的、順序的,並且只能從0000h開始順序尋址,直至停機。

要解決這個問題,需要對我們設計的加法器做一個根本性且程度極大的改變。我想幾十年前第一代的計算機的設計者康拉德·楚澤,Turing等人一定會為這個問題寢食難安,因為解決了這個問題,才可以實現真正意義上的“自動操作”,這個問題也是計算器計算機最根本的區別。

沒想到會有這麼多人點贊,謝謝你們的鼓勵,我們的萬里長征已經看到勝利的曙光了,馬上就要迎來激動人心的時刻了,請保持最後的耐心。

數據“轉圈圈”再次看一下我們設計的機器,代碼的存儲和數據的存儲是同步的、順序的,並且只能從0000h開始順序尋址(計數器小朋友在一次計數,告訴存儲器管理員大叔從哪個抽屜裏取數據),直至停機。但是,如果我的數據是連續存儲的,並且在任意地址保存數據(也就是説,存儲器存放數據的抽屜式隨意的,我們只知道抽屜的編號),該怎樣去取數據進行計算,並且存儲計算結果啊?這時候我突然聽到一聲,“你傻啊,你把要取數和存數的抽屜編號告訴我不就行了?”,管理員大叔一語驚醒夢中人,是啊,有了存儲器的地址不就行了?可以把數據的地址與數據的內容分開存!這可真是石破天驚

那就再次改變我們的設計吧,

<img src="https://pic2.zhimg.com/50/890bf8d90307b3df6f8a86df61453ff3_hd.jpg" data-rawwidth="786" data-rawheight="462" class="origin_image zh-lightbox-thumb" width="786" data-original="https://pic2.zhimg.com/890bf8d90307b3df6f8a86df61453ff3_r.jpg">


ivregress截面 截面表什麼意思_工作原理_65

這次,我們把指令(代碼和數據的地址稱為一條指令,先得到數據的地址,在根據地址取數據)放在一個RAM中,把數據存在另一個RAM中,並加了3個8位鎖存器(臨時存放8位數據),示意圖只畫出了改變的部分,其餘部分與原來保持一致(累加器和代碼解析器還有相應的控制信號)。指令佔1個字節,16位的數據地址佔2個字節,一條指令共佔用3個字節,每次從RAM中取出1個字節,所以每次取出一條完整指令需要3次計數,數據地址再次傳給存儲器(這裏多加了一個RAM),RAM取出數據傳給加法器,而代碼的解析與數據傳輸到加法器進行計算操作也需要1次計數,這必然需要更加複雜的控制信號。

從存儲器中取出一條完整指令的過程叫做取指令,機器響應指令碼的一系列操作的過程叫做執行指令,雖然機器可以自動取出指令,並執行指令,你能説它是一種“有生命”的東西嗎?

看到這裏有人可能要問,我們現在不是假設在1935左右嗎?RAM是很奢侈的(500W個繼電器),能不能想法捨棄掉一個RAM?把指令(代碼和數據地址)與數據存在一起就可以了,這簡單,還記得2-1選擇器小朋友嗎?(存儲器部分提到了)

<img src="https://pic3.zhimg.com/50/c8dce29efc6136ce4f8e26d279d676e3_hd.jpg" data-rawwidth="734" data-rawheight="529" class="origin_image zh-lightbox-thumb" width="734" data-original="https://pic3.zhimg.com/c8dce29efc6136ce4f8e26d279d676e3_r.jpg">


ivregress截面 截面表什麼意思_工作原理_66

很簡單,得到數據地址之後,把地址回傳給存儲器(此時計數器小朋友的計數無效),再次根據地址取出數據。 來看一個小例子吧,計算45h+A9h-8Eh=?,假設45h,A9h,8Eh分別存在地址0010h,0011h,0012h處,計算的結果存於0013h處。我們應該給機器這樣的指令:把0010h地址處的字節裝入累加器,把0011h地址處的字節裝入累加器,從累加器中減去0012h地址處的地址,把累加器中的內容保存到0013h地址處,停機,

數據的存儲可以是任意的,我們只需要知道其相應的地址,那麼指令呢?指令還是機械的順序的往下執行,會不會出現這種情況,順序執行指令,可是數據和指令地址衝突(要存指令的地址處已經有了重要的數據,需要跳過),指令能否跳過某一段區域,繼續執行呢?

這涉及到指令尋址方式的改變(耐心聽下去,我們萬里長征,最終的一步來了,跨過他,前方就是一馬平川),怎樣跳過某一段兒區域,繼續執行指令呢?那就jump啊,對,擴充一條跳轉指令(Jump)

<img src="https://pic4.zhimg.com/50/3d661c746d390d611881dae08e3aef84_hd.jpg" data-rawwidth="491" data-rawheight="242" class="origin_image zh-lightbox-thumb" width="491" data-original="https://pic4.zhimg.com/3d661c746d390d611881dae08e3aef84_r.jpg">


ivregress截面 截面表什麼意思_工作原理_67

相應的機器內部實現也要改變

<img src="https://pic3.zhimg.com/50/ddaa2c668c1fc02b53a776cab39c0ffc_hd.jpg" data-rawwidth="800" data-rawheight="598" class="origin_image zh-lightbox-thumb" width="800" data-original="https://pic3.zhimg.com/ddaa2c668c1fc02b53a776cab39c0ffc_r.jpg">


ivregress截面 截面表什麼意思_5e_68

在上一步基礎之上,增加了一條到計數器的數據通路,相當於告訴計數器小朋友,“小朋友,你下次從我告訴你的那個數開始計數,叔叔給你糖吃,乖~”

讓我們回到電子線路中,計數器的實現,振盪器和D觸發器串聯方式(16個D觸發器),我們稍作修改一下邊緣型觸發的D型觸發器

<img src="https://pic3.zhimg.com/50/870faa339e7ae5711d40b2a32c885f27_hd.jpg" data-rawwidth="385" data-rawheight="259" class="content_image" width="385">


ivregress截面 截面表什麼意思_工作原理_69


可以不用瞭解上圖的實現,請注意我們現在重點不在於具體實現,而在於實現某一功能,我們需要為16位計數器的每一位都設置一個這樣的觸發器。一旦加載了某個特定的值,計數器就開始從該值開始計數(是不是用糖果把計數器小朋友收買了,呵呵)

Jump(跳轉)指令確實很有用,但是一個有條件的跳轉更有用(“我是個有原則的人,除非滿足我的條件才jump”),比如要計算A7h與1Ch(十進制的28)相乘的結果,和28個A7h相加的結果相同,計算過程涉及到大量的重複操作

假設乘數和被乘數以及計算結果保存在一下地址:

1000h:00h,A7h,(16位乘數保存在此處)

1002h:00h,1Ch,(16位被乘數保存在此處)

1004h:00h,00h,(16位乘積保存在這兩個連續的地址空間)

<img src="https://pic4.zhimg.com/50/ea2119b4d39b1c5e3fc0ccd4fece4c16_hd.jpg" data-rawwidth="728" data-rawheight="467" class="origin_image zh-lightbox-thumb" width="728" data-original="https://pic4.zhimg.com/ea2119b4d39b1c5e3fc0ccd4fece4c16_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_70

當這六條指令執行完畢之後,存儲器1004h和1005h地址保存的16位數與A7h乘以1的結果相同。還要把這6條指令反覆執行27次才能達到乘法的目的,如果在地址0012h處置放一條Jump指令會怎樣?

這個過程不會停止下來,它會一直反覆執行下去!

我們需要這樣一種Jump指令,它只讓這個過程重複執行所需要的的次數,這種指令就是條件跳轉指令,怎麼實現它呢?我給出一種實現方式,簡單看看就好

<img src="https://pic4.zhimg.com/50/91bc8bd72f19bb5b52109b0ecd2dea33_hd.jpg" data-rawwidth="645" data-rawheight="271" class="origin_image zh-lightbox-thumb" width="645" data-original="https://pic4.zhimg.com/91bc8bd72f19bb5b52109b0ecd2dea33_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_71

這種鎖存器叫零鎖存器,當8位加法器輸出為零時他鎖存的值才是1。有了進位鎖存器和零鎖存器以後,可以為指令表新增4條指令

<img src="https://pic3.zhimg.com/50/56f6a345657d2c745bda14515254c4c4_hd.jpg" data-rawwidth="495" data-rawheight="400" class="origin_image zh-lightbox-thumb" width="495" data-original="https://pic3.zhimg.com/56f6a345657d2c745bda14515254c4c4_r.jpg">


ivregress截面 截面表什麼意思_bc_72


非零跳轉指令只有在零鎖存器輸出為0時才會跳轉到指定的地址,如果上一步的加法、減法、進位加法或者借位減法運算結果為0時,將不會發生跳轉。只需要在常規的跳轉命令的控制信號之上再加一個控制信號

那麼繼續剛才提出的問題,0012h地址之後的的指令為

<img src="https://pic3.zhimg.com/50/1defccdeb670c352408f807342d75b87_hd.jpg" data-rawwidth="648" data-rawheight="473" class="origin_image zh-lightbox-thumb" width="648" data-original="https://pic3.zhimg.com/1defccdeb670c352408f807342d75b87_r.jpg">


ivregress截面 截面表什麼意思_工作原理_73

Store指令不會影響零標誌位的值,只有Add、Subtract、Add with Carry、Subtract with borrow這些指令才能影響零標誌位的值,當執行到地28次循環時,1004h和1005h地址保存的16位數等於A7和1Ch的乘積。1003h地址保存的值為1,他和FFh相加的結果為0.零標誌位被置位!Jump If Not Zero指令不會再跳轉回到0000h地址處,程序執行完成。

現在可以説,我們這台不斷完善的機器真的可以稱得上是一台真正意義上的computer了!條件跳轉指令將計算器和計算機真正區分開來。

那麼,你現在明白了嗎,為什麼計算機能讀懂0和1?計算機和程序到底是什麼?

數據被附在電流上不斷地轉圈圈(循環的過程),當滿足某一條件之後,得到最終結果。

彙編語言

把上述機器碼錶示成助記符的形式

<img src="https://pic4.zhimg.com/50/f8062c691653ffebb97f03eb04beb04a_hd.jpg" data-rawwidth="679" data-rawheight="389" class="origin_image zh-lightbox-thumb" width="679" data-original="https://pic4.zhimg.com/f8062c691653ffebb97f03eb04beb04a_r.jpg">


ivregress截面 截面表什麼意思_5e_74

那麼這個乘法的程序可以寫成這種形式

<img src="https://pic1.zhimg.com/50/f4f55738206044ce2ed9c5f8ab0a6028_hd.jpg" data-rawwidth="351" data-rawheight="487" class="content_image" width="351">


ivregress截面 截面表什麼意思_5e_75

編碼時最好不使用實際地址,用label來指代存儲器中的地址空間,所以上述程序可以改寫為

<img src="https://pic1.zhimg.com/50/50add86b354e02d208ca72a20387c0f0_hd.jpg" data-rawwidth="744" data-rawheight="484" class="origin_image zh-lightbox-thumb" width="744" data-original="https://pic1.zhimg.com/50add86b354e02d208ca72a20387c0f0_r.jpg">


ivregress截面 截面表什麼意思_ivregress截面_76

終於在春節到來之前寫完了,算是圓了自己的一份小小的心願。

寫的不好,歡迎大家批評改正。



編輯於 2017-07-06



分享


收藏 感謝 收起


ivregress截面 截面表什麼意思_工作原理_77



丁旭



字九日,號旮旯居士。



1,126 人贊同了該回答



2015/11/25 更新:

承蒙大家抬愛,這篇一年多前的回答上日報了,為了避免誤導還是註明一下,文章的目的是儘可能以最簡單的語言讓非微電子專業的讀者能對芯片的工作原理有感性的認識,有高中物理和化學知識就能順利讀完,因此許多過程描述進行了簡化、並不專業,也沒有采用太多術語以避免詰屈聱牙之嫌,希望是如果能有一點科普作用那就極好了。

原文:

關於計算機為什麼能讀懂0和1,

@蕭井陌

同學的答案中已經回答地相當仔細了,相信有鑽研精神的朋友讀完他的答案,就能在布爾代數原理和基本電路原理上對計算機的0和1有一個感性的認識。唯一有點美中不足的是他沒有在物理層面上解釋電路器件的運作方式,那麼答主就來解釋一下計算機的硬件核心:IC電路在物理層面是如何工作以及是如何製備出來的。



首先還是通過兩個不同層面的基本介紹來總結一下


@蕭井陌

同學的答案。



一、邏輯實現

IC數字電路中,用高電壓(比如3.3V)代表1,低電壓(比如0V)代表0。利用布爾代數的與、或、非基本邏輯,就可以構造出不同的電路,實現複雜的運算。

與邏輯:1與0=0、1與1=1、0與0=0

或邏輯:1或0=1、1或1=1、0或0=0

非邏輯:非1=0、非0=1

比如要實現一個1位的加法器(C=A+B):

1+0=1

1+1=0

0+0=0

因為是1位加法器,我們就不考慮進位了。那麼邏輯的實現就是:

C=(A 與 非B)或(非A 與 B)

這樣在邏輯上一個簡單的加法器就實現了。複雜的IC數字計算電路,就是由幾億個這樣的簡單邏輯構成的。



在這一個層面的總結中,我們瞭解到,IC芯片的數學原理是布爾代數,這是芯片工作的邏輯基礎。



二、電路實現

以上介紹的只是純邏輯的實現,那麼怎麼在電路上把它實現出來呢?舉個最簡單的例子,非邏輯,我們用一個稱為非門的電路來實現。

<img src="https://pic4.zhimg.com/50/190fef50ea0a1481cb5336eac2e984a6_hd.jpg" data-rawwidth="243" data-rawheight="220" class="content_image" width="243">


ivregress截面 截面表什麼意思_bc_78

以上是一個非門的電路表示。如果Input為高電壓(代表1),Output就是低電壓(代表0),反之亦然。圖中,Vdd表示高電壓,Vss表示低電壓(接地,即為0)。



PMOS可以看做一個用G端電壓控制的開關器件:如果加在G端是高電壓,那麼PMOS可以看做是斷線,如果加在G端的是低電壓,那麼PMOS可以看做是一根導線。NMOS正好相反,如果G端是低電壓,則是斷線,如果G端是高電壓,則是導線。



那麼看這個非門的電路,當Input為高電壓時,PMOS斷線,NMOS導通,Output相當於接地(Vss),那麼Output就是低電壓了;當Input為低電壓時,PMOS導通,NMOS斷線,Output相當於接Vdd,那麼就是高電壓。



這樣我們就在電路層面實現了最基本的門邏輯-非門。與邏輯和或邏輯可以使用相似但稍複雜的電路來實現。IC數字電路歸根結底都是靠這三種電路來實現的。



在這一個層面的總結中,我們瞭解到,其實計算機的工作原理並沒有想象中那麼“智能”,其實跟用水閘開關控制水流的衝力去推動風車轉動的基本思想是一致的。計算機並不“懂得”0和1,它只是靠我們精妙的組織具有特定特性的物理器件,讓器件發揮自身的物理性質,從而能在電壓上反應出一個計算電路的輸入和輸出。



有了以上總結,我們就可以研究現代IC芯片的基本器件單元:MOS管了。



三、MOS管

從以上介紹中可以看出,數字電路中最重要的器件就是MOS管了,分為PMOS和NMOS。不同於電阻、電感、電容等基礎電子器件,MOS管的導通與否是通過G端的電壓來控制的,那麼就不能使用最基本的電阻器等原件來實現了,需要重新設計一種器件。

以NMOS為例:

<img src="https://pic3.zhimg.com/50/ffa79e850c05060b45d6f10ccdc3d4c7_hd.jpg" data-rawwidth="446" data-rawheight="299" class="origin_image zh-lightbox-thumb" width="446" data-original="https://pic3.zhimg.com/ffa79e850c05060b45d6f10ccdc3d4c7_r.jpg">


ivregress截面 截面表什麼意思_5e_79


以上是一個NMOS的剖面圖。黃色區域為摻雜了正離子的硅,綠色區域為摻雜了負離子的硅。上面的三塊灰色區域為源(Source)、柵(Gate)、漏(Drain)的電極,分別對應了非門電路中NMOS連接Vss、Input(G)、Output的三個電極。從以上非門的介紹中可以瞭解到,我們使用NMOS,是希望通過控制Gate的電壓,來控制從Source到Drain能否導通。



如圖所示,現在紅色虛線勾勒出的區域,從左到右形成了一個N-P-N的結構,表示摻雜了負離子的硅-摻雜了正離子的硅-摻雜了負離子的硅。因為正負離子的同性相斥、異性相吸的特徵,在P、N的交界處,會形成一段“耗盡層”,其中是沒有電子的(都被同性相斥、異性相吸到其他區域去了),那麼如果Gate上不加電壓的話(電壓為0),從Source是Drain是不能導通的,對應了以上電路分析時的斷線情況。如果Gate上加上合適的電壓,那麼情況就不一樣了,因為電壓為正,那麼會吸引下方紅色虛線勾勒區域內的負離子到Gate的下方來(電容器原理),從而在Gate下方形成了一段有負離子(N-type)的區域,也就是説原來的摻雜了正離子的硅在Gate下方的一小段區域發生了翻轉變成了摻雜了負離子的硅,這樣就將Source和Drain連接了起來。因為Source和Drain本身也是連接着負離子區域,這段區域就相當於一條導線,那麼從Source到Drain就導通了。這就是NMOS能通過Gate控制導通能力的原理。PMOS原理類似,只不過摻雜的離子極性和NMOS剛好是相反的。



由以上介紹我們知道,控制芯片電路中的“水閘”其實是一個運用電子的基本物理特性工作的人造器件。在現代電路中,這樣的器件尺寸是非常小的,基本在100nm級別(也就是説人的頭髮絲的截面可以放得下幾百個這樣的MOS器件)。那麼這麼小的器件,人類是怎麼製造出來的呢?



四、物理實現



瞭解了MOS管的功能和它的結構後,就可以繼續瞭解CMOS工藝了。CMOS工藝的目的就是在硅晶圓上通過多道工序,建造Source、Gate、Drain結構,實現NMOS和PMOS管,從而構造出與或非門,構建出更復雜的邏輯。硅晶圓其實就是從沙子中提取出來的硅單質,我們把它製作成薄片,在表面同時製備成千上萬個MOS器件,形成IC芯片。



<img src="https://pic3.zhimg.com/50/aeb49237c296717a0b8d0e097eaea9c5_hd.jpg" data-rawwidth="240" data-rawheight="261" class="content_image" width="240">


ivregress截面 截面表什麼意思_5e_80



首先介紹一下一些基本工藝的目的和原理:

1、 生長SiO2:將硅晶圓放入通了氧氣的烘烤爐中,使Si氧化,在表面生成一層SiO2。一般是為了絕緣。

2、 光刻(濕法):因為半導體器件的尺寸非常小,不可能通過機械手段加工,所以只能通過刻蝕的方法。原理是先在要刻蝕的表面均勻塗抹一層光刻膠並烘乾,然後通過掩膜板(上面繪製了需要刻蝕出的圖像,需要刻蝕的部分為透明的,不需要刻蝕的部分用黑色阻擋),將紫外線照射到光刻膠上。光刻膠分為正膠和反膠,如果是正膠的話,照射到紫外線的部分就溶解掉了。這樣,需要刻蝕的部分上覆蓋的光刻膠就被紫外線透過掩膜照射溶解了,而不需要刻蝕的部分因為紫外線不能透過掩膜的黑色部分,所以仍在器件表面。這時將器件放到能溶解其表面物質的溶液中,被光刻膠覆蓋的部分因為接觸不到溶液,所以不會被去除,而沒有光刻膠的部分就溶解掉了,於是就在器件表面形成了需要刻蝕出的圖形。

3、 離子刻蝕:前序步驟和濕法光刻是一樣的,都是用光刻膠形成圖形。但是不同於用溶液溶解,離子刻蝕是使用高能離子打向器件表面,沒有被光刻膠保護的部分就被打掉了,被光刻膠保護的部分留了下來。



然後我們就可以瞭解一下MOS的具體制備流程了(以下圖片來自FSI)。



1、 STI淺溝槽隔離:STI的目的是為了在IC電路中,將各器件隔離開來,否則會有漏電等情況發生。STI使用SiO2作為隔離介質,因為SiO2有良好的絕緣性。

首先將切下來的硅晶圓做清潔。

<img src="https://pic2.zhimg.com/50/85c1975c81c1422c921819856dd9d7e6_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_81

在Si表面生長一層很薄的SiO2,然後在上面覆蓋一層Si3N4。這裏Si3N4起到一個佔位的作用。

<img src="https://pic3.zhimg.com/50/c84e53701bfa92ad282197d259fb9f1b_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_82

塗抹光刻膠並烘烤,用紫外線透過掩膜進行光刻。

<img src="https://pic4.zhimg.com/50/dca7be9a8e4d502774746352a2abb79a_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_83

沒有被掩膜黑色區域保護的光刻膠部分就被去掉了,留下了被保護的部分。

<img src="https://pic3.zhimg.com/50/3c7a508a4c9cbf8647f9ced23aa67095_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_84

幹法刻蝕,就是離子刻蝕,沒有光刻膠保護的部分被高能離子打掉了,從而形成了凹槽。

<img src="https://pic4.zhimg.com/50/41d1a4df003047553d4489c734b7e966_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_85

去除殘留的光刻膠並清潔硅晶圓。

<img src="https://pic4.zhimg.com/50/28ae5b36dacae88b7fe5400ebff9bf72_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_86

在晶圓上沉積一層較厚的SiO2,因為是沉積得到的,表面很不光滑。

<img src="https://pic4.zhimg.com/50/6bda3cc20c9d965bb18b3123f15e6f6e_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_87

通過CMP(化學機械研磨),將不光滑的表面磨平。

<img src="https://pic1.zhimg.com/50/29671c60e27a44849347bb6ccfee2fee_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_88

這時用能溶解Si3N4的溶液將Si3N4去除。之前提到,Si3N4是佔位的作用,它去除後,SiO2的高度就略高於晶圓表面了,這也是為了起到更好的保護隔離作用。

<img src="https://pic4.zhimg.com/50/d1bc7ddd5b79befb626c73be91bfaabf_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_89

2、 生長阱。阱就是之前介紹MOS管時的黃色區域,作用之前也提到過了,是為了形成N-P(阱)-N或者P-N(阱)-P這樣的結構。

首先還是光刻,用掩膜留下跟需要刻蝕圖形相同的部分光刻膠。

<img src="https://pic1.zhimg.com/50/218c50fbf54b0b65d011a594dc7acdb1_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_90

進行離子注入。假設我們是要製作NMOS,那麼就注入正離子(形成P阱)。注意沒有被光刻膠保護的部分會注入,而被光刻膠保護的部分就不會注入到了。

<img src="https://pic1.zhimg.com/50/8a498b5ba08a342eb7cf42d0e6f388d7_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_91

去除光刻膠並清潔表面。

<img src="https://pic4.zhimg.com/50/20fe65d4fe3b1c9780614a203dc4b8b9_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_92

退火,主要目的是為了讓離子在硅晶圓中更好地擴散,形成合適尺寸的阱。

<img src="https://pic3.zhimg.com/50/14944d025f586c421b7afe2f156a565b_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_93

3、 製作柵(Gate)。Gate就是控制Source和Drain是否導通的部分,一般材質是多晶硅,現在有時也用其他材質了。

先對晶圓做一下清潔。

<img src="https://pic4.zhimg.com/50/a2f4ee02307fdfa67ae7bd2d0c35934f_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_94

在晶圓上覆蓋一層多晶硅。注意,要覆蓋只能是晶圓表面全部覆蓋,因為尺寸太小在這一步不能可能控制它的覆蓋部分,只能在後續工藝中用光刻去除不需要覆蓋的部分。

<img src="https://pic1.zhimg.com/50/1c61d9ab9237263b733722ef0ae375fe_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_95

還是塗抹光刻膠,用紫外線透過掩膜照射,留下一部分。

<img src="https://pic1.zhimg.com/50/5a15d52d47ae03fac5f2ce7df651e3fa_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_96

濕法刻蝕,把沒有被光刻膠保護的多晶硅去除。

<img src="https://pic1.zhimg.com/50/e9041d814ae8cd7178bd843fdd90dfa3_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_97

去除光刻膠並清潔。這樣就留下了我們需要的多晶硅部分了。不過這一部分形成的多晶硅層還不是Gate用的多晶硅,這個叫做犧牲層,主要是為了形成真正的Gate墊背用的。原因是由於Gate的尺寸很小,目前刻蝕工藝無法形成特別精確的矩形圖形,所以使用了兩步工序,這一步形成的多晶硅還會在以後被刻蝕掉,具體原理不再贅述。

<img src="https://pic4.zhimg.com/50/b0065c58be57ff3dfbaddc46830b0233_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_98

再次覆蓋一層多晶硅。

<img src="https://pic3.zhimg.com/50/5202103e351c2bd50eecf2cea8191932_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_99

覆蓋一層電極物質,一般是金屬(比如Al)。

<img src="https://pic3.zhimg.com/50/92b284be20af636884a531d7f32d7b1d_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_100

塗抹光刻膠並刻蝕光刻膠。

<img src="https://pic2.zhimg.com/50/de61fb56b010055fdf9a97e03ee44e2c_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_101

柵離子注入。沒有被光刻膠保護的多晶硅部分就被注入了離子了,這是為了增強Gate的導電性。


去除光刻膠並清潔。

<img src="https://pic4.zhimg.com/50/42f2184010efba4d08cc7679a656c7fb_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_102

繼續塗抹光刻膠並刻蝕光刻膠。注意這一步形成的圖形就是柵真正的結構了。

<img src="https://pic2.zhimg.com/50/38790125db96ad0fa137a8ece2c7118c_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_103

幹法刻蝕。沒有被光刻膠保護的金屬(黃色部分)和多晶硅(表面紅色部分)就被高能離子轟擊掉了,留下了我們需要的柵結構。

<img src="https://pic2.zhimg.com/50/2da7478933d4ef26c06be1b0b0c3e904_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_104

去除光刻膠並清潔。

<img src="https://pic1.zhimg.com/50/cef3b3ef65348a324736d63ac0376e5e_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_105

在柵上覆蓋一層氧化層(紫色部分),這是為了在下一步離子注入時保護柵。到這一步,柵(Gate)就製作完成了。

<img src="https://pic2.zhimg.com/50/376b57ca96660a679c26b1808a183d55_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_106

4、 在阱上製作Source和Drain的低摻雜部分。由MOS結構圖可知,Source和Drain之間有一個N-P-N(或P-N-P結構)。之前在製作阱的時候,我們把中間的這個部分(也就是阱)製作完成了,現在就是製作兩邊的部分。


首先還是光刻,留下部分光刻膠。

<img src="https://pic2.zhimg.com/50/28b8dc440d8082e1f6b7abcc34a4b5fb_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_107

離子注入,被光刻膠和柵保護的部分是注入不到離子的,而中間兩塊區域就被注入了和阱的極性相反的離子了,於是就形成了N-P-N或P-N-P的結構。

<img src="https://pic1.zhimg.com/50/811a9d46a0e3503585627758bf59da6b_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_108

去除光刻膠和保護層並清潔。

<img src="https://pic4.zhimg.com/50/a637f11170be6a60d7b1cfc04088a6ee_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_109

5、 形成柵兩旁的保護層。這是為了防止柵和源、漏之間由於量子隧穿效應形成漏電流。用SiO2保護就可以了。


沉積一層SiO2和Si3N4。

<img src="https://pic4.zhimg.com/50/4f7071855a1d7c716af204542019930e_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_110

直接用高能離子轟擊表面,控制轟擊的時間,從而就把大部分SiO2保護層去掉了,留下了柵兩邊的比較厚的部分。

<img src="https://pic2.zhimg.com/50/793a20d07f863ca460b4eb80d40a7c76_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_111

清潔表面。從以上步驟我們也可以看出,

之所以MOS工藝中要用一步步複雜的光刻、刻蝕、沉積,主要原因就是因為器件太小了,沒辦法直接進行機械加工操作,只能通過化學或離子轟擊的方法來製作,但是這些方法又只能針對一個表面,所以需要用光刻膠和掩膜板來一次次地製作保護區域,形成我們要製備的圖形。


<img src="https://pic4.zhimg.com/50/c579f42d50b33bd39302875de682768f_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_112

6、製作Source和Drain的高摻雜部分。之所以在製作Source和Drain時要分為高摻雜和低摻雜兩塊區域,是為了使用所謂LDD(輕摻雜漏極)技術,來抑制短溝道效應帶來的Source和Drain之間的漏電流,並且提高MOS器件的橫向耐壓。

首先還是上光刻膠並刻蝕出圖像。

<img src="https://pic1.zhimg.com/50/8868fbda5464cdbf8dfa79c9188633c0_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_113

低摻雜的離子注入,形成了兩邊的亮藍色區域。

<img src="https://pic3.zhimg.com/50/5b4bdb8d37059b6385fd587d49b9d155_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_114

去除光刻膠並清除。

<img src="https://pic3.zhimg.com/50/3f0e3c4169522d1092bc99f2c875efbc_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_115

退火,使摻雜離子稍擴散。這樣高摻雜和低摻雜區域共同構成了源和漏。

<img src="https://pic4.zhimg.com/50/5ae8fa52aef53e8efda7a985d4ed0b18_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_116

7、 金屬硅化物的製備。主要是用來連接Gate和電極的,導電性介於金屬和多晶硅之間。


首先是清潔表面。

<img src="https://pic2.zhimg.com/50/3040de3528d5b9d102f3190f592c8d34_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_117

在表面覆蓋一層金屬硅化物。

<img src="https://pic2.zhimg.com/50/b8c9b0f86659de524ca9e492eca753c6_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_118

退火。

<img src="https://pic3.zhimg.com/50/db7d58ce20341c03f3eb37ccf224ae57_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_119

通過刻蝕等方法將不需要的金屬硅化物部分去除,留下連接柵的那部分。

<img src="https://pic1.zhimg.com/50/38f694e0df4ee2ba2084c2a719e5e09b_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_120

再次退火。到這一步金屬硅化物(柵到電極的連接部分)就製作完成了。柵的形狀是L形,之後會在L的尾部連接金屬電極。


<img src="https://pic3.zhimg.com/50/dd5553724e9205082cc5edc42fe1946a_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_121

8、製作接觸電極。柵、源、漏的硅部分已經制作完成了,現在要把它們用金屬導線引出來,這樣才能連接到電路中去。


首先覆蓋一層SiO2和Si3N4。這是MOS管和上層導線的隔離層。

<img src="https://pic1.zhimg.com/50/738efbbd47b82e6484e7e86c100fe9e7_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_工作原理_122

塗抹光刻膠,在光刻膠上形成幾個穿孔。前面兩個是用來連接源和漏的,後面那個是用來連接柵的。

<img src="https://pic3.zhimg.com/50/4530f67cf59bd17c0f5f9ec8019f9494_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_123

幹法刻蝕。用高能離子轟擊晶圓表面,上一步形成的3個穿孔下方由於沒有保護,SiO2隔離層就被擊穿了,柵、源、漏就被暴露了出來。

<img src="https://pic4.zhimg.com/50/63f81db833037a2ef8fbd1acf1d5c06f_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_124

去除光刻膠並清除表面。

<img src="https://pic2.zhimg.com/50/277ae9d129293bf49860fe0466ecd405_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_125

在表面沉積一層金屬,這樣金屬就填充了穿孔,從而連接了柵、源、漏,將它們引了出來。

<img src="https://pic3.zhimg.com/50/8799bf564e39488999a3d87b59c719b9_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_126

CMP工藝,打磨掉表面多餘的金屬。

<img src="https://pic4.zhimg.com/50/362afce66f17a033bfa8e07856c09a0e_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_127

清潔表面。

<img src="https://pic1.zhimg.com/50/f93b88e104d94e1b892d107536e002c4_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_128

9、製作金屬層。這一層就完全根據電路設計中的引線來製作了,使用的金屬材質和圖形都是因設計而異的。

首先沉積一層介電層(就是絕緣層,用來隔離)。

<img src="https://pic4.zhimg.com/50/321b1aae2a88cce651324e0c8dc83216_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_129

光刻出跟需要製備的金屬層圖形相同的光刻膠層。

<img src="https://pic2.zhimg.com/50/9d90a2625501fa19ed0281710f2f586d_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_130

幹法刻蝕,用高能離子轟擊,刻蝕掉不需要的介電層。

<img src="https://pic1.zhimg.com/50/dbad259b3285da8f24e9603b8b0d47d0_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_131

去除光刻膠並清潔。

<img src="https://pic3.zhimg.com/50/b98f88c5cd8a39dd9e376bbee67569de_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_132

覆蓋一層金屬,這層金屬填充到了介電層被刻蝕出的凹槽中,連接到了下方的金屬電極。

<img src="https://pic4.zhimg.com/50/19714927c9a428a13250052dd892dce9_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_bc_133

CMP工序,去除掉表面多餘的金屬。

<img src="https://pic1.zhimg.com/50/c8f03a0faa6e3c064ab7df1924f61db3_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_ivregress截面_134

清潔表面。

<img src="https://pic2.zhimg.com/50/19068d1f32c189ce784941900fc1eb2f_hd.jpg" data-rawwidth="155" data-rawheight="224" class="content_image" width="155">


ivregress截面 截面表什麼意思_5e_135


然後就是根據電路結構繼續製作金屬互聯層,一層層地連接到外部電路中去。一般一個簡單的芯片需要10-20層互聯結構。最後就是將芯片打上與外部電路連接的電極,一塊完整製作好的晶圓就產生了。一般一塊晶圓上會有幾十塊芯片,把芯片切下來就可以測試、封裝、使用了。



如此,一塊芯片就製作完成了。計算機通過以高低電壓形式表示的1、0狀態作為輸入,在芯片上的千千萬萬個MOS管的作用下,得到同樣是以電壓形式表示的輸出,然後通過以電壓驅動的輸出設備(比如顯示器)顯示給用户。整個過程其實是利用了電子的物理特性和極其精妙的器件組合,獲得了一個“自動化”的處理方式。



編輯於 2015-11-25



分享


收藏 感謝 收起


ivregress截面 截面表什麼意思_bc_136



蕭井陌



B站直播 https://space.bilibili.com/39066904



1,597 人贊同了該回答



玉來了

既然是問最最原始的那個工作原理。。。


從小到大,我們被告知的都是,計算機只能讀懂1和0,但我好奇的是為什麼計算機它就能夠讀懂1和0呢,它是怎麼讀懂的?讀懂後,又是怎樣進行工作的呢?嗯...我想問的就是,最最基本原始的那個工作原理




+++理論的分割線+++

最最基本原始的那個工作原理甚至都和電無關,是數學原理,布爾代數(搜索),任何可以改變狀態傳遞信息的技術都可以拿來實現布爾邏輯,而實現了布爾邏輯,就離計算機不遠了。

像是三體裏面的人列計算機,就是用三體人實現計算機,這一段我直接跳了,沒什麼可看的,因為我懂嘛。。。
我還設想過水流+開關實現邏輯門,是可行的。



「現在可以公開的情報」


  1. 計算機的理論基礎是布爾代數
  2. 計算機的實現基礎可以是任何擁有『改變狀態』和『傳遞信息』的技術




+++基礎實現的分割線+++

繼續正題。。。
起初, 科學家 創造計算機, 科學家 説,要先有邏輯門,然後就用真空二極管實現了邏輯門
真空管的原理去搜吧

電子計算機的原理就是利用通電、斷電(或曰高電平低電平)這兩個狀態來表示布爾代數中的邏輯真和邏輯假從而實現布爾運算,由於這個原因,設邏輯真為1和邏輯假為0,這樣就可以用計算機表示二進制的數字了。

現在的計算機用的是晶體二極管,雖然底層原理不同,但是性質是一樣的,這就是編程中常説的封裝和抽象的好處,你不需要關心它的原理,用它實現你的功能就行了。
所以説起來,現代電子計算機的實現,是物理原理,計算理論,是數學原理。

二極管的性質是這樣的,只有一個方向可以通電,反向不通電
『想知道具體原理的可以搜索PN結』
還有三極管(還有一種性質相似的場效應管FET),性質是這樣的,b通電ec通,b斷電ec斷
『具體原理搜索NPN結』

【【【【配圖】】】】
二極管和三極管

<img src="https://pic4.zhimg.com/50/7e57a10bbfb98f26db9c63e450a328cc_hd.jpg" data-rawwidth="600" data-rawheight="327" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic4.zhimg.com/7e57a10bbfb98f26db9c63e450a328cc_r.jpg">


ivregress截面 截面表什麼意思_bc_137

然後可以組成邏輯電路,下面分別是與或非(AND、OR、NOT)三種邏輯門的電路實現



【【【【配圖】】】】
從左到右分別是與或非三種門,x j表示輸入,m表示輸出

<img src="https://pic4.zhimg.com/50/f16f0533fc8d4c1eae6d02ea2902f918_hd.jpg" data-rawwidth="872" data-rawheight="620" class="origin_image zh-lightbox-thumb" width="872" data-original="https://pic4.zhimg.com/f16f0533fc8d4c1eae6d02ea2902f918_r.jpg">


ivregress截面 截面表什麼意思_工作原理_138

有了這三種邏輯門電路,你就可以實現任意邏輯門了,比如與非門、或非門、異或門、同或門(異或非門)。(搜索邏輯門)
(實際應用中,是以與非門(NAND(Not AND) gate)為基礎原件來構建電路,因為其他所有門電路都可以用與非門構建,關於這一點,你可以思考一下



「現在可以公開的情報」


  1. 地球當代的計算機的實現基礎是電子技術
  2. 二極管和FET的技術原理是PN結和NPN結,是原子、電子層面的原理(很底層吧。。。)
  3. 用二極管和FET可以實現布爾代數中的邏輯操作,稱為『邏輯門』




+++邏輯的分割線+++

二進制數字的加法如下:
1+1=10
1+0=1
0+0=0
0+1=1
用上文中的邏輯門就可以實現這個加法。
不考慮進位的情況下(術語叫半加器),用一個異或門就可以實現兩個數字相加,很簡單,就不畫圖示意了,自行思考吧。。。

考慮進位的情況下(術語叫全加器),稍微有點複雜,輸入通過XOR(異或門)得到結果,同時過一個電路得到進位結果
進位規則如下:
1+1進位1
1+0進位0
0+0進位0
0+1進位0
可見進位規則可以用AND(與門)得到結果,所以電路圖如下:

【【【【配圖】】】】

<img src="https://pic1.zhimg.com/50/7890b5b33eb1d701aacb73625925e16e_hd.jpg" data-rawwidth="698" data-rawheight="475" class="origin_image zh-lightbox-thumb" width="698" data-original="https://pic1.zhimg.com/7890b5b33eb1d701aacb73625925e16e_r.jpg">


ivregress截面 截面表什麼意思_工作原理_139


把這樣的電路串起來,就可以實現多位加法,自己想想看吧。


不過這裏有一個問題,要連多個例圖中的加法器,需要給電路添加一個輸入口m,它是上一位的進位,有興趣可以思考一二。



實際應用中,電路並不是憑空想的,是通過布爾邏輯運算得到一個最簡邏輯表達式,然後按照這個表達式來組裝電路,『請搜索數字電路』。

淘寶可以買到LED燈、二極管和三極管,雖然現在漲價了,但價格依舊感人,不到順豐快遞費就可以買一大把,有興趣的同學可以自行購買這些元器件組裝電路來玩玩。
輸出端接上led燈,就可以觀察到電路運行結果。

額外的,如果你把幾個燈泡並聯並且弄成一條線段的樣子當做一個整體燈管,然後通過輸入來點亮相應燈泡,就可以用來顯示數字了。。
像下面這種,一共7個燈管
1點亮右邊兩根、2點亮相應的,以此類推
這樣可以用布爾代數做出來5個輸入7個輸出相對應的邏輯,然後用上文的邏輯門組成電路圖實現
(為啥輸入是5個?)

<img src="https://pic2.zhimg.com/50/5ba44e68d1ba119c0a00f51056659f0d_hd.jpg" data-rawwidth="310" data-rawheight="232" class="content_image" width="310">


ivregress截面 截面表什麼意思_ivregress截面_140

「現在可以公開的情報」


  1. 可以用邏輯門實現加法,也可以實現減法
  2. 實現加法的原理在於通過輸入進行邏輯運算得到輸出,這一學科可以通過搜索『數字電子技術』獲得詳情
  3. 通過燈泡等設備,可以實現電路的輸出
  4. 計算機的本質原理就是接受『輸入』,通過『計算』,得到『輸出』
  5. 通過上文所有文字,已經部分解決了樓主計算機為什麼能讀懂1和0以及內部工作原理的問題,雖然還剩下時序邏輯,不過這已經夠了。樓主趕緊點贊吧




+++分割線+++

太長了。。。
後續還有反饋電路、觸發器、時序邏輯存儲器等等等等,最終目標是弄出一個CPU來(如果我有時間的話)可以寫一個模擬器讓感興趣的同學用邏輯門拼湊CPU(如果我還有時間的話)

『待續(應該大概真的會續)』





**不過最後還是想提醒還在學校的cs同學們,這些知識對找工作毫無幫助,請不要在此屠龍之技上浪費時間。



編輯於 2014-10-21



分享


收藏 感謝 收起


ivregress截面 截面表什麼意思_ivregress截面_141



王法



醫療電子工程師



90 人贊同了該回答


一個快速的完全針對問題的回答是,0是邏輯低,代表電平接地,1是邏輯高,代表電平接電源(3.3V或5V)。計算機其實不懂0和1,它只是根據程序員和電子工程師預先寫好的程序,對用户的輸入一一做出迴應。

打個比方,各地政府都對一些緊急事務做了“應急預案”,一旦事件發端,政府工作人員就可以快速按預案的流程處理事務。這個“應急預案”就類比於程序,工作人員並不需要學會思考和判斷,只需要按照預案一一操作即可,決策的工作交由製作預案的人,也就類比於程序員,來完成了。

如果要詳細回答,用户的指令,是如何轉化成計算機可讀入的機器碼(0和1),計算機又是如何將得到的正確答案反饋給用户的,即CPU到底是如何工作的,這可能需要一個稍微長一點的回答:

事先做個聲明,為了保證行文的流暢性和易讀性,有很多相似的概念被刻意做了模糊化處理,包括但不限於場效應管與三極管,不同摻雜方式的場效應管,不同的邏輯門, 不同的觸發器,不同的計算機體系結構,不同的存儲器類型,所以計算機實際的運行方式與我的回答可能會大相徑庭,但背後的基本概念和思維方式應該是一致的。


1場效應管

現代數字電路的基礎是場效應管(模擬電子的基礎是三極管),場效應管的基本機構是長這樣的

<img src="https://pic3.zhimg.com/50/befa9267df824e838d50049434c92da9_hd.jpg" data-rawwidth="593" data-rawheight="355" class="origin_image zh-lightbox-thumb" width="593" data-original="https://pic3.zhimg.com/befa9267df824e838d50049434c92da9_r.jpg">

ivregress截面 截面表什麼意思_工作原理_142

藍色部分平時處於絕緣的狀態,此時源級(Source)和漏級(Drain)是不通的,電流不能從中間流過。當柵極(Gate)有電壓時,一部分藍色區域變成導體,源級和漏級就被打通了。這種材料可以表現出導體和絕緣體的兩種特性,所以我們稱之為半導體。由此我們獲得了一個類似於開關的東西,可以通過是否給柵極電壓,來控制電路導通與否,符號化地,我們將之表示為:

<img src="https://pic4.zhimg.com/50/417fb7a4b92938e2c97881c98db6ddc5_hd.jpg" data-rawwidth="270" data-rawheight="192" class="content_image" width="270">

ivregress截面 截面表什麼意思_工作原理_143


2邏輯門

當我們已經擁有了場效應管,我們就可以以此為基礎搭建基本的邏輯門,即 非門,與門,或門。我們來看一個簡單的或門的實現(非門的實現已經有很多答案提到了):

<img src="https://pic4.zhimg.com/50/d39ca3a7a1bb5fb029253d6963a34df0_hd.jpg" data-rawwidth="120" data-rawheight="157" class="content_image" width="120">

ivregress截面 截面表什麼意思_工作原理_144

或門要求,當輸入的a和b任一等於1,輸出就為1。如果a和b均為0.,則輸出為0.

————————————————原理簡介,可跳過————————————————————

假設現在a為1,b為0,此時a控制的場效應管的柵極有了電壓,這個管子被打通了,這個場效應管的漏極直接與地(即低電平)相接,它的漏極又形成了輸出F的場效應管的柵極輸入,因為場效應管F的柵極沒有電壓,處於截止狀態,輸出F上拉到電源電壓Vcc(高電壓),輸出1。

我們接下來考察當ab輸入均為0的情況。此時ab兩個管子都處於截止狀態,F管的柵極會上拉到Vcc,F管會被導通,於是輸出F與地直接相連,F為低電平0.

————————————————————————————————————————————

相似地,我們可以構建其他基本邏輯門,並以非門,與門,或門為基礎,構建或非,異或,同或,與非門等複雜一點的邏輯門。

<img src="https://pic1.zhimg.com/50/b7580308172981872680915fc011a99b_hd.jpg" data-rawwidth="581" data-rawheight="610" class="origin_image zh-lightbox-thumb" width="581" data-original="https://pic1.zhimg.com/b7580308172981872680915fc011a99b_r.jpg">

ivregress截面 截面表什麼意思_ivregress截面_145


3.1觸發器

有了基本的邏輯門,我們如果把1對應真,0對應假,我們已經可以進行基本的邏輯決策了。但在實際情況中,我們做出一個決策,並不僅僅依賴於當前的輸入,還依賴於之前的狀態,因此我們需要構建帶有記憶功能的邏輯組件,即觸發器,看一個最簡單的RS觸發器:

<img src="https://pic1.zhimg.com/50/bfc0e3c5e4785ad235bf1b1322b63ad6_hd.jpg" data-rawwidth="221" data-rawheight="136" class="content_image" width="221">

ivregress截面 截面表什麼意思_5e_146

它的真值表為

<img src="https://pic4.zhimg.com/50/1e16d77f63d9267d87db41a6656c969f_hd.jpg" data-rawwidth="390" data-rawheight="193" class="content_image" width="390">

ivregress截面 截面表什麼意思_5e_147

——————————————原理簡介,可跳過——————————————————————

當RS均為0,觸發器的兩個輸入為1(輸入是RS取反),當Q為1時,下面的與非門的兩個輸入都是1,因此輸出為0,上面的與非門輸入為1和0,輸出是1,因此Q保持1。當Q為0時,下面的與非門兩個輸入為1和0,以為內輸出為1,上面的與非門輸入為兩個1,因為輸出為0,因此Q保持0。

所以當RS為0時,Q輸出與前一狀態相同。

類似地,我們可以推到其他3種狀態,得到上面的真值表。

————————————————————————————————————————————

我們可以看出,觸發器的前一輸出會影響到觸發器後一輸出。所以在某種意義上,我們稱它具有記憶功能。觸發器將會是構成狀態機(控制單元)的重要基礎組件。但為了對CPU的工作原理有更加全面的認識,我們暫時把目光從邏輯控制單元上移開,轉向另外一個重要單元,計算單元。


3.2半加器和全加器

我們還是以邏輯門為基礎。我們考察異或門的真值表:

<img src="https://pic1.zhimg.com/50/eee0de6b10c60390be4452d47a6d989e_hd.jpg" data-rawwidth="123" data-rawheight="158" class="content_image" width="123">

ivregress截面 截面表什麼意思_bc_148

我們發現,這恰恰就是二進制加法當前位的結果。

0+0等於0,0+1等於1,1+1等於0(因為產生了進位),因此我們很容易地想到,可以用異或門構造一個加法器(半加器):

<img src="https://pic1.zhimg.com/50/8704a8549c78f9dd6a780de3437f3ae0_hd.jpg" data-rawwidth="218" data-rawheight="126" class="content_image" width="218">

ivregress截面 截面表什麼意思_ivregress截面_149


S為當前位的結果,C為進位,當且僅當AB都為1時,產生一個進位1。

當然我們做加法時,是不能不考慮進位的,之前的半加器是不夠完備的,一個完整的加法器(全加器)是這樣的:

<img src="https://pic3.zhimg.com/50/190180c782a108d76c78133e818a9d13_hd.jpg" data-rawwidth="400" data-rawheight="176" class="content_image" width="400">

ivregress截面 截面表什麼意思_工作原理_150

低一位的進位,和當前位的兩個加數,共同決定輸出。

好了,我們有了最基本的運算單位,加法運算單位。減法運算單位與之類似。從某種意義上講,乘法運算可以看做是次數為被乘數的加法運算,除法可以看做是次數是被除數的減法運算,因為也可以用類似的方法實現(現代數字電路中,為了加快運算速度,已經不採用這種方法了,而是類似於我們用筆算乘法的邏輯,只不過是從10進制變成了2進制)。

這些數學運算單位,可以構成CPU的另一重要組件,計算單元。但僅僅有控制單元和計算單元並不足以組成CPU,我們還需要存儲單元。


3.3靜態隨機存取存儲器

不同的存儲器的基本原理差別很大,有五花八門的存儲器基於不同的單位成本,讀取速度,是否需要上電保持來供計算機不同的應用進行選擇,一一介紹冗長而又無趣,為了簡單起見,僅介紹一種基於場效應管的存儲器,靜態隨機存儲器:

<img src="https://pic4.zhimg.com/50/555c0a5c3450164c9543126e58ffdead_hd.jpg" data-rawwidth="350" data-rawheight="264" class="content_image" width="350">

ivregress截面 截面表什麼意思_5e_151


原理介紹我直接摘取了維基百科的內容,一如既往地,可以快速跳過以保持閲讀的流暢性。

——————————————原理簡介,可跳過——————————————————————

準備:



如果字線沒有被選為高電平, 那麼作為控制用的M5與M6兩個晶體管處於斷路,把基本單元與位線隔離。由M1 – M4組成的兩個反相器繼續保持其狀態,只要保持與高、低電平的連接。

讀取:

假定儲存的內容為1, 即在Q處的電平為高. 讀取週期開始時,兩條位線預充值為邏輯1, 隨後字線WL充高電平,使得兩個訪問控制晶體管M5與M6通路。第二步是保存在Q的值與位線BL的預充值相同,所以BL保持邏輯1,而Q與BL的預充值不同,使得BL經由M1與M5放電而變成邏輯0(即Q的高電平使得晶體管M1通路). 在位線BL一側,晶體管M4與M6通路,把位線連接到VDD所代表的邏輯1 (M4作為P溝道場效應管,由於柵極加了Q的低電平而M4通路). 如果儲存的內容為0, 相反的電路狀態將會使BL為1而BL為0. 只需要BL與BL有一個很小的電位差,讀取的放大電路將會辨識出哪條位線是1哪條是0. 敏感度越高,讀取速度越快。

寫入:

寫入週期開始時,把要寫入的狀態加載到位線。如果要寫入0,則設置BL為1且BL為0。隨後字線WL加載為高電平,位線的狀態被載入SRAM的基本單元。這是通過位線輸入驅動能力設計的比基本單元相對較弱的晶體管更為強壯,使得位線狀態可以覆蓋基本單元交叉耦合的反相器的以前的狀態。

————————————————————————————————————————————

4 馮·諾依曼結構

我們在 3.1中討論過的觸發器可以進一步構成狀態機,例如我們可以用兩個按鈕和一個RS觸發器控制一個電機。當按鈕為01時,控制電機正轉,按鈕為10時,控制電機反轉,按鈕為00時,控制電機保持現有方向不動。此時這個控制組件就是狀態機。通過它,我們可以實現面對特定的用户輸入,機器可以自動做出對應的輸出。狀態機將構成CPU中的 控制單元

3.2中我們獲得了一個 計算單元

3.3中我們獲得了一個 存儲單元

加上我們最熟悉的 輸入設備(鼠標,鍵盤)和 輸出設備(屏幕,音響),我們現在已經足夠搭建一個典型的馮諾依曼結構的計算機了:

<img src="https://pic1.zhimg.com/50/d1136272eaf3f60069689bc84a272039_hd.jpg" data-rawwidth="607" data-rawheight="386" class="origin_image zh-lightbox-thumb" width="607" data-original="https://pic1.zhimg.com/d1136272eaf3f60069689bc84a272039_r.jpg">

ivregress截面 截面表什麼意思_ivregress截面_152

連接各個單元的是 總線,數據和命令都以01二進制碼的形式,通過總線奔跑在各個單元之間。每當用户輸入一個命令時(點擊一下鼠標或者敲擊一下鍵盤),控制單元會接受這個命令,根據程序員已經寫好的決策方式(程序),決定從存儲器調用歷史數據,並將數據放入運算器中運算,最後的結果會在輸出設備上得到展現。

但是我們之前對於狀態機的討論中我們知道,控制器只能接受0和1的控制命令,意味着程序員寫程序時,需要挨個給每個狀態機的輸入變量和初始變量賦予0或1,因此寫程序會變成不斷敲擊0和1的一件事。這無疑是十分反人類的,我們需要更加接近自然語言的程序語言。

5彙編語言

我們討論一種最簡單的機器語言,如果我們用10110 來代表數據移動的操作(X86),某一個寄存器AL的編碼是000,那麼向AL寫入61(二進制為01100001)這個數這個操作,程序員需要這樣寫:

10110000 01100001

於是我們嘗試,把10110 翻譯成MOVE,把000翻譯成AL,這樣代碼就變成:

MOVE AL,01100001

這種用自然語言翻譯之後的語言,就是彙編語言。彙編語言是用自然語言對機器碼的一一翻譯。以便於閲讀和編寫。

6高級語言

彙編語言當然比機器語言的可讀性和可編寫性都好上不少,但無疑還是十分讓人蛋疼的,計算機科學家們又發明了諸如C語言等高級語言,它們的語法更加符合人的邏輯思維模式,而不是計算機的。編譯器負責將這些高級語言,翻譯成彙編語言,再翻譯成機器語言。

基於C語言或者JAVA這種編程語言,還有一些更加友好的可讀性強的腳本語言,例如WEB前端的Javascript,當然這些成熟的高級語言的區別將是一個繁複並超出我的能力範圍的討論,不展開了。天才的程序員們用這些語言,為我們編織了一個光怪陸奇又精彩紛呈的互聯網世界。


最後的話:

在整個電子工業中,封裝和複用的思想都貫穿其中,通過封裝底層模塊,讓上一層的工程師不需要將精力花在冗長複雜的底層物理實現上,可以專注於自己算法和邏輯的推進。由於現代電子工業的快速發展,計算機計算能力的冗餘越來越多,我們越來越不需要去關心底層封裝的具體結構。當然了,對於一部分異常關注計算性能的方向,例如並行計算(計算量巨大)和嵌入式設計(有時微處理器計算能力有限),適當地關注底層邏輯實現,對編寫更加高效的代碼十分有幫助。

編輯於 2014-10-23


分享

收藏

感謝 收起

ivregress截面 截面表什麼意思_工作原理_153


知乎用户


94 人贊同了該回答


一般來説,問這個問題的和來參考的人肯定是完全沒有學習相關課程的。所以我儘可能簡單的從最基礎的開始。請聽我慢慢道來。

1.計算機怎麼認識0和1的?
首先你應該聽過二極管是什麼,這是邏輯電路中最常見的電子器件。
額。。。又扯上“邏輯電路”了:邏輯電路是以二進制為原理、實現數字信號邏輯運算和操作的電路。
要想短短几百字説清楚還真難。不過,這裏就看到“二進制”了,二進制就是問題中提到的0和1!而在實際電路中,0和1由低電平(低電壓)和高電平(高電壓)實現。非高即低,很容易實現。

回到邏輯電路,怎麼用邏輯電路實現我們想要的一些功能呢?(這些簡單功能就是計算機的基礎,各項簡單功能組合起來就能實現複雜的功能!)
首先,二極管具有單向導電性(原理就不説了,一下子很難懂的)。

<img src="https://pic2.zhimg.com/50/a499f1c44c9b00e33fabb5a4804690f1_hd.jpg" data-rawwidth="379" data-rawheight="282" class="content_image" width="379">

ivregress截面 截面表什麼意思_ivregress截面_154

好,這個你先記住,把二極管看做一個箭頭,電流只沿箭頭方向走。

然後,給你舉個例子。如果有個決定,你和你朋友只有兩個人都同意時才去執行。回到初中物理知識。<img src="https://pic4.zhimg.com/50/a06f3667d15926266483adb9d2cb76d9_hd.jpg" data-rawwidth="379" data-rawheight="282" class="content_image" width="379">

ivregress截面 截面表什麼意思_工作原理_155

給你控制開關一,給你朋友控制開關二,都同意時才會把兩個開關都放下,使電路導通,燈泡點亮。這就是一個簡單的“與邏輯”。

當然複雜的電路中並不是人去控制開關的,所以得用二極管來實現。下面這個電路實現的是同一個功能。(畫圖神馬的最折騰人了。。。)<img src="https://pic2.zhimg.com/50/5c93ac1431af9130e332037d43a6e6ee_hd.jpg" data-rawwidth="188" data-rawheight="151" class="content_image" width="188">

ivregress截面 截面表什麼意思_5e_156

當A,B都為高電平時(所謂的1),電源VCC的電流是不能通過D1,D2兩個二極管的(電流只能從高電壓處流到低電壓處)。所以電流只能流向L點,如果在L點接個電燈泡(實際上是發光二級管),就會被點亮了。

還得繼續解釋,如果A,B中只要有一個為低電平(所謂的0),電流就可以通過了,就不會流向L點了,燈泡就不會亮了(為什麼,想象一下電流為水流,導線為水管,而D1,D2處的管子是很粗的(幾乎沒電阻)!水流過不會有阻礙。而L處的水管是很細的(因為接了電燈泡,有電阻),水流很難流過,即使通過也是很小的水流(電流),不足以點亮燈泡。更確切的應該用電壓去解釋,能力有限,只能這麼玩了。)

所以這個簡單的電路就能實現一個簡單的功能,而且電路能夠識別1和0了!

2.計算機能用1和0做什麼?
除了與門,邏輯電路中還有常見的或門,非門,或非門,與或非門等。(其中有些還要用到三極管,原理就跟上面大同小異了,只要瞭解的童鞋就不用管了)。
與門在電路圖中的符號:

<img src="https://pic2.zhimg.com/50/94eab86bb2b9dfb23c9a54785a11b097_hd.jpg" data-rawwidth="158" data-rawheight="54" class="content_image" width="158">

ivregress截面 截面表什麼意思_工作原理_157

當A=1,B=1時,L=1;(1代表高電平,0代表低電平)

當A=1,B=0時,L=0;

當A=0,B=1時,L=0;

當A=0,B=0時,L=0;

或門在電路圖中的符號:

<img src="https://pic3.zhimg.com/50/51247dec815d0fb8048b2ae6a1e4ab9c_hd.jpg" data-rawwidth="158" data-rawheight="54" class="content_image" width="158">

ivregress截面 截面表什麼意思_bc_158

當A=1,B=1時,L=1;

當A=1,B=0時,L=1;

當A=0,B=1時,L=1;

當A=0,B=0時,L=0;

非門在電路圖中的符號:

<img src="https://pic1.zhimg.com/50/ed752a84a962a6f81250f2e80d0d20fb_hd.jpg" data-rawwidth="249" data-rawheight="55" class="content_image" width="249">

ivregress截面 截面表什麼意思_bc_159

當A=1時,L=0;

當A=0時,L=1;

然後我們就可以用這些門電路相互組合去實現複雜的邏輯功能了。

好,有了上面這些知識,下面來個實用的: 計算機怎麼做加法的?
<img src="https://pic1.zhimg.com/50/1ab298480d4badbdbc256d7e16c474c7_hd.jpg" data-rawwidth="337" data-rawheight="189" class="content_image" width="337">

ivregress截面 截面表什麼意思_5e_160

<img src="https://pic4.zhimg.com/50/98fa801dd123cc7a7d925b3a7bbd70ed_hd.jpg" data-rawwidth="596" data-rawheight="257" class="origin_image zh-lightbox-thumb" width="596" data-original="https://pic4.zhimg.com/98fa801dd123cc7a7d925b3a7bbd70ed_r.jpg">

ivregress截面 截面表什麼意思_5e_161

就是上面那個電路就可以實現兩位二進制數的加法了。容易擴展為更多位的加法運算,然後依次類推,可以用門電路實現減法,乘法和除法等。 這樣,不説是計算機,計算器的模型總出來了吧。

編輯於 2012-09-22


分享

收藏 感謝

收起


ivregress截面 截面表什麼意思_工作原理_162


靈劍


微博一般不上 http://weibo.com/hubo1016


30 人贊同了該回答


知乎有個毛病就是有許多答主喜歡長篇大論不説人話,現在我試圖用最簡單的話來説明這個原理:

1. 只有數字電路才基於0和1,或者説布爾邏輯進行工作。模擬電路的輸入是某個範圍內任意的電壓,輸出也是某個範圍內任意的電壓,輸入輸出是個連續函數的關係,最簡單的比如説放大器的電路;如果做過相關實驗的話也會熟悉用運算放大器搭建模擬計算電路的方法。模擬電路可以進行許多各種各樣的計算,加減乘除甚至乘方開方,輸入輸出都是用連續的電壓表示。

2. 模擬電路計算有個致命的缺點:輸出會受到輸入噪聲的影響,因而變得不穩定,不適用於嚴格的科學計算。元件的精度、老化程度也會影響計算的精度。產生這個缺點的原因是電子元件工作在線性區域,所以輸出對輸入的變化很敏感。

3. 正如上面所説的,電子元件工作在線性區時,輸出會對輸入的變化過於敏感,不適合精確計算。那麼反過來,電子元件工作在非線性區時,輸出對輸入的變化是不敏感的。一個典型的非線性電子元件電路有兩個這樣的非線性區,以共射接法的BJT晶體管為例:
輸入<0.7V時,晶體管截止,輸出為最高電壓(假設是5V);
輸入>0.75V時,晶體管進入飽和區,輸出為最低電壓(約為0V);
輸入介於兩者之間時,晶體管處於線性工作狀態,函數大概是5 - (Ui - 0.7) * 100,100是放大倍數,實際上一般會比100更大。在這段區域中輸出對於輸入是極端敏感的,不適合數字電路工作。
而前兩種狀態下,輸入在相當大的範圍(0 - 0.7V, 0.75 - 5V)中變化時,輸出都是幾乎不變的,也就是説輸出幾乎不受噪聲影響,非常適合數字電路工作。

4. 因為我們的元件普遍只有兩個非線性區,所以我們不可避免地用其中一個表示0,另一個表示1,而沒有其他的狀態去表示2或者3或者更多了。這並不是人類特別的喜歡二進制,而是受到了元件特性的限制。因為所有的變量都只有0和1兩個狀態,所以所有的邏輯都可以用布爾代數表示,這就構成了數字電路的基礎。二進制計算只是布爾代數邏輯的一個特例。

那麼你最後就應該明白了: 計算機只能接受0和1兩種輸入是因為數字電路只能接受0和1兩種輸入,數字電路只能接受0和1兩種輸入是因為非線性電子元件只有兩個非線性區。

發佈於 2016-03-09


分享



ivregress截面 截面表什麼意思_5e_163


Yanis Ding


機械小民工


10 人贊同了該回答


物理上只容易實現1和0,人類不得不將就着用。


發佈於 2014-10-21


分享



ivregress截面 截面表什麼意思_ivregress截面_164


施雲峯


ic設計工程師


6 人贊同了該回答


隨手寫寫

#10-22更新
因為得到了贊同,想一想決定逐步把答案寫得更詳細一些。
因為沒有參考資料,全憑記憶打字,難免有所疏漏和不準確。
#

計算機所認識的0或1是信號的高低電壓。高低電壓即邏輯值(0或1)來自於芯片中邏輯電路的控制,主要由CMOS器件組成。CMOS的邏輯設計詳見:VLSI大規模集成電路基礎等課程(偏重基於CMOS的邏輯設計)。CMOS器件的工作原理詳見:半導體器件物理相關課程(偏重CMOS的器件特性和原理)。半導體器件物理的基礎來自半導體物理,主要是能帶理論。能帶理論的基礎是量子力學。(所以沒有量子力學就沒有現代計算機)

#10-22更新
CMOS的構造和邏輯實現原理 (懶得找圖,可以搜關鍵字看圖)
假定有一種邏輯的開關,開關的輸入信號為1則開關開啓,為0則開關關閉,開關連接輸出信號和地(0)。則輸入為1,則輸出為0;輸入為0,輸出為高阻(z,無邏輯值)。->叫做NMOS
另一種開關相反,輸入為0則開關開啓,為1開關關閉,開關連接輸出信號和電源(1)。則輸入為0,輸出為1;輸入為1,輸出高阻。->叫做PMOS
如果把NMOS和PMOS對稱的連接到一起,結果是:輸入為1,,輸出為0;輸入為0,輸出為1,總有確定的輸出值,避免了高阻的情況,即CMOS(C是對稱的意思)。在邏輯上實現了反向的功能,即非門(not gate)。
如果兩個NMOS串聯,PMOS並聯,則兩個輸入都為1,輸出為0;一個輸入為0,輸出為1,形成了NAND gate,再加一個NOT gate,就是AND gate。類似的可以搭建OR gate,進而搭建所有的邏輯功能。對於任意給定的輸入組合和輸出組合,總可以找到一個邏輯表達實現該功能(即數字邏輯電路設計中的卡諾圖)。在增加了電平和邊沿觸發的存儲單元(D觸發器等),就可以把邏輯分割成不同的部分用同步的時鐘來控制->形成logic + register的時序電路。CPU等IC都是這樣的電路。
CMOS是現代集成電路的主要基本結構,因為輸入和輸出之間沒有電流,功耗較小,易於大規模集成。現代的工藝(40nm/28nm/20nm/14m)也主要是在CMOS的結構上通過工藝等多方面的改進不斷縮小尺寸和降低功耗。至於如何在硅片上形成這樣的MOS結構涉及到半導體工藝的知識,這又是一個非常廣泛的範疇。

NMOS和PMOS的MOS指的是金屬場效應管,即靠輸入信號的電壓(柵極),把半導體材料中的載流子(半導體中可以導電的粒子,根據N型和P型分別是電子和空穴)吸引到特定的區域,形成一個可以導電的溝道,從而實現MOS管源極和漏極之間的導通。這就是開關為什麼能打開和關閉的原因。當然這是最簡單的介紹,其中有很多複雜的數學模型來分析(半導體器件物理的範疇)

半導體物理和量子力學的學得太早(03-04年),10年沒看,有點不記得……
下次有時間可以更新一些體系結構方面的內容
#

計算機的硬件體系結構基本上是這樣:

操作系統/編譯器 -> 計算機體系結構(指令系統體系結構)-> CPU/SOC設計、板級設計 -> CMOS設計/EDA工具+數字邏輯 -> 半導體器件物理 -> 半導體物理 & 量子力學

編輯於 2014-10-22


分享

收藏 感謝 收起


ivregress截面 截面表什麼意思_5e_165


謝然


五個月把學生送進過美團、小米和阿里,辦前端培訓是因為熱愛教育。


7 人贊同了該回答


《編碼》
看完你就知道了。
比這裏所有答主寫的所有答案加起來都要好一百萬倍。
上面這句話一點誇張也沒有,不信拉倒。


編輯於 2017-12-19


分享


ivregress截面 截面表什麼意思_工作原理_153


知乎用户


不瘋魔不成活


11 人贊同了該回答


我的這個回答針對的是小白,不叨擾專業人士。這裏沒有很專業的東西,不夠嚴謹,但有助於小白稍微理解一下計算機如何通過處理二進制信息來運轉。

1. 0和1組成的是二進制的數字,計算機內部處理的是0和1其實就是説計算機內部處理的是二進制數字

2. 計算機是電設備,整個工作中處理的電信號有兩個: 高電平和低電平(可以類比得理解為電容器的充電狀態和放點狀態),這兩個信號就對應了1和0,因此,計算機內部處理的都是二進制的0和1。

3. 計算機內有可以對二進制數進行運算與傳送的器件。比如二進制數的加法、一串二進制信息在內存與磁盤間的傳送等,都有相應的設備,保證了計算機可以執行對二進制的各種操作。

4. 任何可存儲及可處理的信息都可以用一串等價的二進制數表示。比如: 十進制的數字可以轉化為二進制的數字,一句話中的每一個字或字符都可以按照某種規則用固定的二進制數來表示(可以將這樣的二進制數理解為相應字或字符的代號),一段視頻也可以用一串二進制數來表示(視頻分為很多幀,每一幀中每個像素的值都可以對應於一個二進制數),同理,其他的各種信息(如音頻等)都可以用相應的一串二進制數表示。

5. 計算機連接的一些外部設備稱為外設(例如: 鼠標、鍵盤、顯示器、打印機等)。計算機可以向外設傳輸二進制串,控制外設的工作,比如可以向打印機傳送要打印的內容,或向打印機傳送一段約定好的二進制串表示讓打印機開始打印;外設也可以向計算機傳輸二進制串,比如敲擊鍵盤會產生相應的高低電平,即對應的0、1串(高電平1低電平0),傳入電腦後,計算機便可以判斷出按下了哪個鍵。這樣便實現了計算機對外設的控制及雙方的信息傳送。

綜合以上幾點,計算機能夠通過處理高低電平的方式處理0、1二進制串,而所有的信息都可以等價地用相應的二進制串來表示,計算機內有對二進制串進行各種運算與處理的設備,計算機也可以通過傳送相應的二進制串來進行外部設備的控制從而實現輸入與輸出,這樣,在二進制的基礎上,計算機工作了起來 ^_^


發佈於 2013-12-09


分享



ivregress截面 截面表什麼意思_5e_167


dean mooner


19 人贊同了該回答


我覺得各位有點沒答在點子上啊,雖然講了那麼多,也説出了是二極管、高低電平的根本原因,甚至把二進制運算都講了,但貌似沒什麼用啊。
因為,最開始造的計算機,它就是做十進制運算的!
ENIAC是十進制大家應該不陌生的吧。因為十進制是人最自然的思考和計算方式,計算機自然就那麼設計了。就是那個用真空管的年代,用十個真空管代表一位上的0~9,於是就十進制了,看,多麼浪費低效,但太符合人類正常思維方式了。自然而然就設計成那樣了。
不過後來兩位天才,圖靈和馮諾依曼改變了這種設計,提出了用二進制做基本運算。其實你學了不同進制的運算後,就會發現他們真的只是進位的不同,+-*/四則運算根本沒有區別,古代用的重量計量是16進制,時間至今還是12進制,這都沒有什麼關係。
改用電子管之後為什麼就用二進制了?這是因為二進制容易判斷。電子管使用電平來標識某一位的值,如上説的高電平代表1低電平代表0,這是用點子元器件很容易判定和區別的,因為它們之間的差別夠大,不會產生誤判。如果現在電子元器件的靈敏度足夠高,可以完全準確的判斷識別0.1V的電壓變動,那麼把0~5V分成10份,電壓每變化0.5V就代表十進制0~9中的一個值,那麼現代計算機也可以做成十進制的了。可惜,現在不能做到,或者即使可以以很高的準確度做到,只要它還會產生誤判,那麼對於計算機這種0錯誤容忍的系統來説它就不可用。
所以,其實是技術不允許做成十進制的。
但更重要的是,我還得強調,不同進製做數學運算根本沒有區別!“加一”對於所有的進制來説都是“加一”,因為“一”對於所有的進制來説都是“一”,是相等的,一致的,是統一定義的,它們之間的區別只是數到幾的時候產生進位罷了。


編輯於 2014-10-23


分享


ivregress截面 截面表什麼意思_工作原理_153


知乎用户


很多事介於説了矯情和不説憋屈之間...


4 人贊同了該回答


最簡單的理解:這是一個龐大的機關獸。(參見“秦時明月”,千萬不要當真!)
———原文在日報長評———
這個問題本身有個瑕疵:0和1指的是什麼?
1. 我大膽的猜測題主指的是彙編代碼。
高級代碼(C++)經過編譯後會轉化為彙編代碼傳遞給硬件,彙編是由一串特定長度的0和1組成。一般而言的64位計算機,就是指可以處理64位長度的彙編代碼。而這一串0和1本身,包含了微指令以及一些變量,根據所處的位置不同,0和1們組成了不同含義的命令。

然後就是題主所問的計算機如何讀懂0和1。以簡單的芯片來説(如MIPS),片上系統由controller和datapath組成(不知怎麼翻譯)。前者可以理解成公司的管理層,後者就是具體幹活的。controller接受了上文所術的微指令,就知道這個彙編代碼是什麼作用(比如“011001”代表讀取數據)。然後controller告訴datapath哪些模塊要工作,數據從哪條唯一的路走。你可以想象一下賽車,從起點到終點只能走一條路。最終,輸入的數據走過規定的路徑,被處理成期望的輸出值。類似的過程不斷上演,大量的數據經過處理後,我們就在顯示器上看到反饋的結果。


2. 如果題主認為0和1指的是高低電壓,那問題本身就不嚴謹了。
數字電路中認為有三種值:0、1和高電阻(在設計中還可認為有“不確定”狀態)。而真實的電路中沒有確切的高低電壓值,不同系統規定了不同的電壓範圍代表不同的值。你甚至可以把電壓分成十級,就得到了十進制。只能説現實是相對的,自然界沒有明確的0|1之別,人類設計出來的規則讓計算機識別了0|1。

3. 扯遠一些。硅技術之後的有力候選者--量子計算機。量子本身有多個疊加態,不只兩個,所以可以做到0、1、2、3……到時問題就變成了“計算機如何識別0、1、2、3?”


知識背景:VLSI Master

歡迎指正,謝謝讀到結尾。

25/10/14

發佈於 2014-10-25


分享



ivregress截面 截面表什麼意思_ivregress截面_169


Zhaoyang


面向梯度編程


4 人贊同了該回答


何謂讀懂呢。在標準大氣壓、100攝氏度下水會沸騰,0.99倍標準大氣壓或者99攝氏度下就不會,那麼水有知覺麼,能感覺到外界的環境,智能地決定自己沸騰還是不沸騰?同理。


發佈於 2016-04-26


分享



ivregress截面 截面表什麼意思_ivregress截面_170


郭靖


知行合一 行勝於言.特別能吃苦,特別能戰鬥


1 人贊同了該回答


本質上是電流在電路中的流動,匯合,分解,而最初的電流狀態來自手按鍵盤。我也一直思考過這個問題,硬件電路為什麼能識別數字呢,雖然只有0和1兩個數,也不可思議。後來,想明白了,是人手按鍵盤帶來的電路狀態改變,我們這個抽象的計算機世界,所有的所有都是來自人手按鍵盤帶來的電路狀態改變。這個電路狀態改變被存儲,因為是電路對電路,也很容易被識別


發佈於 2016-02-03


分享



ivregress截面 截面表什麼意思_bc_171


趙丙峯


11 人贊同了該回答


No,它根本不懂。就像算盤不懂你撥珠子時心中默唸的口訣類似。但是這樣並不妨礙最後得出你想要的結果。


至於為什麼在它完全不懂的情況下,還能搞出點有用的東西,這是另一個問題。


發佈於 2014-10-21


分享



ivregress截面 截面表什麼意思_5e_172


胡越


我對這世界有點好奇


110 人贊同了該回答


這個問題,我必須回答一下,作為一個cs專業的學生。。。我到大二其實都不是很清楚,直到我遇到了一本神作。。。

閒話不多講,有一本神作!絕對的神作!Charles Petzold的《Code》,這本書可以説,下至5歲孩童,上至90歲老嫗,無論你是計算機小白,還是大神,都會從這本書中有所收穫。真是後悔沒早點看到這本書,讓我一個無比討厭自己專業的人,都開始熱愛這個偉大的創造。

ps:如果你真正想了解計算機的原理的話。。。我覺得沒人能比這本書講的更通俗了

http://book.douban.com/subject/1024570/


打個廣告哈:

今年港美股大牛市,如果你錯過15年A股,16年樓市,17年的大牛市就不要錯過了哈 盈透(美國合法券商)開户鏈接https://snowballsecurities.com/open?r=62195 任何問題可以諮詢我


編輯於 2017-09-21


分享



ivregress截面 截面表什麼意思_ivregress截面_173


王貓貓


前班級文藝委員/現副班長


2 人贊同了該回答


0 1對應到高低電平

基礎邏輯門電路實現電路的邏輯關係

邏輯門加上向前反饋就能實現狀態(時鐘)

然後就能實現操作了

23333

發佈於 2016-02-09


分享



ivregress截面 截面表什麼意思_bc_174


Kross


軟件開發工程師


1 人贊同了該回答


並不是計算機能讀懂0和1。

計算機是人造的機器,0和1也是人類的思維邏輯中兩個數字符號而已,因此,計算機“讀懂”0和1,是我們人類特意把它設計成這樣子的。

發佈於 2016-02-09


分享



ivregress截面 截面表什麼意思_ivregress截面_175


Pluto Hades


學而不思則罔,思而不學則殆。


雖然這裏集中了很多幹貨,但是我還是想吐槽:計算機根本就不懂0和1。計算機什麼都不懂,全都是我們寫好的規則。它真的就只是個計-算-機


發佈於 2016-03-29


分享



ivregress截面 截面表什麼意思_ivregress截面_176


方子春


西瓜啊,西瓜,你怎麼長了個豬尾巴


6 人贊同了該回答


- ……………………這問題問得………………就好像你用手推了一下計算機,計算機應聲掉到地上,你會問為啥計算機能讀懂你手的動作嘛……………………計算機會對01序列做出反應也是一樣,只不過它反應得複雜了點是圖靈完全的而已……………………


發佈於 2016-05-01


分享



ivregress截面 截面表什麼意思_5e_177


特斯拉


電子愛好


2 人贊同了該回答


計算機最底層應用二進制,所以問題不是計算機為什麼能讀懂1和0,而是我們限定它只能讀出0和1。
1、開關、通斷是自然界最普遍的現象,應用於計算機設計是最方便的。拿數字來説,在我們看來的1在計算機看來是00000001,在我們看來的2,在計算機看來是00000010.我們看來的A、B、C、D在計算機也有不同的編碼,具體查看ASCII編碼。
2、計算機讀懂0和1,靠的是不同的電壓水平,對於我們來説是0和1,對於它來説其實就是低電平和高電平,不同的低電平高電平串代表了不同的指令含義。
3、計算機的邏輯就是基於2進制建立的。一個字節8位,是2的3次方,一個字母編碼1個字節,一個漢字編碼2個字節,一段指令編碼1個KB,1024個字節。所以計算機的性能不光要看CPU的頻率,還要看他的內存和緩存數。


發佈於 2016-04-10


分享



ivregress截面 截面表什麼意思_bc_178


八里土人


互聯網,安全,網絡,科普


1 人贊同了該回答


回答得太高大上了。

先理解輸入和輸出怎麼用0和1表示。

簡單的模型:一個開關控制一個電燈的亮滅。"開關“相當於輸入的0和1,燈的亮滅相當於輸出的0和1. 這就是一個簡單的計算機了。輸入了0和1,輸出了0和1.

如果使用電子技術(例如強電裏面大家能看見的繼電器技術),那麼A模塊的輸出,就可以做B模塊的輸入。也就是説,輸入給A的是”通“和”斷“(開關),A輸出的也可以是“通斷“。

這就是單模塊的工作原理。記住0和1既可以是輸入,也可以是輸出。0和1是你定義的。你可以把聲音、鍵盤、鼠標等等各種輸入轉換成0和1.比如你按下某個鍵,那麼相當於鍵盤輸出了一系列的開和關的動作。計算結果的0和1表示,可以想象你的屏幕的某個點被點亮和變暗,亮是1,暗是0.

計算機的輸入全部會轉換成按時間軸相關的一系列開關,開和關2個狀態就對應於輸入的”0“和”1“。輸出就對應於”燈“的開關。

計算機裏面所有的”計算“、”存儲“、”通信“,相當於各種元器件間的”開“”關“控制。

但必須注意,這些開關動作是按時間排序的,開關的頻率達到每秒10億次,100億次。開關和開關之間有並行串行關係,開關和開關之間可以配合,開關的動作可以被延時,可以被記錄等等。。。。。。。

這就是所謂的計算機只懂0和1. 因為所有的輸入和輸出,都以2個狀態表示。計算機的處理就是把一系列的0和1的串,變成另外的一個或多個。

發佈於 2016-02-02


分享



ivregress截面 截面表什麼意思_bc_179


房子


在韓計算機工學留學生,本體是文科生。韓娛問題別邀請我。博士在讀。


3 人贊同了該回答


一直想做個萌化版的計算機科普知識的書~
這樣會不會可以吸引更多的萌妹子進入IT學科的世界啊?
——————————————————————
很簡單,程序君告訴電子元件 我有00000101的代碼傳輸給你
然後 若干元件君就説 我們一起來表示這個機器碼吧
於是元件君就用自己是否通電這個萌萌的狀態來表示機器碼

所以來説,計算機不是能讀懂1和0,而是能感受到身體裏可愛的元件君 是否處在萌萌的狀態。

上面的代碼就轉化成

不萌 不萌 不萌 不萌 不萌 萌萌噠 不萌 萌萌噠 不萌

編輯於 2014-10-21


分享



ivregress截面 截面表什麼意思_工作原理_180


假藥郎中


IT雜役,偽裝程序員。


推薦這本書《編碼:隱匿在計算機軟硬件背後的語言》,後半部就是手把手地教你怎麼讓計算機讀懂0和1,並進行存儲和運算的。不要害怕,這本書一點都不深奧,寫得淺顯而有趣。


發佈於 2016-03-07


分享



ivregress截面 截面表什麼意思_ivregress截面_181


王傑


古典又浪漫


10 人贊同了該回答


這個問題真的要打的這麼複雜嗎?

計算機讀懂的不是0和1,它讀懂的是通電和斷電。正常情況下通電是1,斷電是0。
舉個例子,世界上最簡單的計算機,你知道是什麼嗎?

是一個燈泡。


你給它通電,就相當於告訴它1,它便亮了,你給它斷電,就相當於告訴它0,它便滅了。
你以為它懂0,1 ?不不,它懂得是通電還是斷電。
而複雜的計算機道理是一樣的,只是通電斷電的情況複雜的多。


題主都問出這樣的問題了,你們真的好意思説一大堆計算機原理來解答這個問題麼

編輯於 2014-10-22


分享


ivregress截面 截面表什麼意思_工作原理_153


知乎用户


弱智問題別邀請我,沒空。專業問題也別邀請我,不會。特長,眼高手低!


8 人贊同了該回答


我不知道他們為什麼要回答那麼長“科普”
簡單的説,讀懂的不是“1”和“0”,而通過低電平和高電平
這是門電路里的二極管或晶體管的導通特性決定的。
不同器件低電平電壓值不同,但是隻要是判定低電平我們就抽象認為為邏輯“0”
高電平同理。

一個簡單的問題,

@蕭井陌

已經快把數字電子技術的基礎知識講完了

真的很無私啊!

發佈於 2014-10-21


分享



ivregress截面 截面表什麼意思_5e_183


毛毛


專業雙語口活/人類靈魂工程濕


16 人贊同了該回答


因為計算機是腐女⋯⋯


發佈於 2016-02-04


分享


ivregress截面 截面表什麼意思_ivregress截面_184


匿名用户


2 人贊同了該回答


lz,同情你,我也是,嗚嗚嗚。我知道有高低電平的存在,就是想了解最最最原始的工作方式,為什麼理解我們的人這少啊!


發佈於 2013-08-16


分享



ivregress截面 截面表什麼意思_bc_185


楊眀


首先澄清一個概念,關於計算機的概念,什麼是計算機?
  人類發明的工具可以分為兩類:第一類是手腳的延伸。諸如汽車、飛機等等;第二類是大腦的延伸。諸如算盤、手搖計算機、電子計算機等等。廣義的計算機是指大腦的延伸。我們通常説的計算機,一般指“二進制電子計算機”,是狹義的,只是計算機裏面一個小小的分支,雖然目前普及程度最高,但可以預見,將來一定會被其它形式的計算機取代,如同電子計算機取代算盤等一樣。
  前面為什麼要強調“二進制”呢?因為,計算機不僅有二進制,還有其它進制的計算機。算盤等就不是二進制,即使是電子計算機,也有不是二進制的,運算放大器就是為模擬運算設計的。
  電子時代,二進制與非二進制的競爭,以二進制完勝落幕。人們為什麼選擇了二進制?原因其實很簡單——信息判讀與表示,簡單準確。夜深人靜,隔壁一對情侶呢噥私語,你無法聽清他們説話的內容,但卻可以知道他們説沒説話。辨識有沒有聲音和辨識聲音的具體內容,前者簡單太多了。同理,辨識有沒有電壓和辨識電壓值是多少,前者簡單太多了。信息判讀如此,信息表示同樣如此。
  既然選擇了二進制,電路自然是要按照二進制的特點來設計的,因此誕生了“數字電路”。我們知道,二進制只有兩個符號,0和1,每一位只有兩種狀態,0或者1。據此而設計出來的電路也就只有兩種狀態,高電平或者低電平,用來表示二進制的兩種狀態,這就是“數字電路”。由於數字電路只能表示兩種狀態,0或者1,因此任何0和1以外的東東,必須轉換成0與1的組合才能表示,比如2必須轉換成10,3轉換成11,……這樣無論什麼內容,在計算機裏的最終表現形式都是0與1的組合。


編輯於 2014-10-22


分享



ivregress截面 截面表什麼意思_工作原理_186


沈曉波


資深知乎助攻師 | 射技濕 | 巴薩球迷 | 金屬黨


13 人贊同了該回答


最基本的,1是電路閉合,0是電路斷開,根據邏輯不同幾個輸入端輸出端又能組成最基本的三種門電路:與門,非門,或門,門與門疊加還能構成與非門、或非門、 與或非門……那這樣只要足夠多的這些基本單元,就可以運算非常複雜的東西了。