制加法器:硬件實(shí)現(xiàn)與調(diào)試全解析)
1. 項(xiàng)目概述從邏輯門到計(jì)算器最近在整理一些數(shù)字電路的教學(xué)資料翻出了幾年前帶學(xué)生做的一個(gè)小項(xiàng)目——一個(gè)基于基礎(chǔ)數(shù)字邏輯的簡(jiǎn)易二進(jìn)制計(jì)算器。這玩意兒聽(tīng)起來(lái)可能有點(diǎn)“復(fù)古”畢竟現(xiàn)在誰(shuí)還用分立邏輯門搭計(jì)算器一個(gè)幾塊錢的單片機(jī)或者直接用Python寫(xiě)兩行代碼就搞定了。但恰恰是這種“復(fù)古”的實(shí)現(xiàn)方式讓我覺(jué)得特別有價(jià)值。它就像學(xué)數(shù)學(xué)要從112開(kāi)始一樣理解計(jì)算機(jī)的底層計(jì)算邏輯從與非門、或非門開(kāi)始搭建一個(gè)能完成基本算術(shù)運(yùn)算的電路是一次絕佳的思維訓(xùn)練。這個(gè)“簡(jiǎn)易二進(jìn)制計(jì)算器”項(xiàng)目核心目標(biāo)就是用最基礎(chǔ)的邏輯門芯片比如74系列實(shí)現(xiàn)兩個(gè)4位二進(jìn)制數(shù)的加法運(yùn)算并能夠通過(guò)LED燈或數(shù)碼管顯示結(jié)果。它不涉及任何微控制器或高級(jí)編程語(yǔ)言純粹是硬件邏輯的舞蹈。你可能覺(jué)得這很簡(jiǎn)單不就是個(gè)加法器嗎但在實(shí)操中從半加器、全加器的級(jí)聯(lián)到考慮溢出、顯示驅(qū)動(dòng)再到電源管理、信號(hào)抖動(dòng)消除每一步都藏著不少“坑”。做完了這個(gè)你對(duì)CPU里的ALU算術(shù)邏輯單元是如何工作的會(huì)有一種豁然開(kāi)朗的“手感”。這篇文章我就來(lái)詳細(xì)拆解這個(gè)項(xiàng)目的完整實(shí)現(xiàn)過(guò)程。無(wú)論你是電子工程的學(xué)生想鞏固數(shù)電知識(shí)還是嵌入式愛(ài)好者想深入理解硬件底層甚至是創(chuàng)客想體驗(yàn)一把“從沙子到芯片”的樂(lè)趣這個(gè)項(xiàng)目都能給你帶來(lái)實(shí)實(shí)在在的收獲。我會(huì)從最基礎(chǔ)的邏輯門講起一步步推導(dǎo)出加法器然后完成整個(gè)系統(tǒng)的設(shè)計(jì)、布線、調(diào)試并分享那些在教科書(shū)里不會(huì)寫(xiě)的、只有親手焊過(guò)板子才能悟到的經(jīng)驗(yàn)教訓(xùn)。2. 核心邏輯與電路設(shè)計(jì)思路拆解2.1 為什么從二進(jìn)制加法開(kāi)始計(jì)算機(jī)的所有復(fù)雜運(yùn)算最終都可以分解為最基本的加法操作。乘法是連加減法是補(bǔ)碼加法更復(fù)雜的函數(shù)則通過(guò)算法調(diào)用這些基礎(chǔ)操作。因此實(shí)現(xiàn)一個(gè)加法器是構(gòu)建任何計(jì)算設(shè)備最核心、最基礎(chǔ)的一步。我們選擇實(shí)現(xiàn)4位二進(jìn)制加法復(fù)雜度適中既能體現(xiàn)多位計(jì)算的級(jí)聯(lián)思想又不會(huì)讓電路過(guò)于龐大而難以實(shí)現(xiàn)。這里的關(guān)鍵思路是“化整為零”。我們不會(huì)直接設(shè)計(jì)一個(gè)4位加法器而是先設(shè)計(jì)一個(gè)能處理1位二進(jìn)制數(shù)加法的單元然后將它們串聯(lián)起來(lái)。這就需要引入兩個(gè)基本概念半加器和全加器。半加器處理兩個(gè)1位二進(jìn)制數(shù)A和B相加。它產(chǎn)生兩個(gè)輸出和Sum, S與進(jìn)位Carry, C。其真值表非常簡(jiǎn)單ABSC0000011010101101觀察真值表你會(huì)發(fā)現(xiàn)S A XOR BC A AND B。所以一個(gè)異或門和一個(gè)與門就能構(gòu)成一個(gè)半加器。全加器現(xiàn)實(shí)中的多位加法每一位在計(jì)算時(shí)除了要加本位的兩個(gè)數(shù)還必須加上來(lái)自低位的進(jìn)位Carry-in, Cin。所以全加器有三個(gè)輸入A, B, Cin兩個(gè)輸出S, CoutCarry-out。其邏輯關(guān)系是S A XOR B XOR CinCout (A AND B) OR (A AND Cin) OR (B AND Cin)。設(shè)計(jì)考量我們可以用兩個(gè)半加器和一個(gè)或門來(lái)構(gòu)建一個(gè)全加器這是經(jīng)典的教材實(shí)現(xiàn)也可以直接根據(jù)邏輯表達(dá)式用與非門等通用門電路搭建。在實(shí)際芯片選型時(shí)我們會(huì)直接使用集成了多個(gè)全加器的芯片如74LS83來(lái)簡(jiǎn)化設(shè)計(jì)但為了理解原理我們先從門級(jí)設(shè)計(jì)開(kāi)始討論。2.2 系統(tǒng)架構(gòu)與模塊劃分一個(gè)完整的、可供交互的二進(jìn)制計(jì)算器不能只有一個(gè)裸的加法器電路。我們需要一個(gè)清晰的系統(tǒng)架構(gòu)。整個(gè)項(xiàng)目可以劃分為以下幾個(gè)模塊輸入模塊用于輸入兩個(gè)4位二進(jìn)制數(shù)。通常使用撥碼開(kāi)關(guān)DIP Switch來(lái)實(shí)現(xiàn)。每個(gè)開(kāi)關(guān)代表一個(gè)比特bit撥上為邏輯“1”高電平如5V撥下為邏輯“0”低電平如0V。8個(gè)開(kāi)關(guān)為一組正好對(duì)應(yīng)兩個(gè)4位數(shù)。核心計(jì)算模塊由4個(gè)全加器級(jí)聯(lián)構(gòu)成的4位并行加法器。最低位的全加器Cin接邏輯0或通過(guò)一個(gè)開(kāi)關(guān)控制用于加法/減法切換減法功能可作為擴(kuò)展每個(gè)全加器的Cout連接到下一個(gè)全加器的Cin。顯示模塊將計(jì)算得到的5位結(jié)果一個(gè)4位和值一個(gè)最高位進(jìn)位顯示出來(lái)。對(duì)于簡(jiǎn)單的驗(yàn)證可以用5個(gè)LED燈亮1滅0來(lái)顯示二進(jìn)制結(jié)果。如果想更直觀可以增加二進(jìn)制到十進(jìn)制譯碼芯片如74LS47和七段數(shù)碼管來(lái)顯示十進(jìn)制結(jié)果但這會(huì)顯著增加復(fù)雜度。本項(xiàng)目?jī)?yōu)先采用LED顯示確保核心邏輯清晰。電源與信號(hào)調(diào)理模塊為所有芯片提供穩(wěn)定、干凈的5V電源。包括濾波電容、電源指示燈等。同時(shí)需要考慮為撥碼開(kāi)關(guān)添加上拉/下拉電阻確保在開(kāi)關(guān)斷開(kāi)時(shí)輸入到芯片的引腳是一個(gè)確定的電平通常是低電平而不是懸空狀態(tài)懸空會(huì)導(dǎo)致芯片工作不穩(wěn)定甚至損壞。方案選型背后的理由選擇分立邏輯門芯片如74LS00系列而不是CPLD/FPGA是為了極致地貼近硬件底層讓每一個(gè)邏輯功能都對(duì)應(yīng)一個(gè)物理芯片和連線。選擇LED顯示而非數(shù)碼管是為了將注意力集中在“計(jì)算”本身避免被顯示驅(qū)動(dòng)邏輯分散精力。這個(gè)選擇使得項(xiàng)目重點(diǎn)突出調(diào)試直觀哪個(gè)燈該亮不該亮一目了然成功率更高。3. 元器件選型與電路原理詳解3.1 核心芯片選型與替代方案對(duì)于數(shù)字邏輯項(xiàng)目74系列TTL芯片是經(jīng)典之選。它們穩(wěn)定、易用、文檔豐富。以下是我們的核心芯片清單及其作用74LS86四路2輸入異或門用于構(gòu)建全加器的求和輸出SS A XOR B XOR Cin需要兩個(gè)異或門級(jí)聯(lián)。一個(gè)芯片包含4個(gè)獨(dú)立的異或門我們至少需要4個(gè)每位一個(gè)S計(jì)算但考慮到級(jí)聯(lián)可能需要多個(gè)。實(shí)際上更優(yōu)的方案是使用...74LS08四路2輸入與門 74LS32四路2輸入或門用于構(gòu)建全加器的進(jìn)位輸出Cout。根據(jù)公式Cout (A AND B) OR (A AND Cin) OR (B AND Cin)我們需要與門和或門。但這樣搭建一個(gè)全加器就需要多個(gè)芯片布線復(fù)雜。更優(yōu)方案74LS2834位二進(jìn)制全加器這是本項(xiàng)目強(qiáng)烈推薦的芯片它內(nèi)部集成了4個(gè)全加器的快速進(jìn)位鏈只需一個(gè)芯片就能完成兩個(gè)4位二進(jìn)制數(shù)的加法。輸入為A0-A3, B0-B3, C0低位進(jìn)位輸出為S0-S3和C4高位進(jìn)位。使用它能極大簡(jiǎn)化電路提高可靠性是工程實(shí)踐中的明智選擇。我個(gè)人的經(jīng)驗(yàn)是理解原理用分立門實(shí)現(xiàn)項(xiàng)目用集成芯片。我們將以74LS283為核心展開(kāi)設(shè)計(jì)。輸入接口8位撥碼開(kāi)關(guān)選擇常見(jiàn)的DIP-8封裝。需要配套10kΩ上拉電阻排。當(dāng)開(kāi)關(guān)斷開(kāi)時(shí)通過(guò)上拉電阻將輸入引腳拉到高電平Vcc當(dāng)開(kāi)關(guān)閉合時(shí)引腳被接地變?yōu)榈碗娖?。這樣確保了確定的邏輯電平。輸出顯示5mm LED發(fā)光二極管選擇紅色或綠色。關(guān)鍵點(diǎn)在于限流電阻的計(jì)算。假設(shè)LED正向壓降Vf約為2V工作電流If期望為10mA足夠亮且安全電源電壓Vcc為5V。那么限流電阻R (Vcc - Vf) / If (5V - 2V) / 0.01A 300Ω??梢赃x擇330Ω的標(biāo)準(zhǔn)電阻。每位結(jié)果S0-S3, C4驅(qū)動(dòng)一個(gè)LED。電源相關(guān)穩(wěn)壓芯片7805如果使用高于5V的電源如9V電池或12V適配器需要它來(lái)輸出穩(wěn)定的5V。濾波電容在7805的輸入和輸出端對(duì)地分別并聯(lián)一個(gè)100nF的陶瓷電容和一個(gè)10uF-100uF的電解電容用于濾除高頻和低頻噪聲防止電路振蕩。電源開(kāi)關(guān)和指示燈一個(gè)帶LED的船型開(kāi)關(guān)很方便既能通斷電源又能指示狀態(tài)。注意74LS系列芯片是TTL邏輯其輸入引腳如果懸空默認(rèn)會(huì)被視為高電平但這是一種不穩(wěn)定狀態(tài)容易引入噪聲。因此所有不用的輸入引腳必須通過(guò)一個(gè)上拉電阻1kΩ-10kΩ接到Vcc或者直接接地絕不能懸空這是一個(gè)非常重要的實(shí)操紀(jì)律。3.2 電路原理圖核心部分解析我們圍繞74LS283設(shè)計(jì)核心計(jì)算與顯示部分。電源連接74LS283的Vcc引腳16接5VGND引腳8接地。這是所有芯片通電的基礎(chǔ)務(wù)必先檢查。數(shù)據(jù)輸入將8位撥碼開(kāi)關(guān)的輸出分別連接到74LS283的A0-A3和B0-B3。例如開(kāi)關(guān)組1的4位接A0-A3開(kāi)關(guān)組2的4位接B0-B3。每個(gè)開(kāi)關(guān)輸出線都需要接一個(gè)10kΩ上拉電阻到5V然后通過(guò)開(kāi)關(guān)接地。進(jìn)位輸入最低位進(jìn)位C0引腳7通常直接接地表示0以實(shí)現(xiàn)純加法。如果你想實(shí)現(xiàn)減法需要補(bǔ)碼運(yùn)算則需要將C0連接到一個(gè)開(kāi)關(guān)來(lái)控制這屬于擴(kuò)展功能。數(shù)據(jù)輸出與顯示74LS283的S0-S3引腳9, 6, 2, 15和C4引腳14就是我們的5位結(jié)果。每個(gè)輸出引腳串聯(lián)一個(gè)330Ω的限流電阻然后連接到一個(gè)LED的正極陽(yáng)極LED的負(fù)極陰極接地。這樣當(dāng)輸出為高電平約3.4V以上時(shí)LED點(diǎn)亮表示‘1’輸出為低電平約0.4V以下時(shí)LED熄滅表示‘0’。一個(gè)關(guān)鍵細(xì)節(jié)LED的驅(qū)動(dòng)能力。74LS283的輸出高電平電流Source Current能力較弱典型值只有0.4mA而驅(qū)動(dòng)LED需要5-10mA。因此我們上面采用的“輸出高電平點(diǎn)亮LED”的連接方式LED陽(yáng)極接輸出陰極接地可能無(wú)法讓LED足夠亮甚至完全不亮。正確的接法是利用芯片強(qiáng)大的輸出低電平電流Sink Current典型值8mA能力。將LED的陽(yáng)極通過(guò)330Ω電阻接到5V陰極接到芯片的輸出引腳。這樣當(dāng)輸出為低電平時(shí)電流從5V流經(jīng)電阻、LED流入芯片引腳到地LED點(diǎn)亮表示‘0’等等邏輯反了。這帶來(lái)了邏輯反轉(zhuǎn)芯片輸出‘0’時(shí)LED亮輸出‘1’時(shí)LED滅。這不符合我們的直覺(jué)。解決方案有兩種方案A接受邏輯反轉(zhuǎn)在腦子里做轉(zhuǎn)換燈亮0燈滅1。這雖然可行但容易出錯(cuò)。方案B增加反相器。在74LS283的輸出后接一個(gè)74LS04六反相器芯片用反相器驅(qū)動(dòng)LED。這樣邏輯關(guān)系就正確了芯片輸出‘1’ - 反相器輸出‘0’ - LED陽(yáng)極接Vcc陰極接低電平 - LED亮。這是更專業(yè)和可靠的做法。雖然多用一個(gè)芯片但保證了邏輯清晰和驅(qū)動(dòng)能力。在原型驗(yàn)證階段為了簡(jiǎn)化我有時(shí)會(huì)采用方案A但會(huì)在板子上用標(biāo)簽明確標(biāo)注“亮0”。在正式作品或教學(xué)中我強(qiáng)烈推薦方案B。4. 實(shí)操搭建、布線工藝與調(diào)試實(shí)錄4.1 焊接前的規(guī)劃與準(zhǔn)備“謀定而后動(dòng)”在硬件項(xiàng)目里至關(guān)重要。在拿起電烙鐵之前請(qǐng)做好以下準(zhǔn)備繪制詳細(xì)的接線圖即使有原理圖也建議在紙上或繪圖軟件里畫(huà)一張針對(duì)面包板或萬(wàn)用板的“物理布局圖”。標(biāo)出每個(gè)芯片的位置、方向規(guī)劃好電源線Vcc和地線GND的走線主干道。盡量讓電源走線粗短并采用“星型”或“主干-分支”結(jié)構(gòu)避免因走線過(guò)長(zhǎng)過(guò)細(xì)導(dǎo)致末端芯片供電不足。元器件布局原則按信號(hào)流布局。輸入器件撥碼開(kāi)關(guān)放在板子一側(cè)核心芯片74LS283 74LS04放在中間輸出器件LED放在另一側(cè)。電源模塊7805電容單獨(dú)放在一個(gè)區(qū)域。這樣布線清晰便于調(diào)試。工具與材料清單復(fù)查焊接工具恒溫烙鐵溫度設(shè)定在350°C左右為宜、焊錫絲建議含松香芯的0.8mm規(guī)格、吸錫器、鑷子、剪線鉗。輔助工具萬(wàn)用表必備用于測(cè)通斷、電壓、放大鏡臺(tái)燈檢查焊接點(diǎn)。材料萬(wàn)用板洞洞板、導(dǎo)線不同顏色區(qū)分電源、地、信號(hào)、芯片座強(qiáng)烈建議使用避免芯片直接焊接損壞、所有前述元器件。4.2 分步焊接與工藝要點(diǎn)焊接順序遵循“先低后高先電源后信號(hào)”的原則焊接芯片座和電源相關(guān)首先焊接所有IC座注意缺口方向一致。然后焊接電源濾波電容和7805如果用到。接著鋪設(shè)電源和地線。這是最關(guān)鍵的一步。我習(xí)慣用紅色導(dǎo)線作為Vcc總線黑色或藍(lán)色導(dǎo)線作為GND總線沿著板子邊緣或芯片座的一側(cè)貫穿整個(gè)板子。在每個(gè)芯片座的Vcc和GND引腳處用導(dǎo)線連接到總線上。確保連接牢固用萬(wàn)用表通斷檔檢查每個(gè)芯片座的電源引腳是否與總線連通。焊接輸入模塊焊接8位撥碼開(kāi)關(guān)和對(duì)應(yīng)的10kΩ上拉電阻排。將電阻排的一端所有引腳公共端連接到Vcc總線另一端分別連接開(kāi)關(guān)的固定引腳。開(kāi)關(guān)的動(dòng)引腳引出信號(hào)線準(zhǔn)備連接到芯片。用萬(wàn)用表檢查當(dāng)開(kāi)關(guān)斷開(kāi)時(shí)信號(hào)線對(duì)地電壓應(yīng)為接近5V高電平開(kāi)關(guān)閉合時(shí)電壓應(yīng)接近0V低電平。焊接核心計(jì)算與驅(qū)動(dòng)模塊將74LS283和74LS04如果使用插入對(duì)應(yīng)的芯片座。按照原理圖用導(dǎo)線連接撥碼開(kāi)關(guān)的輸出到74LS283的輸入。連接74LS283的輸出到74LS04的輸入再連接74LS04的輸出到LED的限流電阻。此處布線要整齊盡量橫平豎直避免飛線交叉混亂。對(duì)于并行的數(shù)據(jù)線如A0-A3可以使用排線既美觀又可靠。焊接輸出顯示模塊將5個(gè)LED和對(duì)應(yīng)的330Ω電阻焊接好。注意LED的極性長(zhǎng)腳為正陽(yáng)極短腳為負(fù)陰極。按照方案B電阻一端接Vcc另一端接LED正極LED負(fù)極接到74LS04的輸出端。最后插芯片在所有焊接完成并反復(fù)檢查無(wú)誤后最后才將74LS283、74LS04等芯片插入插座。這樣可以防止焊接過(guò)程中靜電或過(guò)熱損壞芯片。焊接工藝心得焊點(diǎn)要飽滿光滑呈圓錐形送錫后烙鐵頭在焊盤(pán)和引腳上停留足夠時(shí)間通常1-3秒讓焊錫完全浸潤(rùn)然后迅速移開(kāi)烙鐵焊點(diǎn)會(huì)自然凝固。避免虛焊焊錫只掛在引腳或焊盤(pán)上未形成合金層。防止橋接對(duì)于密集的引腳如芯片座焊錫不要過(guò)多。如果發(fā)生橋接可以用吸錫線或吸錫器清理或者用烙鐵頭同時(shí)加熱兩個(gè)橋接的引腳然后快速分開(kāi)利用表面張力吸走多余焊錫。保持烙鐵頭清潔焊接前在濕海綿上擦一下烙鐵頭保證其上有一層薄薄的焊錫掛錫這樣導(dǎo)熱才好。4.3 上電調(diào)試與問(wèn)題排查最激動(dòng)人心又最緊張的環(huán)節(jié)就是首次上電。務(wù)必遵循安全流程目視檢查斷電狀態(tài)下再次仔細(xì)檢查所有連線特別是電源正負(fù)極是否接反芯片方向是否正確LED極性是否正確。靜態(tài)電阻檢查用萬(wàn)用表電阻檔或二極管檔測(cè)量電源輸入端如7805的Vin和GND之間的電阻。在未插芯片時(shí)電阻應(yīng)該很大幾百kΩ以上。如果電阻很小如幾Ω說(shuō)明存在嚴(yán)重短路必須排查。分級(jí)上電如果有可調(diào)電源先將電壓調(diào)至5V電流限流在100mA左右再接上電路板。觀察電流讀數(shù)正??蛰d電流應(yīng)在幾十mA以內(nèi)。如果電流瞬間很大并觸發(fā)限流說(shuō)明有短路。關(guān)鍵點(diǎn)電壓測(cè)試上電后先別管功能用萬(wàn)用表電壓檔測(cè)量每個(gè)芯片的Vcc引腳通常是右上角對(duì)地電壓是否為穩(wěn)定的5V左右7805輸出端是否為5V撥碼開(kāi)關(guān)在斷開(kāi)位置時(shí)輸出信號(hào)線電壓是否為高電平3.5V閉合時(shí)是否為低電平0.5V功能測(cè)試從最簡(jiǎn)單的情況開(kāi)始。將所有輸入開(kāi)關(guān)撥到0接地此時(shí)輸入A0000, B0000。觀察輸出LED。理論上S0-S3和C4都應(yīng)該滅如果采用方案B且加了反相器則芯片輸出為0反相后為1LED亮這里容易混亂務(wù)必對(duì)照自己的電路邏輯。記錄下初始狀態(tài)。測(cè)試0001 0000 0001只將A0的開(kāi)關(guān)撥到1其他為0。檢查是否只有S0對(duì)應(yīng)的LED狀態(tài)翻轉(zhuǎn)亮/滅變化。測(cè)試0001 0001 0010將A0和B0都撥到1。檢查是否S0熄滅S1點(diǎn)亮發(fā)生了進(jìn)位。測(cè)試進(jìn)位鏈1111 0001 0000 (C41)。將A0-A3全部撥到1B0撥到1。檢查S0-S3是否全滅最高位進(jìn)位C4對(duì)應(yīng)的LED是否點(diǎn)亮。常見(jiàn)問(wèn)題與排查實(shí)錄問(wèn)題所有LED都不亮。排查首先檢查電源。7805輸入電壓是否足夠輸出是否為5V總電源開(kāi)關(guān)是否打開(kāi)板子上的Vcc/GND總線是否真的連通到了每個(gè)芯片和LED心得80%的故障源于電源。用萬(wàn)用表從電源入口開(kāi)始像偵探一樣一步步追蹤5V電壓到底消失在了哪里。問(wèn)題部分LED常亮或常滅不隨輸入變化。排查重點(diǎn)檢查控制該LED的信號(hào)通路。例如S2的LED常亮。測(cè)量74LS04對(duì)應(yīng)輸出引腳電壓。如果一直是低電平0V則可能是前級(jí)74LS283的輸出引腳損壞或焊接短路到地如果一直是高電平5V則可能是74LS04的輸入引腳懸空或前級(jí)輸出故障。用萬(wàn)用表測(cè)量相關(guān)引腳間的通斷以及電壓是否隨輸入變化。心得數(shù)字電路是“非黑即白”的。用萬(wàn)用表測(cè)量關(guān)鍵節(jié)點(diǎn)的電壓與邏輯預(yù)期對(duì)比是定位故障的最直接方法。懸空的輸入引腳是萬(wàn)惡之源。問(wèn)題加法結(jié)果不正確例如 00010001 的結(jié)果不是0010。排查這是邏輯錯(cuò)誤。首先確認(rèn)你采用的顯示方案是否用了反相器腦子里預(yù)期的LED亮滅模式是否正確。然后用萬(wàn)用表測(cè)量74LS283的輸入引腳A0, B0等確認(rèn)開(kāi)關(guān)信號(hào)是否正確送達(dá)高/低電平明確。再測(cè)量輸出引腳S0, S1, C0等。對(duì)照74LS283的真值表數(shù)據(jù)手冊(cè)逐位驗(yàn)證。心得遇到邏輯錯(cuò)誤最好的方法是“隔離測(cè)試”??梢詴簳r(shí)斷開(kāi)后續(xù)電路如拔掉74LS04直接測(cè)量74LS283的輸出看其本身邏輯是否正確。有時(shí)候問(wèn)題出在驅(qū)動(dòng)級(jí)或負(fù)載上。問(wèn)題電路工作不穩(wěn)定偶爾結(jié)果出錯(cuò)。排查這通常是電源噪聲或信號(hào)干擾所致。檢查所有電源濾波電容是否焊好特別是7805輸入輸出端的電容。檢查地線是否連接良好是否存在“地環(huán)路”或過(guò)長(zhǎng)過(guò)細(xì)的地線。確保所有未使用的芯片輸入引腳都已妥善處理上拉或接地。心得在數(shù)字電路中電源和地的完整性至關(guān)重要。嘗試在74LS283的Vcc和GND引腳之間就近焊接一個(gè)0.1uF的陶瓷電容可以有效濾除高頻噪聲。這個(gè)電容要盡量靠近芯片引腳。5. 擴(kuò)展思考與項(xiàng)目變體完成基礎(chǔ)的四位二進(jìn)制加法器后這個(gè)項(xiàng)目還有很多可以玩味和擴(kuò)展的方向這能讓你對(duì)數(shù)字系統(tǒng)的理解更深一層。5.1 功能擴(kuò)展從加法器到算術(shù)邏輯單元ALU雛形一個(gè)完整的計(jì)算器不僅能加還能減、比較、邏輯運(yùn)算等。我們可以以此為基礎(chǔ)進(jìn)行擴(kuò)展加減法控制實(shí)現(xiàn)一個(gè)4位加減法器。關(guān)鍵在于利用補(bǔ)碼運(yùn)算A - B A (~B 1)。我們可以增加一個(gè)模式選擇開(kāi)關(guān)M。當(dāng)M0時(shí)執(zhí)行加法B數(shù)原樣輸入最低位進(jìn)位Cin0。當(dāng)M1時(shí)執(zhí)行減法此時(shí)需要將B數(shù)的每一位取反這可以用一個(gè)74LS86異或門實(shí)現(xiàn)B XOR 1 NOT B同時(shí)將最低位進(jìn)位Cin置為1。這樣通過(guò)一個(gè)開(kāi)關(guān)就控制了是進(jìn)行AB還是A (~B1)。邏輯運(yùn)算功能增加與、或、非等基本邏輯運(yùn)算。這需要增加數(shù)據(jù)選擇器如74LS157來(lái)在加法結(jié)果和邏輯運(yùn)算結(jié)果之間進(jìn)行選擇。通過(guò)額外的功能選擇開(kāi)關(guān)可以構(gòu)建一個(gè)最簡(jiǎn)單的、固定位寬的ALU模型。結(jié)果比較與標(biāo)志位通過(guò)額外的邏輯電路可以判斷結(jié)果是否為零Zero Flag、最高位是否有進(jìn)位Carry Flag、結(jié)果是否為負(fù)在補(bǔ)碼體系中最高位為1表示負(fù)數(shù)等。這些“標(biāo)志位”是CPU狀態(tài)寄存器的核心概念。5.2 顯示升級(jí)從二進(jìn)制LED到十進(jìn)制數(shù)碼管用LED顯示二進(jìn)制結(jié)果雖然直觀但對(duì)人類不友好。升級(jí)到十進(jìn)制顯示會(huì)是一個(gè)有趣的挑戰(zhàn)。二進(jìn)制轉(zhuǎn)BCD碼加法器輸出的結(jié)果是二進(jìn)制數(shù)0000-1111對(duì)應(yīng)0-15。要驅(qū)動(dòng)七段數(shù)碼管需要先將二進(jìn)制轉(zhuǎn)換為BCD碼8421碼。對(duì)于0-9二進(jìn)制與BCD相同對(duì)于10-151010-1111需要做“加6校正”。這需要額外的邏輯電路例如使用芯片74LS85數(shù)值比較器和74LS283加法器來(lái)構(gòu)建一個(gè)簡(jiǎn)單的“加6校正器”或者使用專用的二進(jìn)制轉(zhuǎn)BCD芯片。BCD碼驅(qū)動(dòng)數(shù)碼管獲得BCD碼后需要使用譯碼驅(qū)動(dòng)器芯片如74LS47驅(qū)動(dòng)共陽(yáng)極數(shù)碼管或74LS48驅(qū)動(dòng)共陰極數(shù)碼管將4位BCD碼轉(zhuǎn)換為七段數(shù)碼管各段的控制信號(hào)。多位顯示對(duì)于大于9的結(jié)果10-15我們需要兩個(gè)數(shù)碼管來(lái)顯示十位和個(gè)位。這就需要將二進(jìn)制結(jié)果分離出十位和個(gè)位這涉及到更復(fù)雜的時(shí)序或組合邏輯電路甚至可以引入簡(jiǎn)單的計(jì)數(shù)器或觸發(fā)器來(lái)暫存數(shù)據(jù)這便從純組合邏輯邁向了時(shí)序邏輯的大門。5.3 交互升級(jí)引入時(shí)鐘與寄存器目前的計(jì)算器是純組合邏輯輸入變化輸出立即響應(yīng)。一個(gè)更接近真實(shí)計(jì)算器的模型需要“寄存器”來(lái)暫存數(shù)據(jù)以及“時(shí)鐘”來(lái)控制操作節(jié)奏。添加輸入寄存器使用兩片4位鎖存器如74LS75或觸發(fā)器如74LS174在按下“輸入確認(rèn)”按鈕時(shí)將當(dāng)前撥碼開(kāi)關(guān)的狀態(tài)鎖存到寄存器中作為操作數(shù)A和B。這樣在計(jì)算過(guò)程中改變開(kāi)關(guān)就不會(huì)影響已輸入的數(shù)據(jù)。添加結(jié)果寄存器同樣使用觸發(fā)器來(lái)鎖存加法器的輸出結(jié)果并驅(qū)動(dòng)顯示電路。這樣顯示的結(jié)果會(huì)保持穩(wěn)定直到下一次計(jì)算完成。引入時(shí)鐘脈沖用一個(gè)555定時(shí)器芯片產(chǎn)生低頻時(shí)鐘脈沖如1Hz。整個(gè)計(jì)算過(guò)程可以設(shè)計(jì)為按下“計(jì)算”按鈕后在下一個(gè)時(shí)鐘上升沿將輸入寄存器的值送入加法器同時(shí)將結(jié)果存入輸出寄存器并顯示。這模擬了同步數(shù)字系統(tǒng)的基本工作模式。通過(guò)以上擴(kuò)展這個(gè)小小的二進(jìn)制計(jì)算器項(xiàng)目幾乎可以觸摸到微型計(jì)算機(jī)核心部件的邊緣。每一次擴(kuò)展都是對(duì)數(shù)字邏輯、計(jì)算機(jī)組成原理知識(shí)的深刻實(shí)踐。從最初幾個(gè)邏輯門叮當(dāng)作響到最終一個(gè)受控的、可交互的計(jì)算系統(tǒng)這種親手構(gòu)建的成就感是任何模擬軟件都無(wú)法替代的。它帶給你的不僅僅是知識(shí)更是一種對(duì)機(jī)器如何“思考”的直覺(jué)。