之前,,我們討論了計算機(jī)如何從電機(jī)機(jī)械設(shè)備演變而來,,這些設(shè)備通常采用十進(jìn)制表示數(shù)字——例如,齒輪上的齒——到使用晶體管的電子計算機(jī),,晶體管可以打開或關(guān)閉電流的流動,。幸運(yùn)的是,即使只有兩種電流狀態(tài),,也能表示重要信息,。我們稱這種表示為二進(jìn)制——字面意思是“兩個狀態(tài)”。 你可能會認(rèn)為只有兩種狀態(tài)并不多,,這一點你說得對,!但這正是表示“真”和“假”值所需的。在計算機(jī)中,,電流流動的“開”狀態(tài)表示真,,而沒有電流流動的“關(guān)”狀態(tài)表示假。 我們還可以將二進(jìn)制寫作1和0,,而不是“真”和“假”——它們只是同一信號的不同表示,。 實際上,可以使用晶體管做的不僅僅是開關(guān)電流,,還可以實現(xiàn)不同的電流水平,。一些早期的電子計算機(jī)是三元的,即三種狀態(tài),,甚至是五元的,,使用五種狀態(tài)。問題是,,中間狀態(tài)越多,,保持它們分離的難度就越大——如果你的智能手機(jī)電池開始耗盡,或者因為有人在附近使用微波爐而產(chǎn)生電噪聲,,信號可能會混淆……而這個問題在晶體管每秒切換數(shù)百萬次狀態(tài)時只會變得更糟,!因此,將兩個信號盡可能分開——僅使用“開”和“關(guān)”——為我們提供了最明確的信號,,以最小化這些問題,。 計算機(jī)使用二進(jìn)制的另一個原因是,已經(jīng)存在一個專門處理真和假值的數(shù)學(xué)分支,。它已經(jīng)找到了所有必要的規(guī)則和操作來操縱這些值,。這被稱為布爾代數(shù)! 喬治·布爾是布爾代數(shù)的命名來源,,他是19世紀(jì)自學(xué)成才的英國數(shù)學(xué)家,。他對表示邏輯語句感興趣,這些語句“在亞里士多德的邏輯方法之上,、之下和之外”,,這顯然是以哲學(xué)為基礎(chǔ)的。 布爾的方法允許通過邏輯方程系統(tǒng)和正式地證明真理,,這些方程他在1847年出版的第一本書《邏輯的數(shù)學(xué)分析》中介紹,。在“常規(guī)”代數(shù)中——你可能在高中學(xué)過的那種——變量的值是數(shù)字,對這些數(shù)字的操作是加法和乘法等,。而在布爾代數(shù)中,,變量的值是真和假,操作則是邏輯操作,。 布爾代數(shù)中有三種基本操作:NOT,、AND和OR操作。事實證明,,這些操作非常有用,,因此我們將逐個查看它們。 NOT操作接受一個布爾值,,無論是真還是假,,并對其取反。它將真翻轉(zhuǎn)為假,,假翻轉(zhuǎn)為真,。我們可以寫出一個小邏輯表,顯示輸入下的原始值和應(yīng)用操作后的輸出結(jié)果,。 我們可以輕松地用晶體管構(gòu)建布爾邏輯,。晶體管實際上只是小的電控開關(guān)。它們有三根導(dǎo)線:兩個電極和一根控制線。 當(dāng)你將電流施加到控制線上時,,它允許電流從一個電極流過晶體管,,流向另一個電極。這就像管道上的水龍頭——打開水龍頭,,水就流出,;關(guān)閉水龍頭,水就停止流動,。你可以將控制線視為輸入,,從下方電極來的線視為輸出。 所以,,使用一個晶體管,就有一個輸入和一個輸出,。如果打開輸入,,輸出也會打開,因為電流可以通過它流動,。如果關(guān)閉輸入,,輸出也會關(guān)閉,電流不再通過,。用布爾術(shù)語來說,,當(dāng)輸入為真時,輸出為真,;當(dāng)輸入為假時,,輸出也為假。我們同樣可以在邏輯表中展示這一點,。 不過,,這并不是一個非常有趣的電路,因為它沒有做任何事情——輸入和輸出是相同的,。但是,,我們可以稍微修改這個電路,以創(chuàng)建一個NOT,。我們可以將輸出線從晶體管末端移到前面,。 如果打開輸入,晶體管允許電流流向“接地”,,而輸出線不會接收到電流——所以它將是關(guān)閉的,。接地就像是你家里的水都流向了一根巨大的水管,所以你淋浴時沒有水壓,。 因此在這種情況下,,如果輸入是開,輸出就是關(guān)。不過,,當(dāng)關(guān)閉晶體管時,,電流被阻止流向接地,所以電流會流過輸出線,。因此,,輸入將是關(guān),輸出將是開,。這與NOT邏輯表一致,,因此恭喜你,剛剛構(gòu)建了一個計算NOT的電路,!稱它們?yōu)镹OT門——稱它們?yōu)殚T,,因為它們控制著電流的路徑。 AND布爾操作接受兩個輸入,,但仍然有一個輸出,。在這種情況下,只有當(dāng)兩個輸入都為真時,,輸出才為真,。就像說真話。如果你哪怕撒了一點謊,,你就沒有完全誠實,。 為了構(gòu)建一個AND門,需要兩個晶體管連接在一起,,這樣我們就有兩個輸入和一個輸出,。 如果僅打開晶體管A,電流不會流動,,因為電流被晶體管B阻止,。或者,,如果晶體管B是開,,而晶體管A是關(guān),同樣,,電流也無法通過,。只有當(dāng)晶體管A和晶體管B都打開時,輸出線才有電流,。 最后的布爾操作是OR——只需一個輸入為真,,輸出就為真。OR語句如果兩個事實都為真,,也是正確的,。OR語句唯一為假的時候是兩個輸入都為假。 從晶體管構(gòu)建一個OR門需要一些額外的導(dǎo)線。我們不是將兩個晶體管串聯(lián)在一起——一個接一個,,而是將它們并聯(lián),。 我們從電流源引出導(dǎo)線連接到兩個晶體管。使用一個小弧線來表示導(dǎo)線跳過彼此,,并沒有連接,,盡管它們看起來像是交叉的。如果兩個晶體管都關(guān)閉,,電流會被阻止流向輸出,,所以輸出也是關(guān)。現(xiàn)在,,如果僅打開晶體管A,,電流可以流向輸出。如果晶體管A是關(guān),,但晶體管B是開,,同樣情況,電流也能通過,。基本上,,如果A或B是開,,輸出也是開。如果兩個晶體管都是開,,輸出仍然是開,。 現(xiàn)在我們有了NOT、AND和OR門,,我們可以拋開構(gòu)成它們的晶體管,,提升到一個更高的抽象層次。工程師們用的這些門的標(biāo)準(zhǔn)表示是:NOT用一個帶點的三角形表示,,AND用一個D表示,,OR用一個飛船表示。 雖然這些不是正式名稱,,但我喜歡這樣想,。以這種方式表示和思考它們,可以讓我們構(gòu)建更大的組件,,同時保持整體復(fù)雜性相對不變——只要記住,,那堆晶體管和導(dǎo)線仍然在那里。 例如,,另一個在計算中有用的布爾操作稱為異或——簡稱XOR,。XOR類似于普通的OR,但有一個不同之處:如果兩個輸入都為真,則XOR為假,。XOR唯一為真的情況是一個輸入為真,,而另一個輸入為假。 從晶體管構(gòu)建XOR會比較混亂,,但我們可以展示如何從三個基本的布爾門創(chuàng)建一個XOR,。 有兩個輸入——A和B——和一個輸出。從一個OR門開始,,因為邏輯表幾乎與OR相同,。唯一的問題是,當(dāng)A和B為真時,,邏輯與OR不同,,我們需要將輸出置為假。為了實現(xiàn)這個,,需要使用兩個AND門和一個NOT門,。 可以通過將A和B輸入到AND門中,創(chuàng)建A和B的AND輸出,,再將A與NOT B結(jié)合到另一個AND門,。將這兩個輸出連接到OR門就構(gòu)建好了XOR。這種使用基本門組合的方式通常稱為“組合邏輯電路”,。 既然我們可以構(gòu)建XOR門,,實際上可以構(gòu)建出更復(fù)雜的電路,也就是說,,門與門之間的連接可以像輸入一樣形成輸出,。可以創(chuàng)建加法器電路、乘法器電路,,甚至是完整的CPU——它們都只是由相同的幾種門組合而成,。 |
|
來自: 老胡說科學(xué) > 《待分類》