計算機基本原理—布爾代數與邏輯門

光電科學史 發佈 2019-12-23T10:26:18+00:00

布爾代數發明後很久都不受重視,數學家們曾輕蔑地說它:沒有數學意義,在哲學上也屬於稀奇古怪的東西。直到20世紀初,羅素在《數學原理》中提到:「純數學是布爾在一部他稱之為《思想規律》的著作中發現的」,人們這才關注到布爾代數。但還是認為它是毫無實際用途的「純數學」。

布爾代數發明後很久都不受重視,數學家們曾輕蔑地說它:沒有數學意義,在哲學上也屬於稀奇古怪的東西。直到20世紀初,羅素在《數學原理》中提到:「純數學是布爾在一部他稱之為《思想規律》的著作中發現的」,人們這才關注到布爾代數。但還是認為它是毫無實際用途的「純數學」。

直到1938年,一位年僅22歲的美國年輕人在《繼電器與開關電路的符號分析》中,將布爾代數與開關電路聯繫起來了。這篇文章是他在麻省理工學院(MIT)獲得電氣工程碩士學位的畢業論文。上世紀八十年代,被譽為「多元智能理論」之父的哈佛大學教授霍華德.加德納(Howard Gardner)曾經評論這篇文章:「它可能是本世紀最重要、最著名的一篇碩士論文」。這位年輕人就是克勞德.艾爾伍德.香農。

圖1是中學物理實驗室常見的一種單刀單擲開關。

圖1 單刀單擲開關。

它有2個接線柱和一把閘刀,將接線柱串聯在電路裡面,閉合閘刀電路接通,拉開閘刀電路斷開。如圖2所示。

圖2 開關示意圖

圖3繼電器原理示意

如果圖左下角的「繼電器開關」閉合,繼電器電源就給線圈(電磁鐵)通電,電磁鐵產生磁場吸引銜鐵,使得圖中的「常開觸點」導通,圖右上角的設備就連通了圖左上角的「被控制端電源」。如果斷開繼電器開關,電磁鐵失去磁場,銜鐵由彈簧復位,使得圖中「常閉觸點」導通,這時設備就斷電了。也許讀者會問:「既然繼電器有開關,何不乾脆像圖2那樣,直接用開關控制設備通電與斷電呢?」請讀者仔細看圖3,繼電器電源通常是低壓弱電流的直流電源,而設備通常需要高壓強電流的交流電源,很多情況是不能直接開關高壓強電流電源的。其實,繼電器是莫爾斯發明電報過程中的偉大發明:當電報信號傳輸一段距離後就會衰減得非常弱,就像圖3中的「繼電器開關+繼電器電源」組合一樣,是低壓弱電流信號。假如圖3中的「被控制端電源」是一個高壓強電流的直流電源,繼電器就會將輸入的微弱電報信號變成完全一模一樣的強信號輸出,電報信號就被「中繼」了,可以再傳輸相當遠的距離。繼電器的英文名「Relay」就是「中繼」的意思,將「Relay」翻譯成繼電器是強調了它的控制作用,在通信領域「Relay」通常被翻譯為「中繼」或者「中繼器」。如果僅僅考慮電路的通與斷,繼電器與開關在電路中的作用是等價的。因此,本文從此將繼電器和開關統稱為開關。

那麼,開關又與布爾代數有什麼聯繫呢?(單刀單擲)開關只有兩個狀態:斷、通,這與布爾代數只有兩個數:False(假)、Ture(真)相契合。香農首先發現了這個聯繫,也是他第一個用「0」表示False,用「1」表示Ture。現在許多人認為布爾發明了二進位,其實,布爾不僅沒有發明二進位,而且沒有採用「0」、「1」符號。二進位的發明人是萊布尼茲,他是與牛頓幾乎同時獨立發明微積分的偉大數學家。用0、1表示False、Ture非常了不起,它使得布爾代數與二進位建立了聯繫。儘管二十世紀最有影響力的哲學家維根斯坦認為,人類的思想是依託於語言存在的,脫離語言的思想是不可描述的。但是,採用抽象的符號與運算代替自然語言,掙脫自然語言對抽象思維的禁錮,是數學劃時代的進步。明代以前,西方科學還沒有引進中國,那時中國的數學運算都是用文字描述的,這很可能就是中國古代數學最終衰敗的重要原因。

採用0、1符號,布爾代數運算看起來簡直是美爆了:

圖4 布爾代數運算

香農發現了開關電路與布爾代數運算之間的等價性描述如下:

「+」相當於開關並聯,如圖5所示。

圖5 用開關並聯電路表示布爾「+」

元素屬於集合A,圖中A開關閉合,該元素就傳遞到了輸出端。同樣,元素屬於集合B,B開關閉合,該元素就傳遞到了輸出端。因此,電路輸出的元素是集合A元素與集合B元素的合併,恰好就是布爾「+」的定義。

「x」相當於開關串聯,如圖6所示。

