第四章 加法器
來自專欄 0與1的世界
加法計算的方法:從低位到高位,相同數位上的數相加,在加上低位進位的數,即為和的當前位的值。在任何一個數位上,都可看作三個一位數相加(沒有進位的可以看做進0)。
理解了二進位與其加法運算方法之後,接下來就要使用繼電器真正創造一個可以計算加法的機器-加法器。
這裡要特別提醒一下,因為是用燈泡來代表二進位數,一個燈泡代表二進位數中的一位,因為燈泡數量有限,設計加法器的時候,我們只能設計出有限位數的數(有限的燈泡)相加的加法器。
我們將設計一個八位的加法器(輸入的二進位數最大是八位)。
讓我們細細回想兩個二進位數相加到底是如何計算出結果的?
在任何一個數位上,都可看作三個一位數相加(沒有進位的可以看做進0)。
依照這一條,先設計一個能計算三個一位數相加的電路。能計算三個一位數相加的電路被稱作全加器。
從低位到高位,相同數位上的數相加,在加上低位進位的數,即為和的當前位的值。
依照這一條,則可以計算和的各個數位上的值,把用全加器計算出來的各個數位上的值組合起來,即是和的值,這個電路也被叫做加法器了。
全加器的設計思路
三個二進位一位數相加,所以輸入為三個開關。
三個二進位的一位數相加,和最大為1+1+1=11(二進位),所以輸出為兩個燈泡。
所以全加器的示意圖應當是下面這樣的。中間的電路圖就是我們需要尋找的。
開關與燈泡的映射關係(輸入與輸出的對應關係列表),被叫做真值表。
為了滿足A+B+C=D2D1的關係,全加器的真值表應當滿足:
開關A 開關B 開關C D2燈泡(高位) D1燈泡(低位)
0 0 0 0 0(A+B+C=D2D1 => 0+0+0=00 => 0+0+0=0)
0 0 1 0 1(A+B+C=D2D1 => 0+0+1=01 => 0+0+0=1)
0 1 0 0 1(A+B+C=D2D1 => 0+1+0=01 => 0+1+0=1)
0 1 1 1 0(A+B+C=D2D1 => 0+1+1=10 => 0+1+1=2)
1 0 0 0 1(A+B+C=D2D1 => 1+0+0=01 => 1+0+0=1)
1 0 1 1 0(A+B+C=D2D1 => 1+0+1=10 => 1+0+1=2)
1 1 0 1 0(A+B+C=D2D1 => 1+1+0=10 => 1+1+0=2)
1 1 1 1 1(A+B+C=D2D1 => 1+1+1=11 => 1+1+1=3)
連接八個全加器稱為一個八位加法器。
如果我們只關心八位加法器的加法功能,不在意八位加法器的內部結構,則可以把八位加法器抽象成
全加器設計
三個一位數相加在計算時,又是先計算兩個一位數相加,然後在加上第三個一位數。
所以設計全加器的時候,可以先設計能計算兩個一位數相加的"半加器",然後用這個半加器再加上低一位的進位,組成全加器。
半加器
兩個一位數相加,所以輸入為兩個開關。
兩個二進位的一位數相加,和最大為1+1=10,所以輸出為兩個燈泡。
所以全加器的示意圖應當是下面這樣的。中間的電路圖就是我們需要尋找的。
全加器電路
至此,設計一個加法器,現在已經簡化成求待求電路一、待求電路二、待求電路三的電路!三個電路的真值表在先前的步驟中也已經推導出來了,那麼根據真值表怎麼設計電路?電路中有一些基本電路,猶如九九乘法表一樣,屬於應當知道的,不需要單獨設計的。以上幾個電路即屬於這種情況。接下來我們將學習一些基礎電路。
常用的電路
與電路
與電路滿足待求電路一的真值表
抽象
或電路
或電路滿足待求電路三的真值表
抽象
非電路
抽象
一個與門,一個非門,按照圖示連在一起形成了一個最常見的運算,與非運算。
一個或門,一個與非門,一個與門,按照圖示連在一起形成了一個最常見的運算,異或運算。
異或電路滿足待求電路二的真值表
至此待求電路一、待求電路二、待求電路三已經全部求出,一個8位加法計算器所需要的電路已經出來了。設計完畢。
推薦閱讀:
※如何判斷本地網路好壞?高帶寬等於低延遲嗎?
※網工必備的四款軟體
※網路層:路由器
※塊存儲、文件存儲、對象存儲這三者的本質差別是什麼?
※未來十年,人類還需要400億個感測器