马鞍山市网站建设_网站建设公司_网站建设_seo优化
2025/12/29 6:51:14 网站建设 项目流程

从0到1:用Logisim亲手搭一个半加器,看懂计算机如何做加法

你有没有想过,我们每天都在用的手机、电脑,它们到底是怎么“算数”的?
表面上是App在弹出结果,背后其实是亿万次微小的电子信号在高速协作。而这一切的起点,可能只是一个简单的电路——半加器

今天,我们就来动手实践一次“底层之旅”:不靠公式推导,不用背诵逻辑表达式,而是打开一款图形化工具Logisim Evolution,像搭积木一样,从零搭建一个能真正工作的半加器。你会亲眼看到两个比特相加的过程,理解“进位”是怎么产生的,甚至为未来设计CPU中的ALU埋下第一颗种子。


为什么是半加器?它真的那么简单吗?

在数字世界的语言里,一切运算都始于二进制。而最基础的二进制加法,就是把两个0或1加在一起。听起来简单,但这里面藏着现代计算的核心逻辑。

比如:
-0 + 0 = 0(无进位)
-0 + 1 = 1(无进位)
-1 + 0 = 1(同上)
-1 + 1 = 10← 注意!这是二进制,等于十进制的2,所以结果是“和为0,进位为1”

这最后一项很关键——不仅要输出当前位的结果,还要记住是否要向高位“借力”。于是,半加器应运而生。

它的名字叫“半”,是因为它只处理两个输入(A 和 B),却不接收来自低位的进位(Cin)。换句话说,它只能当“排头兵”,干不了中间位的活儿。

但正是这个“不完整”的电路,成了所有复杂加法器的地基。


真值表背后的秘密:Sum 和 Carry 是怎么来的?

我们先别急着画图,回到本质:数据说了什么?

ABSumCarry
0000
0110
1010
1101

观察一下:

  • Sum 只有在 A ≠ B 的时候才是 1→ 这不是典型的异或(XOR)吗?
  • Carry 只有在 A = B = 1 的时候才是 1→ 明显是个与门(AND)

所以,我们可以直接写出:
-Sum = A ⊕ B
-Carry = A · B

这两个表达式,就是通往硬件实现的“翻译说明书”。接下来我们要做的,就是把数学符号变成看得见、摸得着(虽然是虚拟的)的电路。


开始搭建:在 Logisim 中一步步构建你的第一个数字电路

准备工作

  1. 下载并安装 Logisim Evolution (推荐版本,支持高清屏)
  2. 打开软件,新建项目,默认进入main电路

界面很简洁:左边是组件库,中间是画布,右边可以查看属性。我们的舞台已经准备好。


第一步:放两个开关 —— 输入信号 A 和 B

你需要告诉电路:“我要输入数据”。

  • 在左侧工具栏选择Pin(引脚)
  • 在画布上点击两次,放置两个引脚
  • 右键每个引脚 → 属性 → 设置:
  • Direction: Input
  • Label: 分别命名为AB
  • Data bits: 1

现在你有了两个“开关”,可以通过点击切换高低电平(0 或 1),就像真实世界里的拨码开关。

💡 小技巧:按住 Ctrl 键再点击引脚,可以直接翻转其状态,测试超方便!


第二步:加入核心逻辑门

回到真值表的结论:
- Sum 需要 XOR 门
- Carry 需要 AND 门

操作如下:
- 切换到 “Gates” 面板
- 拖入一个XOR Gate和一个AND Gate
- 默认扇入(Inputs)是 2,正好满足需求(不需要改)

你可以拖动调整位置,让整体布局更清晰。建议把两个门上下排列,保持对称。


第三步:连上线!让信号流动起来

使用Wire 工具(铅笔图标)开始连线:

  1. 从输入 A 引出一条线,分别连接到 XOR 和 AND 门的左端输入
  2. 同样地,把 B 连接到两个门的右端输入

注意:Logisim 会自动合并交叉线,避免短路。但如果手动拉错,也会报红叉提示错误,非常友好。

此时,A 和 B 的信号已经同时送入了两个逻辑门。


第四步:接上输出灯 —— 让结果“亮”出来

我们需要看到 Sum 和 Carry 的结果。

  • 再次使用Pin工具,添加两个输出引脚
  • 或者使用LED(红灯)组件(在 “Wiring” 或 “Input/Output” 栏中),视觉反馈更强
  • 将 XOR 的输出连接到名为Sum的 LED / 输出引脚
  • 将 AND 的输出连接到名为Carry的 LED / 输出引脚
  • 给这两个输出标记清楚标签

完成后的结构应该是这样的:

A ─┬───────┐ │ ▼ ├──→ XOR ───→ Sum (LED) │ ▲ B ─┴───────┘ A ─┬───────┐ │ ▼ ├──→ AND ───→ Carry (LED) │ ▲ B ─┴───────┘