圖6 用開關串聯電路表示布爾「x」

屬於集合A但不屬於集合B的元素,只有開關A閉合,開關B斷開,就到達不了輸出端。同樣,屬於集合B但不屬於集合A的元素,只有開關B閉合,開關A斷開,也到達不了輸出端。既屬於集合A又屬於集合B的元素才能使開關A、B同時閉合,這樣的元素才能通過電路被輸出。電路輸出的就是既屬於集合A又屬於集合B的元素,恰好就是布爾「x」的定義。

現在讓我們回憶上一篇文章《計算機基本原理:數學與邏輯》,當時你對寵物店提出的買貓的要求,由下面的布爾運算描述:

這個布爾運算也可以用等價的開關電路描述,見圖7。

圖7 等價開關電路

你搭建好這個電路帶到寵物店。假如店員拿給你一隻有生殖能力的黃色公貓,你就閉合如圖8中紅色的3個開關:

圖8 有生殖能力的黃色公貓等價開關電路

因為有生殖能力的黃色公貓是:公貓、黃色、非白的,因此閉合電路中M、Y、1-W 共3個開關,其餘開關斷開。此時電燈與電池之間的電路是不通的,因此電燈不亮。

假如店員拿給你一隻閹割過的灰色母貓,你就閉合如圖9中紅色的4個開關:

圖9 閹割過的灰色母貓等價開關電路

因為閹割過的灰色母貓是:母貓、閹割過、非白的,因此閉合電路中F、N、N、1-W 共4個開關,其餘開關斷開。此時電燈與電池之間的電路是通的,因此電燈就亮了,說明這隻貓符合你的選擇標準。

這樣就可以方便地幫你做出正確的邏輯判斷。再來,這樣的開關電路就像一扇門,它讓符合邏輯的貓(元素)通過,而讓不符合邏輯的貓(元素)通不過。因此,工程師們就想出了「邏輯門」這個形象生動的名詞,為了方便搭建複雜邏輯電路,還專門定義了6種邏輯門:

開關串聯電路定義為「與(and)門」,如圖10所示。

圖10 與門定義

用「1」表示「通」,用「0」表示「斷」,與門的輸入與輸出關係如圖11所示。

圖11 與門的輸入輸出關係

從圖11可以看出,與門恰好是布爾代數的「x」,也恰好是開關電路的串聯電路。在數字電路中,與門的輸入「0」可以是 「不加電壓」或者是「加低電壓」;「1」可以是「加電壓」或者是「加高電壓」;與門的輸出「0」可以是 「電壓為0」或者是「低電壓」;「1」可以是「電壓不為0」或者是「高電壓」。

開關並聯電路定義為「或(or)門」,如圖12所示。

圖12 或門定義

用「1」表示「通」,用「0」表示「斷」,或門的輸入與輸出關係如圖13所示。

圖13 或門的輸入輸出關係

可以看出或門恰好是布爾代數的「+」,也恰好是開關電路的並聯電路。

在數字電路中,還有一種稱為「非(not)門」的邏輯門,它對於簡化邏輯電路是很有用的。我們將圖3的繼電器稍微做一點點改動,如圖14所示。

圖14 繼電器改動示意圖

右圖是將左圖繼電器做了改動,改動部分用紅色線表示。改動後的繼電器使得繼電器開關閉合時,電燈不亮,繼電器開關斷開時,電燈反而亮,與左圖正好相反。這樣的邏輯電路就稱為「非(not)門」。

非門通常用圖15的符號表示:

圖15 非門符號與定義

那麼,圖14中左邊的正常繼電器是不是邏輯門呢?

它也是邏輯門,被稱為「緩衝門」,它用圖16的符號表示。

圖16 緩衝門符號與定義

緩衝門的輸出與輸入相等,看似啥都沒做。其實不然,它起到了延遲信號時間的作用。有時它還會起到放大信號電流的作用,這時就被稱為驅動器。

將與門與非門串聯起來稱為與非門;將或門與非門串聯起來稱為或非門。如圖17所示。

圖17 與非門、或非門的定義

再怎麼複雜的邏輯電路,都可以用與門、或門、非門、緩衝門、與非門、或非門6種邏輯門搭建。而計算機硬體的核心——CPU主要就是由非常非常多這樣的邏輯門組成的。

邏輯門可以用繼電器構成、也可以用電子管構成,圖18是最早的電子計算機,它的CPU就是用電子管構成邏輯門的。

圖18 早期的電子管計算機

後來用電晶體構成邏輯門的計算機的CPU就小很多了。而如今的大規模集成電路,一塊指甲蓋大小的晶片,就包含數以億計的邏輯門,如圖19所示。

仔細閱讀了本文的讀者現在也許會說:「神秘的計算機也不過如此嘛」。現在理解計算機並不困難,可是從萊布尼茲發明二進位至今,人類為此已經探索了整整340年。

關鍵字: