news 2026/4/3 4:26:23

由基本门构成的半加器:手把手教学教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
由基本门构成的半加器:手把手教学教程

从零开始造一个加法器:用两个门电路实现二进制“1+1=10”

你有没有想过,计算机是怎么做加法的?
不是打开计算器点几下,而是从最底层的物理电路开始——那些小小的芯片里,到底是怎么把“1+1”变成“10”(二进制)的?

今天我们就来动手做一个最原始、最基础的数字加法单元:半加器(Half Adder)
不需要FPGA,不用写Verilog,甚至连单片机都不用。只需要两块常见的逻辑门芯片和一块面包板,就能让你亲眼看到“进位”是如何产生的。

这不是理论课,而是一场硬核的硬件启蒙实验。准备好,我们要从布尔代数跳到LED灯亮灭的瞬间。


为什么“加法”要从半加器开始?

现代CPU一秒钟能执行几十亿次加法,但它内部最底层的算术逻辑,依然建立在几十年前就已定义清楚的基本单元之上。其中第一个环节,就是这个看起来简单到不能再简单的电路——半加器

它只能干一件事:把两个1位二进制数相加。

比如:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
-1 + 1 = 10← 注意!这是二进制,结果是“0进1”

关键就在于最后一个情况:不仅要输出本位的结果(0),还要告诉高位:“我这里产生了一个进位”。

所以半加器有两个输出:
-Sum(S):当前位的和
-Carry(C):是否向高位进位

它的输入只有两个:A 和 B。没有 Cin(进位输入),因此叫“半”加器——因为它不完整,但却是构建一切的基础。

🧱 想象你要盖一栋摩天大楼。全加器是标准楼层,而半加器,就是打地基时浇下的第一层混凝土。


真值表背后的逻辑:加法的本质是异或 + 与

我们先不急着接线,来看看数据怎么说。列出所有可能的输入组合:

ABSumCarry
0000
0110
1010
1101

观察一下:

  • Sum什么时候为1?
    当 A ≠ B 的时候。也就是一个为0、一个为1。这正是异或(XOR)运算的定义!

  • Carry什么时候为1?
    只有当 A = 1 且 B = 1 的时候。这就是典型的与(AND)运算

于是我们可以写出两个布尔表达式:

Sum = A ⊕ B
Carry = A · B

就这么简单?没错。整个加法过程,被拆解成了两个并行运行的逻辑判断。

这意味着什么?意味着你只要有一个异或门和一个与门,就可以实现一位二进制加法!


核心元件揭秘:XOR 和 AND 到底怎么工作?

异或门(XOR Gate)——“不同才通”的守门人

ABA⊕B
000
011
101
110

它的行为像极了“排他性选择”:只有一方为真时才触发。在我们的加法中,它负责回答:“这两个数一样吗?”不一样,就输出1;一样,就归零。

💡 实际上,很多初学者误以为 XOR 是“相同出1”,其实是反的。记住一句话:“异”即“不同”

如果你手头没有现成的 XOR 芯片(比如 74HC86),也可以用其他基本门搭出来:

$ A ⊕ B = (\overline{A} \cdot B) + (A \cdot \overline{B}) $

需要:
- 2 个 NOT(非门)
- 2 个 AND(与门)
- 1 个 OR(或门)

虽然多用了三个门,但好处是你完全理解了 XOR 的构成原理。不过对于教学实验来说,直接使用集成 XOR 更稳定高效。

推荐芯片:74HC86(CMOS 四路异或门),低功耗、宽电压、抗干扰强。


与门(AND Gate)——“全都要”的裁判员

ABA·B
000
010
100
111

只有当两个输入都是高电平(1)时,输出才是1。这正好对应“1+1=10”中的进位条件。

在这里,AND 门的角色非常明确:检测是否发生溢出

一旦它亮起,就意味着必须通知下一个比特位:“嘿,我这儿多出来一个1。”

常用型号:74HC08(四路与门),TTL 兼容,响应快,驱动能力强。


动手实践:在面包板上搭建你的第一个半加器