没有时钟,没有控制器,所有运算实时发生——这就是组合逻辑电路的魅力:输入一变,输出立刻响应。


第五步:动手测试!验证四种情况

切换到Hand Tool(手形工具),开始交互式测试:

测试组合操作预期现象
A=0, B=0不点击或双击置0Sum灭,Carry灭
A=1, B=0点击ASum亮,Carry灭
A=0, B=1点击BSum亮,Carry灭
A=1, B=1同时点击A和BSum灭,Carry亮 ✅

当你按下最后一个组合时,Carry灯亮起的那一瞬间,你就见证了“进位”的诞生。

🎯 成功标志:四个组合全部符合真值表 → 你的半加器工作正常!


把它封装成模块:未来的全加器就靠它了

做完一次实验后,千万别让它散落在主电路里。我们要把它变成一个可复用的“黑盒子”。

如何封装为子电路?

  1. 全选整个半加器的所有元件(Ctrl+A)
  2. 右键 →Create Integrated Circuit
  3. 软件会自动生成一个新的子电路,比如叫HalfAdder
  4. 双击左侧项目面板中的HalfAdder,进入其内部查看原理
  5. 回到main电路后,你会发现这个模块已经可以像其他组件一样被调用了

更妙的是,它的接口会被自动整理成整齐的引脚:A、B 输入在左,Sum、Carry 输出在右,干净利落。

⚙️ 实战价值:当你后续要做全加器时,只需要两个半加器 + 一个 OR 门就能搞定。模块化设计让你不再重复造轮子。


常见问题与避坑指南:新手最容易栽在哪?

即使是最简单的电路,也常有人踩坑。以下是几个高频问题及解决方法:

问题现象可能原因解决方案
LED完全不亮输入未激活 / 电源未开启检查Simulation菜单是否启用了Ticks(若需要);确保使用的是Output Pin或LED而非Input
Carry总是1AND门接反了或短路检查B是否误接到VCC;确认连线没有跨接到高电平线上
Sum和Carry同时亮XOR门配置错误或输入冲突查看是否有多个驱动源(Driver Conflict),Logisim会在底部报错
改变输入后输出不变使用了锁存器或触发器混入确保电路纯组合逻辑,不要引入Clock相关元件
封装后引脚顺序混乱未合理布局前就创建IC先整理好输入输出方向,再封装

🔍 调试利器:使用Probe(探针)工具点在线路上,能实时显示该点的逻辑值(0/1),比肉眼追踪快得多。


设计之外:这些习惯决定你能走多远

除了功能正确,良好的工程习惯同样重要。以下几点值得坚持:

  • 命名规范:永远不要留默认名如 “pin1”、“out1”。清晰的标签(A/B/Sum/Carry)能让三个月后的你自己也能看懂。
  • 布线整洁:尽量走直角,避免斜线缠绕。必要时使用Tunnel(隧道)功能隐藏长距离连线,提升可读性。
  • 层次分明:复杂系统一定要分层设计。主电路只放模块,细节藏在子电路里。
  • 全面验证:哪怕再简单,也要跑完全部输入组合。自动化测试虽难,但人工穷举必须到位。

拓展挑战:试试这些升级玩法

如果你已经顺利完成基础版,不妨挑战以下几个进阶任务:

✅ 挑战1:仅用 NAND 门实现半加器

NAND 是通用门,理论上任何逻辑都能由它构成。试着推导出 Sum 和 Carry 的 NAND 表达式,并在 Logisim 中实现。你会发现电路变得更复杂,但也更深刻理解“通用性”的代价。

✅ 挑战2:测量传播延迟

启用菜单Simulate > Tick Enabled,然后使用Probe + Data Logger工具记录从输入变化到输出稳定的时间。比较 XOR 和 AND 路径的延迟差异,体会关键路径的概念。

✅ 挑战3:构建全加器原型

利用两个半加器和一个 OR 门,拼出支持 Cin 输入的全加器。你会发现:真正的多位加法,是从这里才真正开始的


结语:这不是终点,而是起点

当你点亮那盏代表 Carry 的小灯时,你不仅仅是在做一个教学实验。你在模拟CPU中最原始的加法动作,你在触摸计算机的“心跳”。

半加器虽小,但它承载的意义重大:
- 它是从逻辑代数到物理实现的第一步
- 它展示了模块化思维的力量
- 它揭示了复杂系统源于简单规则叠加的本质

掌握它,你就拿到了通向 ALU、寄存器文件、流水线乃至 RISC-V 架构的大门钥匙。

更重要的是,这种“自己动手、亲眼见证”的学习方式,会让你对嵌入式开发、FPGA 编程、甚至操作系统底层优化产生全新的认知视角。


所以,别停在这里。保存你的.circ文件,然后打开新一页画布——下一步,我们一起做全加器。

你准备好了吗?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询