電路的發明,使得計算機的速度大幅提高
布林代數、二進位制與電路的關係
20 世紀,隨著繼電器電路的發展,許多科學家開始將二進位制、布林代數和電路聯絡到一起,最終,由美國一位名為克勞德·夏農(Claude Shannon)的數學家做出了完整闡釋。
1938 年,就讀於麻省理工學院的夏農發表了他那篇著名的碩士論文《繼電器與開關電路的符號分析》( A Symbolic Analysis of Relay and Switching Circuits),奠定了數位電路的理論基礎,這篇論文至今仍佔據著重要的地位。
克勞德·艾爾伍德·夏農(Claude Elwood Shannon),美國數學家、電氣工程師、資訊理論創始人
布林代數和電路的關係
布林代數裡有真和假兩個值;而開關電路也有兩種狀態:接通和斷開。如果我們將真表示為接通,假表示為斷開,我們就可以用電路實現布林運算了!
繼電器電路就是一種典型的開關電路。當我們用 A、B 等字母表示開關電路,將兩者串聯就可以表示邏輯與,將兩者並聯就可以表示邏輯或,邏輯非的實現也容易表示。
我們看一個簡單的例子,如下圖:
- 圖(a)電路中,只有兩個開關都閉合的時候,指示燈才會亮;
- 圖(b)電路中,只要有任何一個開關閉合,指示燈都會亮
- 圖(c)電路中,開關斷開時燈泡才亮,開關閉合時燈泡反而不亮
有了與、或、非 3 種基礎邏輯電路,異或等複雜邏輯電路也就不難搭建了。
如此一來,電路就徹底數字化了,原本物理的連線可以用數學來表示,是為數位電路。
夏農認為,基於布林代數,再複雜的電路都可以用表示式條理清晰地設計出來,更重要的是可以等效化簡。
夏農的研究成為後來二進位制機電計算機和電子計算機強大的理論支柱。
邏輯閘
我們將布林運算中常用的電路,作為一個基礎的器件使用,稱為元器件(也就是最基礎的器件了)。例如實現與運算的就是與門,實現或運算的就是或門。
工程師們不關心這些元器件的內部實現,更關注當代表 0 或 1 的訊號從它們的輸入端進去,從輸出端出來的是 0 還是 1。這種透過邏輯電路實現二進位制訊號轉換的元器件稱為邏輯閘(logic gate)。
門的概念很形象,二進位制資料可以從門透過,也可能被門擋住。下圖為 IEEE 和 IEC 標準中規定的邏輯閘符號,統一的矩形表示更有利於繪製複雜的積體電路,訊號從矩形左側進入,從矩形右側輸出:
圖片來自《數位電子技術基礎》閻石.第5版,下同。
邏輯閘和二進位制運算的關係
我們知道,二進位制只有 0 和 1 兩種數字;而用邏輯閘,可以很好的實現二進位制的加減乘除。
例如,我們將二進位制數中的 0 代表布林代數中的 false, 二進位制數的 1 代表布林代數的 true。
我們來看看二進位制的加減乘除:
假設我們要實現加法(加法最簡單),如何用邏輯閘實現呢?我們先實現只有一位二進位制數的兩兩相加。我們假設兩個加數為 A,B,本位和為 S,進位為 CO,那麼我們可以得到電路的真值表(真值表列出了輸入和輸出的關係。用於設計電路用的,數位電路中會講到):
然後,我們就可以用幾個邏輯閘,實現這個加法的邏輯(更多細節後續會在《數位電路》專欄裡展開講):
我們可以把上述電路,作為一個新的邏輯閘,稱之為半加器:
有了半加器,我們可以將多個半加器組合起來,就可以實現多位二進位制數的加法了。
我們繼續來看看減法、乘法和除法:
我們可以看到二進位制算術運算的兩個特點:
- 二進位制數的乘法運算,可以透過若干次的“被乘數(或零)左移 1 位”和“被乘數(或零)與部分積相加”這兩種操作完成
- 二進位制數的除法運算能透過若干次的“除數右移 1 位”和“從被除數或餘數中減去除數”這兩種操作完成
原理:
在二進位制下,(0001)2 左移一位,就是 (0010)2, 從 1 變成了 2,放大了 2 倍。相當於小數點往右移動。
就好比十進位制下,100.00 的小數點往右移一位,就變成了 1000.0,放大了十倍。
所以,如果我們能完成減法的電路實現,那麼加、減、乘、除運算就全部可以用“移位”和“相加”兩種操作實現了。還記得我們學過的補碼嗎?它可以將減法轉化為加法。
所以,我們只用加法器,就可以完成二進位制的加減乘除,這使運算電路的結構大為簡化。這也是數位電路中普遍採用二進位制算術運算的重要原因之一。
組合邏輯電路
邏輯閘像一塊塊標準化的積木,我們可以用這些積木靈活地搭建出實現各種功能的組合邏輯電路。例如,我們可以實現加法器,乘法器,減法器,除法器;
然後,如果我們要解決數學問題,例如解方程,就可以先設計電路,然後實現電路。龐雜的計算機電路正是靠著一扇扇這樣的門組合而成的。
開關電路僅僅是邏輯電路的實現途徑之一,其實不論任何材料,所組成的基礎元件只要能表達出兩種狀態、能在兩種狀態之間切換,並能將狀態傳遞給其他基礎元件,都可以用來實現邏輯電路以及邏輯閘:
- 我們可以用齒輪和按鈕等材料組成的,純機械的繼電器來製作邏輯閘
- 在小說《三體》中,有提到用士兵實現邏輯閘的例子
- 到後期我們會講到真空管,它開關起來比繼電器更快
- 最後我們會講到電晶體,也是我們現在用的計算機內部採用的技術。
邏輯閘一旦實現,二進位制計算機的建造就像搭積木一樣簡單了。這種基礎元件的等效性,是可以用不同材料來建造計算機的本質原因。
小結
由於布林代數 跟二進位制非常類似,例如可以用 true 代表 1, false 代表 0, 很多運算也可以用電路來實現,因此也將布林代數成為邏輯代數或者開關代數。