一個(gè)繼電器就能計(jì)算?設(shè)計(jì)最最簡(jiǎn)單的計(jì)算機(jī)(上)
這個(gè)文章將會(huì)詳細(xì)探討“僅使用一個(gè)繼電器來(lái)做數(shù)據(jù)處理實(shí)現(xiàn)計(jì)算機(jī)功能”的可能性與實(shí)現(xiàn)。同時(shí),本文所探討的計(jì)算機(jī)是從最基礎(chǔ)的技術(shù)出發(fā)的,以便理解推理。另外,本文所探討的計(jì)算機(jī)不以實(shí)用為目的,而是作為實(shí)驗(yàn)研究。
一切從一個(gè)開(kāi)關(guān)開(kāi)始。
本文的所有理論和結(jié)果都可以概括為一句話:將處理計(jì)算工作的實(shí)現(xiàn)簡(jiǎn)化為一個(gè)開(kāi)關(guān)的狀態(tài)。在此處采用轉(zhuǎn)換式開(kāi)關(guān),可以把它看作有一個(gè)輸入,兩個(gè)輸出。每個(gè)輸入輸出端只能容納一位二進(jìn)制數(shù),即通電狀態(tài)表示“1”,無(wú)電流狀態(tài)表示“0”。

兩個(gè)輸出端中至多有一個(gè)輸出端會(huì)是“1”狀態(tài)。至于會(huì)不會(huì)有這個(gè)“1”,還是兩個(gè)輸出都是“0”,由輸入端是否為“1”決定。
但是,對(duì)于哪個(gè)輸出為“1”,哪個(gè)為“0”(也就是開(kāi)關(guān)的狀態(tài))的主動(dòng)控制,一個(gè)簡(jiǎn)單的轉(zhuǎn)換開(kāi)關(guān)是無(wú)法滿足的。因此,我們需要一個(gè)可以實(shí)現(xiàn)自己主動(dòng)控制開(kāi)關(guān)狀態(tài)的元件:電磁繼電器。在此處使用繼電器比三極管等元件更便于非電子專業(yè)者理解。
當(dāng)然,由于轉(zhuǎn)換開(kāi)關(guān)的需要,此處繼電器是五腳轉(zhuǎn)換型電磁繼電器。
五腳轉(zhuǎn)換電磁繼電器在轉(zhuǎn)換開(kāi)關(guān)的基礎(chǔ)上增加了一個(gè)可以控制開(kāi)關(guān)轉(zhuǎn)換狀態(tài)的線圈,線圈通電后成為電磁鐵,可以通過(guò)磁鐵吸附改變開(kāi)關(guān)的通路。
線圈的通電與否我們也用“1”和“0”表示。如下圖所示,

當(dāng)A輸入“1”,線圈輸入“0”時(shí),開(kāi)關(guān)通向B端,B端輸出“1”,C端輸出“0”。
當(dāng)A輸入“1”,線圈輸入“1”時(shí),開(kāi)關(guān)通向C端,B端輸出“0”,C端輸出“1”。
……
以上就是一個(gè)開(kāi)關(guān)做計(jì)算的核心所在。它能夠結(jié)合儲(chǔ)存器,做出所有的邏輯門操作。這就好比我們算多位數(shù)加減法,我們?nèi)嗽谒愕臅r(shí)候,會(huì)使用草稿紙將多位數(shù)據(jù)一位一位地處理,每次把得出的結(jié)果記在紙上,最后再把每一位得出的結(jié)果拼起來(lái),就是多位數(shù)的結(jié)果。這一思想與圖靈機(jī)的思想相同。這樣一位一位數(shù)據(jù)處理雖然目前看來(lái)是絕對(duì)的龜速,但是它能夠以最簡(jiǎn)單的結(jié)構(gòu)來(lái)實(shí)現(xiàn)復(fù)雜的計(jì)算。
好,我們現(xiàn)在已經(jīng)可以實(shí)現(xiàn)計(jì)算機(jī)的核心:處理數(shù)據(jù)了。
不過(guò),這樣慢慢算數(shù)學(xué)總要一張草稿紙吧?
我們的草稿紙,也就是儲(chǔ)存器將會(huì)采用最最基礎(chǔ)古老的方法……