现在,让我们把上面的逻辑变成看得见摸得着的电路。

所需材料清单

器件数量说明
74HC86(XOR)1 片四路异或门,任选一路即可
74HC08(AND)1 片四路与门,同样只需一路
面包板1 块用于快速连接
拨码开关2 个控制输入 A 和 B
LED 发光二极管2 个分别指示 Sum 和 Carry
限流电阻(220Ω)2 个保护 LED 不烧毁
下拉电阻(10kΩ)2 个防止输入悬空
连接线若干若干杜邦线最佳
直流电源5VUSB供电模块或稳压源均可

接线步骤详解(跟着做,不会错)

第一步:上电!给IC供能

找到两块芯片的电源引脚:
-VCC(正电源)→ 第14脚
-GND(地)→ 第7脚

将两者分别接到电源轨的 +5V 和 GND,并确保共地。这是所有数字电路的第一准则:没电,啥都不是

建议在每个芯片的 VCC 和 GND 之间并联一个0.1μF 陶瓷电容,起到去耦作用,防止噪声干扰。


第二步:设置输入信号 A 和 B

取两个拨码开关,分别代表输入 A 和 B。

接法如下:
- 开关一端接 +5V
- 另一端接逻辑门的输入引脚
- 同时通过一个10kΩ 电阻接地(下拉电阻)

这样做的目的是:当开关断开时,输入端不会“浮空”,而是被可靠拉低到0,避免误判。

⚠️ 浮空输入是数字电路中最常见的错误来源之一。别小看这一个电阻,它能让你的实验成功率提升80%。


第三步:连接逻辑门

将 A 和 B 同时接入以下两个门电路:

  1. 异或门(74HC86)
    - A → 引脚1
    - B → 引脚2
    - 输出 Sum → 引脚3

  2. 与门(74HC08)
    - A → 引脚13
    - B → 引脚12
    - 输出 Carry → 引脚11

注意:具体引脚号根据你使用的门位置调整,但结构不变——双输入,单输出


第四步:点亮结果!

把两个输出连上 LED 指示灯:

  • Sum 输出(XOR)→ 220Ω电阻 → LED阳极 → LED阴极 → GND
  • Carry 输出(AND)→ 220Ω电阻 → LED阳极 → LED阴极 → GND

LED亮表示输出1,灭表示0。


第五步:测试验证

依次切换拨码开关,模拟四种输入组合:

ABSum LEDCarry LED实际含义
000+0=0
010+1=1
101+0=1
111+1=10(进位!)

当你看到最后一种情况下,Sum灯灭、Carry灯亮,恭喜你——你刚刚见证了计算机世界中最基本的“进位”事件的发生!


常见问题与避坑指南

哪怕是最简单的电路,也容易踩坑。以下是我在带学生实验时总结的几个高频问题:

❌ 问题1:LED一直亮或一直灭?

  • 检查电源是否正常接入(测一下第14脚是否有5V)
  • 查看LED极性是否接反(长脚为阳极)
  • 限流电阻是否缺失或阻值过大

❌ 问题2:输入变化时输出不稳定、闪烁?

  • 很可能是输入悬空!务必确认每个未用输入端都接地或接VCC
  • 添加去耦电容(0.1μF)跨接在VCC-GND之间

❌ 问题3:XOR门输出不符合预期?

  • 确认你用的是74HC86而不是其他功能芯片(如74HC32是或门)
  • 查阅数据手册核对引脚图,别插反了方向

✅ 最佳实践建议

  • 使用彩色导线区分电源(红)、地(黑)、信号(黄/蓝)
  • 在面包板上标注 A、B、Sum、Carry 对应区域
  • 实验完成后拍照记录现象,便于复盘分析

半加器虽小,却是通往ALU的大门

你现在做的只是一个“半成品”,因为它不能接收来自低位的进位。但在工程上,它是构建全加器的基石。

怎么升级?很简单:
- 加一个输入 Cin(进位输入)
- 把前一级的 Carry 接过来
- 用两个半加器组合 + 一个或门,就能做出全加器

