1. 这不是数学课,是造“思考机器”的开工仪式
别再被“电脑会算术”这种说法骗了十几年。你敲下 2+3=5,屏幕弹出结果——这背后没有一个数字在跳舞,没有一个算盘珠在拨动,甚至没有一个“5”真正存在过。存在的只是一群开关,在黑暗的硅片深处,以每秒数十亿次的节奏,咔哒、咔哒、咔哒地开合。一块石头凭什么能思考?答案就藏在它最原始的“呼吸方式”里:不是十进制的繁复,而是二进制的绝对——只有“有电”和“没电”,只有“通”和“断”,只有“1”和“0”。这看似简陋的二元世界,恰恰是人类迄今建造出的最精密、最可靠、最可预测的逻辑基石。
我带过几十期硬件入门工作坊,每次开场第一件事,就是让学生用纸板剪两个水闸模型:一个闸门全开(代表1),一个闸门全关(代表0)。然后用橡皮筋、吸管和小木棍搭出“水流控制通道”。当他们亲手把两股水流分别接入一个Y型汇合口,并在汇合口下游加装第三个闸门——这个闸门只在上游两股水都来时才打开——他们就亲手实现了“与门”。这不是抽象符号,是水的物理行为;不是教科书定义,是手指的触感反馈。二进制不是一种进制,而是一种物理状态的编码协议;与或非门不是逻辑符号,而是电流路径的交通管制图;加法器不是算法,而是开关组合的机械联动装置。这篇内容,就是带你从水闸开关开始,一砖一瓦,亲手“砌”出一个8位CPU的算术逻辑单元(ALU)——它不跑Windows,不连Wi-Fi,但它能真实完成加、减、与、或、非、异或等全部基础运算。你不需要芯片厂光刻机,只需要理解开关如何协作,就能看清所有现代计算设备的底层心跳。适合完全零基础但手痒想拆解世界本质的中学生,也适合写了十年代码却从没摸过真逻辑门的工程师。它不教你写Python,它教你让Python得以运行的那层“地壳”是怎么长出来的。
2. 为什么非得是二进制?——从水闸、电灯到硅晶体管的硬核选择链
2.1 二进制不是人类的“偏好”,而是物理世界的“刚需”
很多人以为二进制是冯·诺依曼拍脑袋定的“方便记数法”。错。它是被物理定律逼出来的唯一可行方案。我们来倒推:假设你想造一台机器,让它稳定、可靠、抗干扰地做逻辑判断。你手头有几种“状态载体”可选?
电压连续值:比如用0~5V代表0~10。理论上很美,但现实残酷:电源波动±0.1V、导线发热导致压降、环境温度变化、电磁干扰……任何微小扰动都会让“3.2V”漂移到“3.15V”,你如何确定它该算3还是4?更可怕的是,放大器在放大微弱信号时,噪声会被同步放大,信噪比急剧恶化。这就像用一根晃动的尺子去量头发丝直径——精度归零。
多电平离散值:比如用0V/1.67V/3.33V/5V代表0/1/2/3(四进制)。看似提升信息密度,但代价是容错空间被切成四份。原本5V系统允许±0.5V误差(10%容差),现在每个电平间隔仅1.67V,容差必须压缩到±0.2V以内(12%相对容差,但绝对值更苛刻)。制造工艺、温漂补偿、信号完整性设计难度呈指数级上升。上世纪60年代IBM曾尝试过三电平计算机,最终因良率太低、故障率太高而放弃。
二进制双态:只用两个明确、分离、易判别的物理状态。比如:
- 水闸:全开(水流汹涌) vs 全关(滴水不漏)——中间状态不稳定,自然被排除;
- 电灯:亮(电流>阈值) vs 灭(电流<阈值)——人眼对明暗分辨远超对亮度等级的分辨;
- 晶体管:饱和导通(Vce≈0.2V,近似短路) vs 截止(Ic≈0,近似开路)——这是半导体物理决定的天然双稳态。
提示:关键不在“只有两个数”,而在“两个状态之间有巨大、不可逾越的物理鸿沟”。这个鸿沟就是噪声容限(Noise Margin)。CMOS电路中,高电平最低电压(Voh)与低电平最高电压(Vol)之间留有至少1V的空白区,任何落在这个区间的信号都被视为非法,直接被拒绝——这相当于给逻辑判断加了一道物理防火墙。
2.2 “1”和“0”到底对应什么?——破除符号迷信,回归物理本体
新手常纠结:“1”到底是高电压还是低电压?“0”是不是代表‘没有’?这是典型的概念混淆。“1”和“0”是逻辑值(Logic Value),不是物理量(Physical Quantity)。它们是人为约定的标签,用于映射物理状态。实际工程中有两种主流约定:
正逻辑(Positive Logic):高电平(如+5V或+3.3V)→ 逻辑1;低电平(如0V)→ 逻辑0。这是绝大多数数字电路的标准,因为NPN晶体管或NMOS管在高电平时更易驱动负载,功耗与速度更优。
负逻辑(Negative Logic):低电平 → 逻辑1;高电平 → 逻辑0。多见于老式TTL电路或特定接口(如RS-232串口),利用电平反转实现信号隔离或抗干扰。
重点来了:无论哪种约定,“1”绝不等于“有能量”,“0”也绝不等于“无能量”。一个CMOS反相器在输出“0”时,其PMOS管截止、NMOS管导通,电流从GND流向输出端——它正在消耗能量!而输出“1”时,PMOS导通、NMOS截止,电流从VDD流向输出端——同样耗能。所谓“静态功耗为零”,是指输入不变时,两个MOS管不会同时导通形成直流通路,但开关翻转瞬间,必有短暂的“穿通电流”(Shoot-through Current)。所以,“1”和“0”的本质,是系统内部定义的、可被下游电路无歧义识别的两种稳定工作模式。
2.3 为什么不用三进制、五进制?——成本、可靠性和扩展性的铁三角
有人会问:既然二进制靠“物理鸿沟”保可靠,那把鸿沟加宽点,用三进制(0/1/2)岂不更好?理论上有吸引力,但实践上撞上三堵墙:
制造成本墙:二进制芯片只需精确控制“导通/截止”两个阈值。三进制需精确控制三个电压区间(如0~1.2V/1.2~2.4V/2.4~3.3V),ADC/DAC精度要求翻倍,模拟电路设计复杂度飙升,良率暴跌。台积电3nm产线单片晶圆成本超百万美元,多1%良率损失就是数百万美元。
信号完整性墙:高频信号在PCB走线上会反射、串扰、衰减。二进制只需保证信号在采样点稳定处于“高区”或“低区”;三进制需在三个窄区间内精准落点,对布线阻抗控制、端接匹配、电源纹波抑制提出近乎不可能的要求。实测显示,10Gbps速率下,二进制NRZ信号眼图张开度可达80%,而三进制PAM3眼图张开度不足30%,误码率高出4个数量级。
逻辑扩展墙:二进制门电路(与、或、非)结构极简,可无限级联。一个2输入与门用2个MOS管即可实现;而三进制“最小完备集”需至少3种基本门(如MIN、MAX、ROTATE),电路规模成倍增加。更致命的是,二进制的布尔代数有完美对偶性(德·摩根定律),使逻辑化简、综合、验证形成成熟工业体系;三进制代数至今无统一、高效、可自动化的综合工具链。
所以,二进制不是最优解,而是物理约束、工程现实与数学工具三者交集下的唯一可行解。它像自行车的两个轮子——不是因为三轮车不稳,而是两轮在轻量化、操控性、制造成本上达到了不可超越的平衡点。
3. 从水闸到晶体管:与、或、非门的物理实现与手工搭建指南
3.1 水闸模型:用日常材料理解门电路的本质行为
先扔掉芯片手册,拿起你的水杯和吸管。我们用最原始的方式重建逻辑:
“与门”(AND)水闸模型:
准备两个独立水源(A、B),各接一个单向阀控水闸(确保只能进不能出)。将两股水流引入一个Y型汇合腔。在汇合腔下游,安装第三个水闸C。设定规则:只有当A和B的水闸都开启时,C水闸才被水流压力顶开;任一关闭,C即闭合。这就是AND——输出C=1当且仅当A=1且B=1。注意:这里C的开启不是由A、B“命令”,而是由A、B共同创造的物理条件(足够水压)触发的。逻辑门的本质是条件响应,不是指令执行。“或门”(OR)水闸模型:
同样A、B两水源,但汇合腔改为T型,且C水闸设计为“任一股水流冲击即开启”。你可以用弹性薄膜做C闸门,A或B单独冲击就能使其变形开启。规则:A开启或B开启(或两者都开),C即开启。这就是OR——输出C=1当A=1或B=1(或两者)。“非门”(NOT)水闸模型:
这个最反直觉。准备一个常开式水闸C(默认水流通过)。在C上游,设置一个受控水闸D。当D关闭时,水流畅通,C保持开启(输出1);当D开启时,水流被D分流,C处水压骤降,弹簧将其拉回关闭状态(输出0)。规则:D开启→C关闭;D关闭→C开启。这就是NOT——输出与输入相反。它揭示了非门的核心:需要一个参考状态(常开/常闭)和一个扰动源(输入信号)。
实操心得:我在 workshop 中发现,90%的新手第一次搭OR门会失败——因为他们试图让A、B“合力推动”C,结果水流互相干扰。正确做法是让A、B从不同角度冲击C的同一弹性面,利用流体力学中的“动量叠加原理”。这说明:门电路不是简单拼接,而是要理解能量传递路径。
3.2 晶体管级实现:用真实元件看懂“电子水闸”
水闸是宏观类比,真正在CPU里干活的是晶体管。我们以最常用的CMOS技术为例(现代CPU 99%采用此技术):
CMOS非门(Inverter):
最小单元,仅需2个MOSFET。PMOS管(上管)源极接VDD,NMOS管(下管)源极接GND,两管漏极相连作为输出,栅极并联作为输入。- 输入=0(低电平):PMOS栅压<Vth,导通;NMOS栅压<Vth,截止。电流从VDD经PMOS流向输出,输出被拉至高电平→1。
- 输入=1(高电平):PMOS截止,NMOS导通。电流从输出经NMOS流向GND,输出被拉至低电平→0。
关键:两管永不同时导通(理想情况下),静态功耗≈0。这就是“电子水闸”的终极形态——用栅极电压控制沟道通断,实现无触点、超高速开关。
CMOS与门(2-input NAND):
结构:上侧两个PMOS并联(提供高电平路径),下侧两个NMOS串联(提供低电平路径)。输出取自两串管子的连接点。- A=0, B=0:上侧至少一个PMOS导通(并联,一通即通),下侧两个NMOS都截止(串联,全通才通)→ 输出=1。
- A=1, B=1:上侧两个PMOS都截止,下侧两个NMOS都导通→ 输出=0。
- 其他组合:输出=1。
注意:这是NAND(与非),要得到AND,后面再接一个NOT即可。工业界偏爱NAND/NOR,因为它们晶体管数更少(2输入NAND仅4管,AND需6管),速度更快。
CMOS或门(2-input NOR):
结构:上侧两个PMOS串联,下侧两个NMOS并联。分析逻辑类似,此处略。
提示:所有CMOS门电路的输出高电平≈VDD,低电平≈0V,且输出阻抗极低(可驱动多个下级输入),输入阻抗极高(几乎不取电流)。这保证了信号在长链传递中不失真——就像水闸模型中,上游水压稳定,下游才能可靠响应。
3.3 手工搭建实战:用面包板+74HC系列芯片点亮你的第一个逻辑门
理论够了,现在动手。你不需要焊接,用面包板和现成逻辑芯片(TTL/CMOS兼容)即可:
必备物料清单:
- 面包板 ×1
- 74HC00(四2输入NAND门)×1
- 74HC04(六反相器)×1
- LED×2(红、绿)、220Ω电阻×2(LED限流)
- 5V直流电源(USB充电宝+DC-DC模块即可)
- 跳线若干
搭建NAND门验证电路:
- 将74HC00插入面包板,VCC(14脚)接5V,GND(7脚)接地。
- 取其中一单元(1、2脚为输入,3脚为输出)。1脚接开关S1(上拉至5V,按下=0V),2脚接开关S2(同理)。
- 3脚(输出)经220Ω电阻接LED阳极,LED阴极接地。
- 操作:S1、S2均释放(输入=1,1)→ LED灭(NAND输出=0);S1按住(0,1)→ LED亮(输出=1);S2按住(1,0)→ LED亮;S1&S2均按住(0,0)→ LED亮。完美符合NAND真值表。
关键细节:
- 74HC系列是高速CMOS,工作电压2–6V,兼容3.3V/5V系统,比老式74LS系列功耗低100倍。
- 开关必须上拉(接VCC)或下拉(接地),否则悬空引脚会因感应电荷随机翻转,导致LED乱闪——这是新手最大坑!
- LED限流电阻计算:假设LED压降2V,电流10mA,则R=(5V-2V)/0.01A=300Ω,取标称值220Ω(更亮)或330Ω(更省电)。
这个电路,就是你亲手造出的第一个“思考细胞”。它不联网,不烧录,但每一次开关按下,都在复现着Intel CPU里数十亿晶体管的同一套物理法则。
4. 加法器:从半加器到8位超前进位,如何让开关学会“进位”
4.1 为什么加法器是ALU的“心脏”?——运算的本质是状态转移
CPU的ALU(算术逻辑单元)看起来能做加、减、乘、除、与、或……但所有这些,最终都归结为加法器的变体。为什么?因为:
- 减法 = 加补码:A-B = A + (-B),而负数用二进制补码表示(取反+1),所以减法器=加法器+求补电路。
- 乘法 = 多次加法+移位:1010×0011 = (1010<<0) + (1010<<1) + 0 + 0,核心仍是加法器累加。
- 比较 = 减法+符号位判断:A>B?即判断(A-B)是否为正,依赖加法器输出的符号位(最高位)。
- 地址计算、指针运算、循环计数……一切内存操作的基础,都是加法。
所以,加法器不是ALU的一个功能模块,它是ALU的骨架。而加法器本身,是由最基础的“半加器”(Half Adder)一层层垒起来的。
4.2 半加器(HA):两个比特的“原始碰撞”
半加器处理两个1位二进制数A、B相加,输出本位和S(Sum)与进位Cout(Carry Out)。真值表如下:
| A | B | S | Cout |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
观察:
- S = A XOR B(异或):相同为0,不同为1。
- Cout = A AND B(与):仅当两者都为1时进位。
用门电路实现:1个XOR门 + 1个AND门。XOR可用2个NAND+1个AND搭建(因XOR非基本门),但74HC系列有专用XOR芯片(74HC86)。手工搭建时,用74HC00(NAND)和74HC04(NOT)即可:
XOR = (A NAND (A NAND B)) NAND (B NAND (A NAND B)) —— 这就是用4个NAND门实现XOR的经典结构。
实操心得:我曾用74HC00和74HC04在面包板上搭过半加器,测试时发现S输出偶尔抖动。排查半天,发现是未使用的NAND门输入悬空(CMOS输入悬空=高阻态,易受干扰)。解决方法:所有未用输入脚,必须接VCC或GND!这是数字电路黄金法则。
4.3 全加器(FA):加入“来自低位的进位”,构成完整链条
半加器无法处理“三位相加”(A+B+Cin),因为缺少对低位进位Cin的输入。全加器(Full Adder)补上这一环:输入A、B、Cin,输出S、Cout。真值表共8行,关键逻辑:
- S = A XOR B XOR Cin
- Cout = (A AND B) OR (B AND Cin) OR (A AND Cin)
实现方式有两种主流:
- 门级实现:用2个HA + 1个OR门。第一个HA算A+B得S1/Cout1,第二个HA算S1+Cin得S/Cout2,最后Cout = Cout1 OR Cout2。共需5个门(2XOR+2AND+1OR)。
- 优化实现:直接用布尔代数化简,Cout = AB + BCin + ACin,S = A⊕B⊕Cin。用74HC系列,可选74HC151(8选1数据选择器)或直接用PLD,但手工推荐门级。
4.4 串行进位加法器(RCA):最朴素的“链条式”构建
将8个FA首尾相接:FA0的Cin接GND(最低位无进位),Cout0接FA1的Cin,Cout1接FA2的Cin……Cout7为最终进位。这就是8位RCA。优点:结构简单,资源省(仅8FA)。缺点:速度慢。因为进位信号必须像多米诺骨牌一样,从FA0逐级传递到FA7。每级FA的进位传播延迟约10ns(74HC系列),8级总延迟达80ns,对应最高频率仅12.5MHz——远低于现代CPU的GHz级别。
4.5 超前进位加法器(CLA):破解进位瓶颈的“预判式”革命
CLA的核心思想:不等低位算完,就提前算出所有高位的进位。它定义两个关键概念:
- 生成信号G(Generate):本位自身产生进位,G = A AND B。
- 传播信号P(Propagate):本位不产生进位,但会把低位进位“传上来”,P = A XOR B。
则第i位的进位Cout_i = G_i + P_i · Cin_{i-1}。展开到高位:
- C1 = G0 + P0·C0
- C2 = G1 + P1·C1 = G1 + P1·G0 + P1·P0·C0
- C3 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0
可见,C3的计算不依赖C1、C2的值,只依赖G0/G1/G2、P0/P1/P2和初始C0。只要G/P信号一就绪,所有进位可并行计算!74HC283就是经典4位CLA芯片,内部已集成G/P生成与进位树。用两片74HC283级联,即可构成8位CLA,进位延迟仅20ns(比RCA快4倍),轻松跑100MHz。
提示:CLA的代价是门电路增多(进位树逻辑复杂),但对速度敏感的ALU,这是必须付出的代价。现代CPU的加法器早已不是简单CLA,而是结合了“进位选择”(Carry Select)、“进位跳过”(Carry Skip)等混合架构,但CLA的“预判”思想,仍是所有高速加法器的源头。
5. 手工打造8位ALU:从门电路到可运行的算术逻辑单元
5.1 ALU顶层设计:一个“多功能开关矩阵”
一个典型的8位ALU,需支持:加、减、与、或、非、异或、左移、右移、比较等。但核心是一个8位加法器 + 一组多路选择器(MUX)。架构如下:
┌───────────────┐ A[7:0] ─┤ ├─► Result[7:0] B[7:0] ─┤ 8-bit ALU ├─► Carry Out, Zero Flag, Sign Flag... Ctrl[3:0]─┤ (Control Bus) │ └───────────────┘Ctrl[3:0]是4位控制信号,决定ALU执行何种操作。例如:
0000=A+B,0001=A-B,0010=A AND B,0011=A OR B,0100=NOT A,0101=A XOR B...核心引擎:一个8位CLA(如两片74HC283)。但A、B输入前,需经“操作数预处理单元”:
- 对于减法:B需取反(用8个74HC04)+1(将Cin设为1);
- 对于逻辑运算(AND/OR/XOR):绕过加法器,直接用8位并行门电路(74HC08/32/86);
- 对于NOT A:仅对A取反,B置0。
结果选择:用8位2:1 MUX(如74HC157)在“加法器输出”和“逻辑运算输出”间切换。控制信号即Ctrl[3:0]的某一位。
5.2 手工搭建8位ALU:物料清单与分步指南
核心芯片清单:
- 74HC283(4位CLA)×2 → 构成8位加法器
- 74HC04(六反相器)×2 → 用于B取反(减法)和A取反(NOT)
- 74HC08(四2输入AND)×2 → 8位AND
- 74HC32(四2输入OR)×2 → 8位OR
- 74HC86(四2输入XOR)×2 → 8位XOR
- 74HC157(双4位2:1 MUX)×2 → 8位结果选择
- 74HC138(3-8译码器)×1 → 将4位Ctrl解码为8路控制线(简化布线)
- LED×8(结果指示)+ 220Ω电阻×8
- 开关阵列(8位A输入、8位B输入、4位Ctrl)
搭建步骤:
- 搭建加法器核心:将两片74HC283级联。第一片(低位)Cin接GND或Ctrl[0](若Ctrl[0]=1则启用进位输入);第二片(高位)Cin接第一片Cout。两片的A[3:0]/B[3:0]、A[7:4]/B[7:4]分别接输入总线。
- 搭建逻辑运算单元:将8位A、B分别接入74HC08/32/86的输入端。注意:74HC08是AND,74HC32是OR,74HC86是XOR,每片处理4位,故各需2片。输出分别接到8位MUX的“0输入端”。
- 搭建预处理单元:
- 减法:B总线先经74HC04取反,再送入加法器;同时将Ctrl[1](减法使能)接入第一片74HC283的Cin。
- NOT A:A总线经74HC04取反后,送入MUX的“1输入端”(逻辑运算分支)。
- 搭建MUX选择:用74HC157,其选通信号接Ctrl[2](0=逻辑运算,1=算术运算)。输出接LED结果总线。
- 搭建标志位生成:
- Zero Flag:8位Result经8输入NAND(74HC30)后取反(74HC04)——全0时输出1。
- Sign Flag:Result[7](最高位)直接接LED。
- Carry Out:取自第二片74HC283的Cout。
调试技巧:
- 先断开所有控制线,固定Ctrl=0000(加法),用开关输入A=00000001, B=00000001,应得Result=00000010,Carry=0。
- 再试Ctrl=0001(减法),A=00000010, B=00000001,应得Result=00000001,Carry=0(无借位)。
- 若结果错误,用万用表测关键节点电压:检查输入开关是否接触良好、芯片VCC/GND是否虚焊、悬空引脚是否接地。
这个手工ALU,虽只有8位、无时钟、纯组合逻辑,但它能真实执行所有基础运算。当你看到LED亮起“00001010”(十进制10),而你知道这是A=7、B=3经过加法器内部数十个晶体管协同工作的结果时,那种对计算本质的震撼,远超任何软件模拟。
6. 常见问题与避坑指南:从面包板抖动到“为什么我的ALU不进位”
6.1 电源与接地:90%的故障源于此
- 问题:LED随机闪烁,或某些操作下结果恒为0。
- 原因:面包板电源轨接触不良,或芯片GND未可靠连接。数字电路对电源噪声极度敏感,一个松动的GND焊点,会让整个逻辑电平漂移。
- 排查:
- 用万用表蜂鸣档,逐点测量所有芯片的7脚(GND)是否与电源GND连通(电阻<1Ω)。
- 测量VCC(14脚)对GND电压,必须稳定在4.75–5.25V(74HC系列容差±5%)。若电压跌至4.5V以下,LED可能无法可靠点亮,逻辑门输出电平不达标。
- 在每片芯片的VCC与GND引脚间,就近焊接0.1μF陶瓷电容(去耦电容)。这是抑制高频噪声的“急救包”,缺之必乱。
注意:不要用大容量电解电容(如100μF)替代去耦电容!电解电容响应慢,对高频噪声无效,且可能引发振荡。
6.2 信号完整性:悬空、串扰与扇出限制
- 问题:开关按下后,LED延迟亮起,或相邻LED微弱发光。
- 原因:
- 悬空输入:未使用的门电路输入脚未接VCC/GND,形成天线,拾取环境噪声,导致内部晶体管随机导通。
- 串扰:高速信号线(如CLK,但本项目无)平行走线过长,通过电容耦合干扰邻线。本项目为直流开关,主要风险是电源/地线共阻抗耦合。
- 扇出超限:一个输出驱动过多输入(如一个74HC04输出接10个其他芯片输入),导致输出高电平被拉低(灌电流超限)。74HC系列标准扇出为10,但建议≤6。
- 解决:
- 所有未用输入脚,一律用10kΩ电阻上拉至VCC(逻辑1)或下拉至GND(逻辑0)。
- 信号线尽量短,避免平行长距离布线;电源/地线用粗线,形成低阻抗回路。
- 若需驱动多负载,加缓冲器(74HC244)或使用扇出能力更强的74AC系列。
6.3 时序与竞争冒险:为什么“同时按下两个开关”结果不对?
- 问题:A、B开关同时按下时,Result偶尔错误,但单步操作正常。
- 原因:竞争冒险(Race Condition)。两个开关机械触点闭合时间有微秒级差异,导致A、B信号到达ALU的时间不同步。在FA中,若Cin比A/B晚到,可能造成中间态错误。
- 解决:
- 硬件消抖:在开关后加RC滤波(10kΩ+100nF),延时约1ms,消除机械抖动;再经施密特触发器(74HC14)整形,输出干净方波。
- 同步设计:添加一个全局时钟(如555定时器产生1Hz方波),所有输入经D触发器(74HC74)锁存,确保A、B、Ctrl在同一时钟沿进入ALU。这是迈向时序电路的关键一步。
6.4 ALU功能失效:Ctrl信号与芯片级联的隐秘陷阱
- 问题:减法永远输出0,或AND运算结果像加法。
- 原因:
- Ctrl信号未正确解码:例如,本该用Ctrl[1]控制减法,却误接到Ctrl[0]。
- 74HC283级联错误:高位片的A[7:4]、B[7:4]接反,或Cin/Cout接错(Cout应接高位Cin,而非VCC)。
- 逻辑门供电异常:74HC08的VCC脚虚焊,导致AND功能失效,输出恒为0。
- 速查表:
| 现象 | 最可能原因 | 快速验证 |
|---|---|---|
| 所有算术运算结果为0 | 加法器Cin悬空或接错(应接GND或Ctrl) | 测第一片74HC283的Cin脚电压 |
| 减法结果=加法结果 | B取反电路未启用,或Ctrl[1]未接通 | 用万用表测74HC04输入/输出,确认B已取反 |
| AND结果=OR结果 | 74HC08与74HC32的输出线在面包板上短路 | 断开所有输出,逐个测量通断 |
| MUX不切换 | 74HC157的选通信号(1A/1B)接错引脚 | 查74HC157 datasheet,确认1G(选通使能)是否接地 |