不錯(cuò),我們的儲(chǔ)存器就像八音盒的滾筒,有兩種狀態(tài):“凸起”和“不凸起”(分別對(duì)應(yīng)“1”和“0”)。但是,由于處理數(shù)據(jù)的需要,我們的儲(chǔ)存器還要能在兩種狀態(tài)之間隨意轉(zhuǎn)換。最終方案如下圖所示:

一個(gè)長(zhǎng)形的木條,規(guī)律地鉆孔,每個(gè)孔內(nèi)一個(gè)橫著放的圓柱形,這個(gè)圓柱形就是數(shù)據(jù)信息的載體,可以在孔內(nèi)自由伸縮,在規(guī)定的一面凸起為“1”,另一面凸起則為“0”,只能有一邊凸起。
這種儲(chǔ)存器我們可以隨時(shí)改變它的每一個(gè)二進(jìn)制數(shù)的狀態(tài),從而達(dá)到了隨時(shí)讀寫(xiě)的效果。計(jì)算機(jī)也能在程序控制下進(jìn)行數(shù)據(jù)讀寫(xiě)。
在此處請(qǐng)注意,我們將要設(shè)計(jì)制作的計(jì)算機(jī)沒(méi)有內(nèi)存,只有上述“硬盤(pán)”,我們也不追求多高的運(yùn)算速度,只是為了做出最簡(jiǎn)單的計(jì)算機(jī)。
硬件簡(jiǎn)化了,軟件很重要
劉禹錫說(shuō)過(guò)“斯是陋室,惟吾德馨?!蔽覀兊挠布呀?jīng)簡(jiǎn)單到可憐,為保證能夠應(yīng)付計(jì)算的功能,我們必須有強(qiáng)大的程序。程序是如此簡(jiǎn)單的計(jì)算機(jī)的關(guān)鍵。
我們的計(jì)算機(jī)程序控制的不是對(duì)應(yīng)硬件模塊的動(dòng)作,而是對(duì)應(yīng)電路的通斷。有點(diǎn)像接水管,通過(guò)開(kāi)關(guān)水管通道的閥門來(lái)引導(dǎo)水流流到需要的地方。我們的計(jì)算機(jī)程序控制的是電路中每個(gè)通道的通斷,來(lái)控制電流(信息)流入需要的地方。
舉個(gè)例子:如果我需要ABC兩個(gè)燈中的A燈亮:程序會(huì)進(jìn)行這一操作:“打開(kāi)電源通往A燈的開(kāi)關(guān)”,而不是“打開(kāi)A燈”。這樣的程序模式賦予了硬件更多的靈活性。但也帶來(lái)了一個(gè)弊端:程序往往會(huì)因此更長(zhǎng)。
程序需要有一個(gè)可靠的載體。我們的程序由于會(huì)很長(zhǎng)不能寫(xiě)在滾筒上,而是打孔紙帶。我們不需要在程序上有計(jì)算機(jī)的自主修改,所以我們可以采用這一方式讀取預(yù)先寫(xiě)好的程序。
讀取后的程序會(huì)控制相應(yīng)的開(kāi)關(guān)開(kāi)閉。
第一個(gè)設(shè)計(jì)圖方案

判斷輸入是否為“1”的簡(jiǎn)單示例:
輸入端一次只能輸入一位二進(jìn)制數(shù),輸出端一次也只能輸出一位二進(jìn)制數(shù)。(雖然效率低,但可以實(shí)現(xiàn)多位計(jì)算功能)輸入端輸入值如果為“1”,程序控制開(kāi)關(guān)通往線圈,線圈通電,繼電器開(kāi)關(guān)轉(zhuǎn)換至下方觸點(diǎn),此時(shí)程序控制最左側(cè)VCC(電源,即程序可以自己產(chǎn)生“1”)開(kāi)關(guān)與下方觸點(diǎn)輸出開(kāi)關(guān)閉合,判斷結(jié)果即可在程序控制下寫(xiě)入儲(chǔ)存器,儲(chǔ)存器右移一位,閉合輸出開(kāi)關(guān),輸出“1”,即可判斷輸入值是“1”為真。
如果輸入值不是“1”,線圈不通電,開(kāi)關(guān)不轉(zhuǎn)換,自主產(chǎn)生的“1”值無(wú)法通入寫(xiě)入頭,寫(xiě)入頭最終寫(xiě)入“0”……輸出結(jié)果“0”,即可判斷輸入值是“1”為假……
但計(jì)算機(jī)仍然存在一些重要問(wèn)題,在下一文中將會(huì)詳細(xì)探討。