然后呢?
- 多个全加器级联 → 构成4位、8位、16位加法器
- 再加上控制信号 → 形成 ALU(算术逻辑单元)
- 最终成为 CPU 的核心部件

你看,从两个门电路出发,你可以一步步走到计算机的心脏。


更进一步:不只是做实验,更要懂设计思想

掌握了半加器之后,你可以思考以下几个延伸问题:

  1. 如果我想用Verilog在FPGA上实现它怎么办?
    verilog module half_adder(input A, B, output S, C); assign S = A ^ B; assign C = A & B; endmodule
    是不是和硬件连接一模一样?只不过从“连线”变成了“赋值”。

  2. 这种结构速度快吗?
    几乎瞬时响应,因为是纯组合逻辑,无时钟延迟。但传播延迟取决于门电路本身(典型值约10ns)。

  3. 能不能省掉专用XOR芯片?
    可以,用四个NAND门也能搭出XOR(德·摩根定律变换),适合资源受限场景。

  4. 如何扩展成多位加法器?
    - 将第一个半加器用于最低位
    - 后续各位使用全加器
    - Carry_out → 下一级 Carry_in
    - 形成“串行进位链”(Ripple Carry)

当然,这种方式会有延迟累积问题,于是就有了更高级的超前进位加法器(Carry Look-Ahead),但这都是后话了。


写在最后:每一个伟大的系统,都始于一次简单的点亮

当你亲手让那个 Carry LED 在“1+1”时亮起,你会突然明白:原来所谓的智能,不过是亿万次这样微小决策的叠加。

我们每天使用的手机、电脑、自动驾驶系统,它们的起点,也都藏在一个个这样的异或门和与门之中。

所以,请珍惜这次实验。它不仅是学习数字电路的第一步,更是你作为工程师,第一次真正意义上‘制造’计算的过程

下次当你按下“1+1”,不妨想想那盏曾经为你亮起的小灯。

如果你也做过类似的实验,或者正在尝试搭建自己的逻辑电路,欢迎在评论区分享你的经历和心得。我们一起,从门电路走向星辰大海。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 14:38:05

10分钟搞定:用快马快速验证记事本应用创意

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速生成一个记事本应用原型,核心功能包括:1. 基本文本编辑 2. 简单的UI布局(工具栏编辑区) 3. 本地存储功能 4. 响应式设计(适配手机/PC)。使用最简技术栈…

作者头像 李华
网站建设 2026/3/30 13:43:27

零基础搭建企业文件共享系统的完整指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个简单易用的局域网文件共享系统教程项目,包含:1. 基于Samba或NextCloud的配置指南;2. 权限设置图解教程;3. 常见问题解决方案…

作者头像 李华
网站建设 2026/3/28 15:17:55

零基础入门:5分钟理解RAG知识库

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的RAG知识库教学项目,包含分步教程和简单示例。用户可以通过交互式界面学习如何构建基本的RAG系统,包括数据准备、模型选择和结果评估。…

作者头像 李华
网站建设 2026/3/28 17:49:19

GitHub Issue模板规范提交VibeVoice bug反馈

VibeVoice:对话级语音合成的技术突破与实践路径 在播客、有声书和虚拟访谈日益普及的今天,用户早已不再满足于“机器朗读”式的语音输出。他们期待的是自然流畅、角色分明、情感丰富的真实对话感——就像两个老友坐在沙发上聊天那样自然。然而&#xff…

作者头像 李华
网站建设 2026/3/15 9:55:23

LangFuse vs 传统开发:效率提升的终极对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个对比工具,展示LangFuse与传统开发方法的效率差异。功能包括:1. 统计代码生成时间;2. 记录调试和优化耗时;3. 比较部署速度&…

作者头像 李华
网站建设 2026/3/25 21:46:34

效率坊解析工具VS传统方法:效率提升300%的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个效率对比演示工具,展示效率坊解析工具与传统方法的差异,功能包括:1. 并行处理相同任务的计时功能 2. 错误率统计对比 3. 资源消耗监控 …

作者头像 李华