計算機全加器簡單實現

概述

用了這麼久計算機, 都知道計算機有一個核心部件叫 CPU, 而 CPU中有一個小部件叫做全加器. 它是用來做什麼的呢? 看名字就知道了, 做加法運算用的. 那麼如何實現一個全加器呢?

你以爲這又是一篇計算機內部原理的文章? 不, 放開那個女孩, 和我一起走進中學物理的課堂.

問題

先把問題拋出來, 我們的全加器大概就長這樣.

image-20200519201933365

輸入端放進來兩個數字, 然後輸出端返回兩個數字的和.

拋開全加器不說, 首要問題是: 用什麼來標識輸入和輸出的數字呢?

輸入輸出

當然了, 輸出輸出端都是導線, 要通過電流來表示. 那就使用電的特徵咯.

方案一

簡單粗暴, 使用電壓. 數字1表示爲1V, 數字10就是10V.

但是, 這個時候如果來了一個數字是10萬呢? 整個10萬 V 的電壓, 別鬧, 那還怎麼抱在手裏愉快的玩耍, 難道你不想玩手遊了?

方案二

既然電壓太高不可取. 人體的安全電壓是36V, 也就是隻要電壓不高於36V 就可以了. 我們可以用一根導線來表示十進制的一位, 這樣就可以將電壓控制在0-9V 之間了. 嗯, 安全.

但是, 電壓是不穩定的. 但是可以規定 8.6-9.5V=9. 嗯, 這個方案確實可行, 至少咱沒有看出什麼問題來. (據說現在已經有十進制的了??) 但是彆着急, 看下一個方案.

方案三

想一下, 除了電壓, 電還有什麼特徵呢? 電流? 功率? 開閉? 就是開閉. 一個電路要麼連通, 要麼斷開, 簡單明瞭沒有歧義.

用電路的開閉如何表示數呢? 表示不了十進制, 還表示不了二進制麼..

好, 就是它了, 實現簡單方便.

輸入輸出的問題解決了, 剩下的就是全加器的構造了, 二進制的運算就不說了. 現在, 全加器應該長這樣:

image-20200519204133623

爲什麼是三個輸入數字呢? c是進位. 那爲什麼是兩個輸出呢? y 是進位.

電路的邏輯運算

在開始全加器之前, 先來複習一下高中的物理知識.

還記得這個東西麼?

image-20200519204953181

畫的醜了一些, 湊合看. 他可以將電場轉換爲磁場. 好, 下面的實現都是基於它的. 電磁感應. 繼電器就是基於它實現的.

邏輯電路

看下面電路:

image-20200519210128849

這是一個簡單的並聯電路, 實現了邏輯或, 只要有一個電路接通, 整體就是通路. 當然了, 串聯電路就是邏輯與了. 那邏輯非如何處理呢? 這就要用到上面提到的繼電器了.

邏輯非

image-20200519210646531

圖中的 J 表示繼電器.

右側電路的開關正常情況處於連通狀態, 當左側通電後, 會將右側開關吸附起來, 令其斷開. 這就實現了邏輯非. 當然, 的實現也可以通過繼電器來傳遞.

邏輯與

image-20200519211705586

這就是一個通過繼電器實現的與門.

當然了, 或門也是一樣的, 只是將右側的串聯電路改成並聯電路就成了.

邏輯異或

有了與或非, 把他們三拼一拼, 異或就有了.

A xor B = (!A && B) || (A && !B)

來來來, 看圖了.

image-20200519212842567

這就是一個異或了. 有沒有發現什麼? 可以將電路參與到邏輯運算中.

好啦, 足夠了. 開始着手實現全加器.

全加器

到這, 想必各位看官也知道爲什麼在全加器之前要先說邏輯電路了吧. 沒錯, 就是要把01的加法運算, 轉換成邏輯運算.

列一張真值表:

image-20200519213341345

真值表在此, 請運用你們數值計算的知識, 把邏輯表達式推出來吧. 請原諒我, 下面表達式是我嫖來的, 直接把化簡後的邏輯表達式拿來了.

x = a xor b xor c

y = c && (a xor b) || (a && b)

算一算一個全加器一共用到了多少繼電器? 其中: 與(2個), 或(2個), 亦或(8個).

x 需要2個亦或, 共16個繼電器. y 需要2個與,1個亦或,1個或, 共14個繼電器. 整個全加器共需30個繼電器. 又因爲 x 和 y 的計算在同一個全加器中, a xor b的操作, xy 可以公用同一個, 所以減少一個亦或, 共22個繼電器. 據說還能少, 嗯, 咱也不知道.

以上, 一個超級簡陋的全加器橫空出世. 將上面的邏輯表達式放到電路里, 就能返回輸入結果相加後的結果.


既然有全加器, 那是不是也有半加器? 嗯, 有. 半加器就是將兩個位相加, 產生進位, 不考慮上一個來的進位. 簡單說, 全加器有3個運算數, 半加器只有兩個.


有了全加器, 是不是還得有全減器? 偷偷告訴你, 減法運算就是補碼的加法運算.

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