)
繼電器是如何成為CPU的1從開關(guān)到邏輯門繼電器為什么能算數(shù)很多人第一次聽到“繼電器能造CPU”時第一反應(yīng)是“這不可能”。但你有沒有想過我們?nèi)粘S玫碾娔X本質(zhì)上是無數(shù)個開關(guān)在0和1之間跳來跳去。繼電器本質(zhì)上就是一個“電磁鐵控制的開關(guān)”——通電時吸合斷電時釋放。這恰恰是二進(jìn)制最原始的物理實(shí)現(xiàn)。關(guān)鍵轉(zhuǎn)折點(diǎn)如果我們把“通電”記為1“斷電”記為0那么繼電器就變成了一臺能“存儲”和“切換”狀態(tài)的機(jī)器。但光有開關(guān)還不夠要成為CPU需要先能完成邏輯運(yùn)算。而邏輯運(yùn)算的基石就是三個基本門電路與門、或門、非門。### 第一個代碼示例用Python模擬繼電器邏輯門在動手用硬件之前我們先在軟件里模擬繼電器行為。這能幫你理解“繼電器如何通過物理連接實(shí)現(xiàn)邏輯”而不是被抽象電路圖嚇退。python# 模擬繼電器一個簡單的電磁開關(guān)class Relay: def __init__(self): self.coil_energized False # 線圈是否通電 self.contact_closed False # 觸點(diǎn)是否閉合 def energize(self, voltage): # 電壓達(dá)到閾值則吸合否則釋放 self.coil_energized voltage 5 # 5V為吸合閾值 self.contact_closed self.coil_energized return self.contact_closed# 用兩個繼電器構(gòu)造“與門”def AND_gate(input_a, input_b): relay_a Relay() relay_b Relay() # 兩個繼電器的觸點(diǎn)串聯(lián)只有都閉合輸出才有電 contact_a relay_a.energize(input_a) contact_b relay_b.energize(input_b) # 串聯(lián)兩個都閉合才輸出1 return contact_a and contact_b# 測試與門print(AND(0,0), AND_gate(0,0)) # Falseprint(AND(1,1), AND_gate(1,1)) # True這段代碼里每個繼電器有獨(dú)立的線圈和觸點(diǎn)。串聯(lián)連接就是“與”邏輯——電流必須流過兩個觸點(diǎn)只要有一個斷開輸出就是0。這就是繼電器構(gòu)建邏輯門的最基本思想。### 從邏輯門到加法器繼電器如何算加法有了與門、或門、非門下一步就是構(gòu)建半加器。半加器能計(jì)算兩個二進(jìn)制位的和并產(chǎn)生進(jìn)位。這看似簡單卻是CPU算術(shù)運(yùn)算的核心起點(diǎn)。你可能好奇為什么加法器這么重要因?yàn)镃PU里大量運(yùn)算減法、乘法、地址計(jì)算最后都能歸結(jié)為加法。而加法器正是由繼電器搭建的。### 第二個代碼示例用繼電器構(gòu)建半加器我們繼續(xù)用Python模擬這次把繼電器組合成半加器。半加器有兩個輸入A和B兩個輸出和S進(jìn)位C。pythonclass RelayLogic: def __init__(self): self.relays [Relay() for _ in range(6)] # 準(zhǔn)備6個繼電器 def half_adder(self, a, b): # 和S A XOR B異或 # 進(jìn)位C A AND B # 實(shí)現(xiàn)異或用兩個與門和一個或門但這里簡化用繼電器邏輯 # 先計(jì)算 A AND B進(jìn)位 carry a and b # 計(jì)算 A XOR B和 # 異或 (A AND NOT B) OR (NOT A AND B) not_a not a not_b not b sum_1 a and not_b # A AND NOT B sum_2 not_a and b # NOT A AND B sum_result sum_1 or sum_2 return sum_result, carry# 測試半加器logic RelayLogic()for a, b in [(0,0), (0,1), (1,0), (1,1)]: s, c logic.half_adder(a, b) print(f半加器({a},) 和{s}, 進(jìn)位{c})運(yùn)行這段代碼你會看到半加器正確計(jì)算了二進(jìn)制加法。雖然這里用Python的布爾運(yùn)算模擬了繼電器組合但真實(shí)硬件中繼電器通過物理線路連接實(shí)現(xiàn)完全相同的邏輯。### 為什么繼電器能組成CPU——層次化構(gòu)建現(xiàn)在你已經(jīng)看到了從“開關(guān)”到“邏輯門”再到“加法器”的路徑。CPU正是沿著這條路徑不斷向上構(gòu)建更復(fù)雜的模塊-寄存器用繼電器鎖存狀態(tài)保存數(shù)據(jù)-譯碼器用繼電器組合將指令翻譯成控制信號-狀態(tài)機(jī)用繼電器時序邏輯控制執(zhí)行步驟每一層都建立在前一層之上就像搭積木。繼電器雖然慢毫秒級但數(shù)量足夠多時就能完成復(fù)雜計(jì)算。早期的Z3計(jì)算機(jī)1941年就是用繼電器做成的雖然每秒只能算幾次加法但已經(jīng)是劃時代的成就。### 總結(jié)這篇文章我們從最基礎(chǔ)的繼電器開關(guān)原理出發(fā)用Python模擬了繼電器的邏輯行為并成功構(gòu)建了“與門”和“半加器”。你看到了繼電器如何通過物理連接實(shí)現(xiàn)布爾邏輯而邏輯門又是如何組合成更高級的算術(shù)單元。關(guān)鍵收獲1. 繼電器的“通/斷”對應(yīng)二進(jìn)制的“1/0”2. 多個繼電器的串聯(lián)、并聯(lián)實(shí)現(xiàn)與門、或門3. 邏輯門組合可以構(gòu)建加法器這是CPU運(yùn)算的核心4. CPU的復(fù)雜功能是通過一層層抽象和組合實(shí)現(xiàn)的下一篇文章我們將繼續(xù)深入如何用繼電器構(gòu)建“觸發(fā)器”來存儲一位數(shù)據(jù)以及如何把多個加法器連接成多位的算術(shù)邏輯單元ALU。敬請期待。