四位計(jì)算機(jī)的原理及其實(shí)現(xiàn)方法
你是否想過(guò),計(jì)算機(jī)為什么會(huì)加減乘除?或者更直接一點(diǎn),計(jì)算機(jī)的原理到底是什么?Waitingforfriday有一篇詳細(xì)的教程,講解了如何自己動(dòng)手,制作一臺(tái)四位計(jì)算機(jī)。從中可以看到,二進(jìn)制、數(shù)理邏輯、電子學(xué)怎樣融合在一起,構(gòu)成了現(xiàn)代計(jì)算機(jī)的基礎(chǔ)。
一、什么是二進(jìn)制?
首先,從最簡(jiǎn)單的講起。
計(jì)算機(jī)內(nèi)部采用二進(jìn)制,每一個(gè)數(shù)位只有兩種可能"0"和"1",運(yùn)算規(guī)則是"逢二進(jìn)一"。舉例來(lái)說(shuō),有兩個(gè)位A和B,它們相加的結(jié)果只可能有四種。
▲二進(jìn)制表格
這張表就叫做"真值表"(truth table),其中的sum表示"和位",carry表示"進(jìn)位"。如果A和B都是0,和就是0,因此"和位"和"進(jìn)位"都是0;如果A和B有一個(gè)為1, 另一個(gè)為0,和就是1,不需要進(jìn)位;如果A和B都是1,和就是10,因此"和位"為0,"進(jìn)位"為1。
二、邏輯門(mén)(Logic Gate)
布爾運(yùn)算(Boolean operation)的規(guī)則,可以套用在二進(jìn)制加法上。布爾運(yùn)算有三個(gè)基本運(yùn)算符:AND,OR,NOT,又稱(chēng)"與門(mén)"、"或門(mén)"、"非門(mén)",合稱(chēng)"邏輯門(mén)"。它們的運(yùn)算規(guī)則是:
AND:如果( A=1 AND B=1 ),則輸出結(jié)果為1。
OR:如果( A=1 OR B=1 ),則輸出結(jié)果為1。
NOT:如果( A=1 ),則輸出結(jié)果為0。
兩個(gè)輸入(A和B)都為1,AND(與門(mén))就輸出1;只要有任意一個(gè)輸入(A或B)為1,OR(或門(mén))就輸出1;NOT(非門(mén))的作用,則是輸出一個(gè)輸入值的相反值。它們的圖形表示如下:
▲邏輯門(mén)
三、真值表的邏輯門(mén)表示
現(xiàn)在把"真值表"的運(yùn)算規(guī)則,改寫(xiě)為邏輯門(mén)的形式。
先看sum(和位),我們需要的是這樣一種邏輯:當(dāng)兩個(gè)輸入不相同時(shí),輸出為1,因此運(yùn)算符應(yīng)該是OR;當(dāng)兩個(gè)輸入相同時(shí),輸出為0,這可以用兩組AND和NOT的組合實(shí)現(xiàn)。***的邏輯組合圖如下:
再看carry(進(jìn)位)。它比較簡(jiǎn)單,兩個(gè)輸入A和B都為1就輸出1,否則就輸出0,因此用一個(gè)AND運(yùn)算符就行了。
現(xiàn)在把sum和carry組合起來(lái),就能得到整張真值表了。這被稱(chēng)為"半加器"(half-adder),因?yàn)樗豢紤]了單獨(dú)兩個(gè)位的相加,沒(méi)有考慮可能還存在低位進(jìn)上來(lái)的位。
四、擴(kuò)展的真值表和全加器
如果把低位進(jìn)上來(lái)的位,當(dāng)做第三個(gè)輸入(input),也就是說(shuō),除了兩個(gè)輸入值A(chǔ)和B以外,還存在一個(gè)輸入(input)的carry,那么問(wèn)題就變成了如何在三個(gè)輸入的情況下,得到輸出(output)的sum(和位)和carry(進(jìn)位)。
這時(shí),真值表被擴(kuò)展成下面的形式:
如果你理解了半加器的設(shè)計(jì)思路,就不難把它擴(kuò)展到新的真值表,這就是"全加器"(full-adder)了。
#p#
五、全加器的串聯(lián)
多個(gè)全加器串聯(lián)起來(lái),就能進(jìn)行二進(jìn)制的多位運(yùn)算了。
先把全加器簡(jiǎn)寫(xiě)成方塊形式,注明三個(gè)輸入(A、B、Cin)和兩個(gè)輸出(S和Cout)。
然后,將四個(gè)全加器串聯(lián)起來(lái),就得到了四位加法器的邏輯圖。
六、邏輯門(mén)的晶體管實(shí)現(xiàn)
下一步,就是用晶體管做出邏輯門(mén)的電路。
先看NOT。晶體管的基極(Base)作為輸入,集電極(collector)作為輸出,發(fā)射極(emitter)接地。當(dāng)輸入為1(高電平),電流流向發(fā)射極,因此輸出為0;當(dāng)輸入為0(低電平),電流從集電極流出,因此輸出為1。
接著是AND。這需要兩個(gè)晶體管,只有當(dāng)兩個(gè)基極的輸入都為1(高電平),電流才會(huì)流向輸出端,得到1。
***是OR。這也需要兩個(gè)晶體管,只要兩個(gè)基極中有一個(gè)為1(高電平),電流就會(huì)流向輸出端,得到1。
七、全加器的電路
將三種邏輯門(mén)的晶體管實(shí)現(xiàn),代入全加器的設(shè)計(jì)圖,就可以畫(huà)出電路圖了。
(點(diǎn)擊看大圖)
按照電路圖,用晶體管和電路板組裝出全加器的集成電路。
左邊的三根黃線(xiàn),分別代表三個(gè)輸入A、B、Cin;右邊的兩根綠線(xiàn),分別代表輸出S和Cout。
八、制作計(jì)算機(jī)
將四塊全加器的電路串聯(lián)起來(lái),就是一臺(tái)貨真價(jià)實(shí)的四位晶體管計(jì)算機(jī)了,可以計(jì)算0000~1111之間的加法。
電路板的下方有兩組各四個(gè)開(kāi)關(guān),標(biāo)注著"A"和"B",代表兩個(gè)輸入數(shù)。從上圖可以看到,A組開(kāi)關(guān)是"上下上上",代表1011(11);B組開(kāi)關(guān) 是"上下下下",代表1000(8)。它們的相加結(jié)果用五個(gè)LED燈表示,上圖中是"亮暗暗亮亮",代表10011(19),正是1011與1000的 和。
九、結(jié)論
雖然這個(gè)四位計(jì)算機(jī)非常簡(jiǎn)陋,但是從中不難體會(huì)到現(xiàn)代計(jì)算機(jī)的原理。完成上面的四位加法,需要用到88個(gè)晶體管。雖然當(dāng)代處理器包含的晶體管數(shù)以?xún)|計(jì),但是本質(zhì)上都是上面這樣簡(jiǎn)單電路的累加。
【編輯推薦】