布爾邏輯的應(yīng)用
引言
您是否曾想過計(jì)算機(jī)是如何完成像支票簿核算、下棋或文檔拼寫檢查那樣的工作的?僅僅在幾十年之前,這些事情只有人類才可以完成,而現(xiàn)在計(jì)算機(jī)便可以輕輕松松地完成這些任務(wù)。令人好奇的是,由硅和導(dǎo)線制成的“芯片”究竟是如何完成看起來需要人類思維才能完成的工作的?
如果您希望從本質(zhì)上深入了解這一問題的答案,首先需要了解布爾邏輯的概念。布爾邏輯最初是由喬治·布爾于19世紀(jì)中葉提出的,它可將許多意想不到的事情映射為位和字節(jié)。有關(guān)布爾邏輯最重要一點(diǎn)是,一旦您真正掌握了它,就會覺得布爾邏輯(或者理解計(jì)算機(jī)工作方式所需的最基本的知識)相當(dāng)簡單。在本篇博聞網(wǎng)文章中,我們將首先討論一些簡單的邏輯“門電路”,然后了解如何將這些門電路進(jìn)行組合以實(shí)現(xiàn)一些有用的元件。
簡單的門電路
您需要了解三種、五種或七種簡單的門電路,具體取決于您要采用的門電路種類計(jì)算方式(很快您就會知道原因)。您可以對這些簡單的門電路進(jìn)行組合,以實(shí)現(xiàn)任何想要的數(shù)字元件。這些門電路看起來有些枯燥,并且極其簡單,但在下面幾節(jié)中我們將看到一些有趣的組合,這些將使你感到興奮。如果您還不了解位和字節(jié)的概念,請?jiān)诶^續(xù)之前閱讀位和字節(jié),這將會很有幫助!
最簡單的門電路稱為“反相器”,也叫做非門。這種門電路的輸入為0或1,而輸出則為其反相即1或0。下表顯示了非門的邏輯表以及在電路圖中用來表示非門的標(biāo)準(zhǔn)符號:
|
| |||||||
|
|||||||
可以在該圖中看到非門有一個(gè)稱為A的輸入端和一個(gè)稱為Q(用“Q”表示輸出是因?yàn)槿绻褂昧恕癘”,會很容易與0混淆)的輸出端。該表顯示了非門的工作方式,并且原理非常簡單:將0應(yīng)用于A時(shí),Q會產(chǎn)生1;將1應(yīng)用于A,則Q會產(chǎn)生0。
與門對兩個(gè)輸入A和B執(zhí)行邏輯“與”運(yùn)算:
|
| ||||||||||||||||
|
||||||||||||||||
與門的工作原理是”如果A和B都為1,則Q應(yīng)該為1?!澳梢栽谂c門的邏輯表中查看其工作方式。逐行閱讀該表,如下所示:
|
| ||||||||||||||||||||
| ||||||||||||||||||||
下一種門電路是或門。其基本工作原理是“如果A為1,或B為1(或兩者都為1),則Q為1?!?
|
| ||||||||||||||||
|
||||||||||||||||
以上為三種基本的門電路(此為門電路種類的一種計(jì)算方法)。通常還需知道其他兩種門電路:與非門和或非門。這兩種門電路不過是與門或者或門與非門的組合。如果將這兩種門電路包括在內(nèi),則門電路將增加到5 種。以下是與非門和或非門的基本工作方式——您會發(fā)現(xiàn)它們不過是與門和或門的相反狀態(tài):
|
| ||||||||||||||||
|
||||||||||||||||
|
| ||||||||||||||||
|
||||||||||||||||
有時(shí)還會將另外兩種門電路——異或門和異或非門——包括在門電路種類中,以下是這兩種門電路的邏輯表:
|
| ||||||||||||||||
|
||||||||||||||||
|
| ||||||||||||||||
|
||||||||||||||||
異或門的工作原理是:如果A或B為1,但不是兩者都為1,則Q為1。門電路種類中不包括異或門的原因是您可以使用先前列出的三種原始的門電路來實(shí)現(xiàn)異或門。下面提供了一種實(shí)現(xiàn)方法:
如果嘗試A和B的所有四種不同輸入模式并跟蹤相關(guān)電路,您會發(fā)現(xiàn)Q的工作方式類似于異或門。由于異或門的符號很容易理解,因此通常將異或門視為“標(biāo)準(zhǔn)門電路”,并且在電路圖中像使用與門和或門一樣來使用該門電路會更為簡單。
簡單的加法器
在位和字節(jié)一文中,您已經(jīng)了解了二進(jìn)制加法。本節(jié)中,您將了解如何使用上一節(jié)介紹的門電路來創(chuàng)建能夠執(zhí)行二進(jìn)制加法的電路。
讓我們先了解一下一位加法器。假定您現(xiàn)在需要將一位數(shù)加在一起并算出答案,為此開始設(shè)計(jì)電路時(shí)所采用的方式是首先查看所有邏輯組合。您可以查看以下四組數(shù)的求和:
| 0 | 0 | 1 | 1 |
| + 0 | + 1 | + 0 | + 1 |
| 0 | 1 | 1 | 10 |
在您遇到1+1之前,一切情況都很正常。在1+1的情況下,您需要考慮比較麻煩的進(jìn)位問題。如果不考慮進(jìn)位(因?yàn)檫@畢竟是1位加法問題),您會發(fā)現(xiàn)可通過異或門電路來解決此問題。但是如果考慮進(jìn)位,則可能要改寫等式,從而始終包括2位輸出,如下所示:
| 0 | 0 | 1 | 1 |
| + 0 | + 1 | + 0 | + 1 |
| 00 | 01 | 01 | 10 |
通過這些等式,您可以生成下面的邏輯表:
|
| ||||||||||||||||||||
| ||||||||||||||||||||
通過查看該表,您會發(fā)現(xiàn)可通過異或門電路來實(shí)現(xiàn)Q,通過與門電路來實(shí)現(xiàn)CO(進(jìn)位輸出)。一切都很簡單。
如果要將兩個(gè)8位的字節(jié)加在一起,又要如何處理呢?實(shí)現(xiàn)該操作要稍微難一些。最簡單的方法是將該問題模塊化為可重用的元件,然后復(fù)制這些元件。這種情況下,我們只需要?jiǎng)?chuàng)建一個(gè)元件:全二進(jìn)制加法器。
我們發(fā)現(xiàn)全加法器和上述加法器之間的差別在于全加法器可將A、B輸入與進(jìn)位輸入(CI)輸入相加。擁有全加法器之后,我們可以將8個(gè)這樣的全加法器串接在一起,從而形成一個(gè)字節(jié)寬的加法器,并將進(jìn)位輸入從一個(gè)加法器級聯(lián)到另一個(gè)加法器。
與我們前面使用的邏輯表相比,全加法器的邏輯表稍微復(fù)雜一些,原因是我們現(xiàn)在有3個(gè)輸入位。該邏輯表如下所示:
|
| |||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||
有多種不同的方法來實(shí)現(xiàn)該表,在此我們將介紹一種易于理解的方法。如果您查看Q位,會發(fā)現(xiàn)頂部4位的工作方式與針對A 和B的異或門電路類似,而底部4位的工作方式與針對A和B的同或門電路類似。同樣,CO頂部4位的工作方式與針對A和B的與門電路類似,而底部4位的工作方式則和或門電路類似。根據(jù)這些事實(shí),下面的電路可實(shí)現(xiàn)全加法器:
這當(dāng)然不是實(shí)現(xiàn)全加法器最有效的方法,但卻極易理解,并且很容易跟蹤使用該方法的邏輯。如果有興趣,您可以思考一下如何使用更少的門電路來實(shí)現(xiàn)該邏輯。
現(xiàn)在我們有了一個(gè)名為“全加法器”的功能。計(jì)算機(jī)工程師下一步要做的是將全加法器裝在“黑盒子”中,這樣他就不用考慮該元件的細(xì)節(jié)了。用于全加法器的黑盒子將如下所示:
通過這個(gè)黑盒子,現(xiàn)在很容易就可畫出一個(gè)4位全加法器:
在該電路圖中,每一位的進(jìn)位輸出將直接輸入到下一位的進(jìn)位輸入。通過硬連線方式將最初的進(jìn)位輸入位設(shè)為0。如果在A和B線路上輸入兩個(gè)4位的數(shù)字,則將會在Q線路上獲得該4位數(shù)的和輸出,另外還有1位用來表示最終進(jìn)位輸出。你會發(fā)現(xiàn)該鏈可隨意擴(kuò)展,如果需要,可擴(kuò)展到8位、16位或32位。
我們剛剛創(chuàng)建的4位加法器稱為行波進(jìn)位加法器。之所以稱為行波進(jìn)位加法器,是因?yàn)檫M(jìn)位位像波紋一樣從一個(gè)加法器輸入到另一加法器。該實(shí)現(xiàn)方式的優(yōu)點(diǎn)在于它非常簡單,但其缺點(diǎn)是存在速度問題。在實(shí)際電路中,門電路的狀態(tài)切換需要時(shí)間(該轉(zhuǎn)換時(shí)間屬于納秒級,但對于高速計(jì)算機(jī)來說納秒也是很重要的)。由于存在行波進(jìn)位,因此32或64位的行波進(jìn)位加法器可能需要100到200納秒來獲得最終的求和結(jié)果。為此,工程師創(chuàng)建了更高級的名為先行進(jìn)位加法器的加法器。實(shí)現(xiàn)先行進(jìn)位加法器所需的門電路數(shù)量很大,但是該加法器在計(jì)算速度上大有改進(jìn)。
觸發(fā)器
通過布爾門電路可以實(shí)現(xiàn)的一項(xiàng)更為有趣的功能是形成記憶。如果門電路的連接正確,它們將會記住輸入值。這一簡單概念成為計(jì)算機(jī)中RAM(隨機(jī)存取存儲器)的基礎(chǔ),并且還使得創(chuàng)建其他各種有用的電路成為可能。
記憶依賴于一個(gè)名為反饋的概念,也就是說門電路的輸出將反饋給輸入。下面顯示的是使用兩個(gè)反相器的最簡單的反饋電路:
如果沿著反饋路線,則會看到如果Q為1,則它始終為1;如果Q為0,則它始終 0。由于有必要控制所創(chuàng)建的電路,因此上面的電路沒有多大用處,但它能夠使您了解反饋的工作方式。
事實(shí)上,在“真正”的電路中,可使用這類簡單的反相器反饋方法。下面顯示了一種更有用的使用兩個(gè)與非門電路的反饋電路:
該電路有兩個(gè)輸入(R和S)和兩個(gè)輸出(Q和Q')。由于存在反饋,因此該電路的邏輯表與先前看到的邏輯表相比有些不同。
| R | S | Q | Q' |
| 0 | 0 | 非法 | |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 記憶 |
從邏輯表可以看到:
- 如果R和S的狀態(tài)相反,則Q與S相同,且Q'與Q相反。
- 如果R和S同時(shí)切換為1,則電路會記住R和S上先前顯示的內(nèi)容。
有趣的是,該邏輯表中還有一種非法狀態(tài)。在這種狀態(tài)下,R和S都為0,在此狀態(tài)下沒有記憶值。由于存在非法狀態(tài),因此通常要在輸入端添加一些條件邏輯以防止出現(xiàn)這種狀態(tài),如下圖所示:
在該電路中,有兩個(gè)輸入(D和E)。您可以將D視為“數(shù)據(jù)”,并將E視為“啟用”。如果E為1,則Q的狀態(tài)將與D相同。但是如果E更改為0,則Q將會記住在D上最后看到的內(nèi)容。以這種方式運(yùn)行的電路通常稱為觸發(fā)器。
觸發(fā)器的一種常見形式是J-K觸發(fā)器。人們并不清楚“J-K”名稱的歷史來由,但通常它會出現(xiàn)在一個(gè)黑盒子中,如下所示:
在該示意圖中,P代表“預(yù)設(shè)”,C代表“清除”,Clk代表“時(shí)鐘”。該邏輯表如下所示:
| P | C | Clk | J | K | Q | Q' | |
| 1 | 1 | 1到0 | 1 | 0 | 1 | 0 | |
| 1 | 1 | 1到0 | 0 | 1 | 0 | 1 | |
| 1 | 1 | 1到0 | 1 | 1 | 切換 | ||
| 1 | 0 | X | X | X | 0 | 1 | |
| 0 | 1 | X | X | X | 1 | 0 |
該表表明:首先,“預(yù)設(shè)”和“清除”完全覆蓋J、K和Clk。因此,如果“預(yù)設(shè)”變?yōu)?,則Q將變?yōu)?1;如果“清除”變?yōu)?,則Q將會變?yōu)?(不管J、K和Clk執(zhí)行何種操作)。但是,如果“預(yù)設(shè)”和“清除”都為1,則J、K和Clk均可執(zhí)行。1到0符號表示時(shí)鐘從1更改為0時(shí),如果J和K的狀態(tài)相反,則將記住J和K的值。在時(shí)鐘的下降沿(從1到0的轉(zhuǎn)換),將存儲J和K。但是,如果J和K在下降沿上正巧都為1,則Q只能切換。也就是說,Q將從當(dāng)前狀態(tài)變?yōu)橄喾吹臓顟B(tài)。
現(xiàn)在你可能會問自己:“這究竟會帶來什么益處?”事實(shí)上,“跳變沿觸發(fā)”概念是非常有用的。J-K觸發(fā)器僅“鎖存”從1轉(zhuǎn)換為0時(shí)的J-K輸入,這一事實(shí)使其作為一種記憶設(shè)備更為有用。J-K觸發(fā)器對計(jì)數(shù)器(廣泛用于創(chuàng)建數(shù)字時(shí)鐘)同樣也很有用。以下是一個(gè)使用J-K觸發(fā)器的4位計(jì)數(shù)器示例:
該電路的輸出是A、B、C和D,并且它們表示一個(gè)4位的二進(jìn)制數(shù)字。在最左側(cè)的觸發(fā)器的時(shí)鐘輸入端,會輸入一個(gè)反復(fù)從1變?yōu)?再變回1的信號(振蕩信號)。計(jì)數(shù)器將對該信號中的下降沿計(jì)數(shù)。也就是說,每次輸入信號從1更改為0時(shí),由A、B、C和D表示的4位數(shù)將增加1。因此計(jì)數(shù)將從0變?yōu)?5,然后再循回到0。您可以向計(jì)數(shù)器添加任意多的位數(shù),并且可隨意計(jì)數(shù)。例如,如果在門上放置一個(gè)磁力開關(guān),則計(jì)數(shù)器將會計(jì)算開門和關(guān)門的次數(shù)。如果在公路上放置一個(gè)光學(xué)傳感器,則計(jì)數(shù)器可計(jì)算駛過的汽車的數(shù)量。
J-K觸發(fā)器的另一用途是用于創(chuàng)建跳變沿觸發(fā)的鎖存,如下所示:
在這種排列下,時(shí)鐘跳變沿從低變?yōu)楦邥r(shí)將“鎖存”D上的值。鎖存器對于諸如計(jì)算機(jī)的CPU和外圍設(shè)備之類的設(shè)計(jì)來說至關(guān)重要。
實(shí)現(xiàn)門電路
在前幾節(jié)中,我們了解到通過使用非常簡單的布爾門電路,可以實(shí)現(xiàn)加法器、計(jì)數(shù)器、鎖存器等。這一進(jìn)步具有偉大的意義,因?yàn)樵诓痪靡郧坝行┦轮挥腥祟惒拍茏龅?,比如對兩個(gè)數(shù)字進(jìn)行相加。通過完成少量的工作,人們不難設(shè)計(jì)出可執(zhí)行減法、乘法、除法等運(yùn)算的布爾電路??梢钥吹?,要設(shè)計(jì)出便攜式計(jì)算器并不是那么遙不可及。因此,設(shè)計(jì)出可用于計(jì)算機(jī)的成熟的CPU也并非沒有可能。
在現(xiàn)實(shí)生活中我們應(yīng)該如何實(shí)現(xiàn)這些門電路?布爾先生以書面形式提出了這些門,采用這種形式使它們看起來很不錯(cuò)。但是,若要使用這些門電路,我們需要真正實(shí)現(xiàn)這些門電路以便它們可以主動(dòng)執(zhí)行邏輯運(yùn)算。實(shí)現(xiàn)這一飛躍之后,我們就已經(jīng)開始了創(chuàng)建真正的計(jì)算設(shè)備的工作。
了解有關(guān)布爾邏輯的物理實(shí)現(xiàn)最簡便的方法是使用繼電器。實(shí)際上,這是最早的幾臺計(jì)算機(jī)的實(shí)現(xiàn)方式。如今沒有人再通過繼電器來制成計(jì)算機(jī),人們現(xiàn)在使用蝕刻在硅片上的亞顯微晶體管。這些晶體管的體積之小、速度之快都令人難以置信,與繼電器相比,它們所消耗的電能非常少。但是,繼電器的原理很容易理解,并且也非常易于實(shí)現(xiàn)布爾邏輯。由于其簡單性,您將能夠看到從“書面形式表示的門電路”轉(zhuǎn)變?yōu)椤霸诂F(xiàn)實(shí)世界中實(shí)現(xiàn)的有源門電路”是可行的,并且能夠直接轉(zhuǎn)換,從而使得使用晶體管執(zhí)行這一轉(zhuǎn)變也很容易。
讓我們先來看看反相器吧。通過繼電器實(shí)現(xiàn)非門是很簡單的:我們要做的就是通過電壓來表示位狀態(tài)。將二進(jìn)制1定義為6伏并將二進(jìn)制0定義為0伏(接地)。然后將使用6伏的蓄電池來為電路提供電源。因此非門將如下圖所示:
如果您看不懂該圖是什么意思,請閱讀繼電器工作原理以獲取詳細(xì)說明。
可以看到,在該電路中如果A端的輸入電壓為0伏,則在Q端可獲得6伏輸出;如果A端的輸入電壓為6伏,則在Q端可獲得0伏輸出。通過繼電器很容易實(shí)現(xiàn)反相器!
通過兩個(gè)繼電器來實(shí)現(xiàn)與門也同樣簡單:
在此您可以看到如果A和B端的輸入電壓均為6伏,則Q端電壓為6伏。在其他情況下,Q端則為0伏,這正是我們想通過與門實(shí)現(xiàn)的結(jié)果?;蜷T更為簡單——僅將A和B兩條電線連在一起就可形成或門電路。如果將兩個(gè)繼電器并聯(lián),您會得到更加令人意想不到的結(jié)果。
從討論中可以看到,您可以通過繼電器創(chuàng)建三種基本的門電路:非門、或門及與門。然后使用上面顯示的邏輯電路圖將這些物理門電路連接在一起,以創(chuàng)建物理的8位行波進(jìn)位加法器。如果使用簡易開關(guān)將A和B輸入應(yīng)用到加法器并將所有8條Q線路與燈泡連接,則能夠?qū)⑷我鈨蓚€(gè)數(shù)字相加并讀取燈上的結(jié)果(“燈亮”=1,“燈滅”=0)。
以簡單門電路形式表示的布爾邏輯非常直白易懂。通過簡單門電路,您可創(chuàng)建更復(fù)雜的函數(shù),例如加法運(yùn)算。在現(xiàn)實(shí)中可以實(shí)現(xiàn)門電路且非常容易。通過了解以上三項(xiàng)內(nèi)容,您已經(jīng)掌握了數(shù)字化革命的核心,并從根本上了解了計(jì)算機(jī)的工作方式。
電子發(fā)燒友App



















評論