四川网站建设网站建设深圳

铜鼓县赣丰汽运有限公司 2026/09/09 17:46:39

用或非门“从零造计算机”:半加器设计实战与底层逻辑揭秘

你有没有想过,现代计算机里那些复杂的运算,其实都可以拆解成最简单的开关动作?而这一切的起点,可能只是一个小小的或非门(NOR Gate)

别小看这个看起来不起眼的逻辑单元——它有个了不起的身份:功能完备性。也就是说,只要你有足够的或非门,就能搭建出任意复杂的数字电路,甚至是一台完整的CPU。这就像只给你一种乐高积木,却要拼出整个城市。

今天我们就来干一件“反常识”的事:不用异或门、不用与门,只用或非门,实现一个本该需要多种门电路的半加器。这不是炫技,而是带你深入理解数字电路的本质——布尔代数如何在物理世界中落地。


或非门不只是“或+非”,它是数字世界的“原子”

我们先来重新认识一下或非门。

它的逻辑很简单:只要有一个输入是1,输出就是0;只有当所有输入都是0时,输出才是1。两输入或非门的真值表如下:

ABY
001
010
100
110

对应的表达式是:
$$
Y = overline{A + B}
$$

听起来很基础,对吧?但关键在于,它能自己“生”出其他所有逻辑门

怎么用或非门实现 NOT、AND、OR?

  • NOT(非门):把同一个信号接两个输入端就行了。
    $$
    overline{A} = A downarrow A
    $$

  • OR(或门):先做或非,再取反——也就是再过一个或非门。
    $$
    A + B = overline{overline{A + B}} = (A downarrow B) downarrow (A downarrow B)
    $$

  • AND(与门):利用德摩根定律转换。
    $$
    AB = overline{overline{A} + overline{B}} = (overline{A}) downarrow (overline{B})
    $$
    而 $overline{A}$ 和 $overline{B}$ 又可以用或非门生成。

看到没?三个最基本的逻辑门,全都能由或非门构造出来。这意味着,整个布尔代数体系,可以在硬件上仅靠一种门来实现

这不仅是理论上的优雅,更在某些特殊场景下有实际价值。比如航天级芯片要求高可靠性,统一使用一类门可以简化测试、提高容错能力;再比如早期集成电路工艺受限时,工程师就曾大量采用“全或非架构”。


实战:只用或非门,构建一个半加器

现在我们来挑战一个经典组合电路——半加器(Half Adder)

它的任务很简单:把两个一位二进制数相加,输出“和”(Sum)与“进位”(Carry)。真值表如下:

ABSumCarry
0000
0110
1010
1101

我们知道,数学表达式是:
- $ Sum = A oplus B $
- $ Carry = A cdot B $

问题来了:如果手头只有或非门,怎么实现这两个功能?

第一步:搞定反相器(NOT)

我们需要先得到 $overline{A}$ 和 $overline{B}$。很简单:

assign not_A = ~(A | A); // 等价于 ~A

虽然写法用了~,但在物理实现中,这就是一个双输入短接的或非门。

第二步:构造 Carry

原式是 $AB$,但我们不能直接用与门。怎么办?

用德摩根定律变形:
$$
AB = overline{overline{A} + overline{B}}
$$
右边正是一个“或非”操作:输入是 $overline{A}$ 和 $overline{B}$,输出就是 $AB$!

所以:
$$
Carry = (overline{A}) downarrow (overline{B})
$$
只需要一个或非门,前提是先有 $overline{A}$ 和 $overline{B}$。

第三步:构造 Sum(这才是难点)

Sum 是异或,即:
$$
Sum = overline{A}B + Aoverline{B}
$$
这是标准的“积之和”形式,但我们想用或非门实现,最好转成“和之积”或双或非结构。

这里有个巧妙的方法:

观察到:
$$
Sum = overline{(A + B) cdot (overline{A} + overline{B})}
$$
展开验证一下:
- 当 A=B=0:$(0+0)(1+1)=0cdot1=0$ → 取反得1?不对!

等等,错了。换个思路。

我们尝试用中间变量重构:

定义:
- $X = A downarrow B = overline{A + B}$
- $Y = overline{A} downarrow overline{B} = overline{overline{A} + overline{B}} = AB = Carry$

然后让:
$$
Sum = X downarrow Y = overline{X + Y}
$$

代入看看:
- A=0, B=0:X = 1, Y = 0 → X+Y=1 → Sum=0 ✅
- A=0, B=1:X = 0, Y = 0 → X+Y=0 → Sum=1 ✅
- A=1, B=0:同上 → Sum=1 ✅
- A=1, B=1:X = 0, Y = 1 → X+Y=1 → Sum=0 ✅

完全匹配!

所以最终:
$$
Sum = (A downarrow B) downarrow ((overline{A}) downarrow (overline{B}))
$$

注意:$(overline{A}) downarrow (overline{B})$ 正是我们前面算 Carry 的那个门,也就是说,Carry 就是这个中间结果 Y

最终电路结构(5个或非门搞定)

门编号功能输入输出
G1生成 $overline{A}$A, Anot_A
G2生成 $overline{B}$B, Bnot_B
G3计算 $X = A downarrow B$A, BX
G4计算 $Y = overline{A} downarrow overline{B}$not_A, not_BCarry
G5计算 $Sum = X downarrow Y$X, YSum

总共只需5个两输入或非门,就实现了完整的半加器。

对比传统方案:一个异或门 + 一个与门 ≈ 2~3个复合门。虽然这里门数更多,但胜在结构统一,适合特定制造工艺或教学演示。


Verilog建模:让代码贴近硬件本质

虽然现代综合工具不会强制你用或非门,但为了理解底层映射过程,我们可以写出行为级模型:

module nor_half_adder ( input A, input B, output Sum, output Carry ); wire not_A, not_B; wire X, Y; // Step 1: NOT using NOR (tie inputs together) assign not_A = ~(A | A); // ~A assign not_B = ~(B | B); // ~B // Step 2: Intermediate terms assign X = ~(A | B); // A NOR B assign Y = ~(not_A | not_B); // (~A) NOR (~B) = A AND B // Step 3: Final outputs assign Sum = ~(X | Y); // X NOR Y assign Carry = Y; // Direct output from Y endmodule

这段代码每一行都对应一个真实的门电路。如果你在一个只提供NOR2单元的标准单元库中进行逻辑综合,EDA工具(如Synopsys Design Compiler)会自动将上述结构映射过去。

当然,在FPGA上这么做效率不高——毕竟LUT(查找表)更适合实现任意组合逻辑。但在ASIC设计中,这种“门级约束”非常常见,尤其在功耗敏感或高可靠场景。


设计背后的工程权衡:为什么没人总这么干?

既然或非门这么万能,那为什么不全用它?

答案是:代价太高

  • 延迟更大:每个逻辑层级都会累积传播延迟。上面的半加器有3级门延迟(NOT → NOR → NOR),而专用异或门可能只有1~2级。
  • 面积开销大:5个门 vs 2个门,芯片面积翻倍不止。
  • 功耗更高:更多晶体管切换意味着更高的动态功耗。

所以现实中,“全或非”更多用于教学、原型验证或极端环境下的定制设计。

但它的思想价值不可忽视:当你掌握了一种通用构建块,你就拥有了无限可能


写在最后:从或非门看系统设计哲学

这次实践不只是教你如何搭电路,更是展示一种思维方式:

复杂系统可以从极简规则中涌现

就像生命源于DNA碱基对的排列组合,计算机的智能也始于这些简单门电路的协同工作。而或非门,正是那个最小的“可复制单元”。

下次你在写代码、设计架构时,不妨想想这个问题:

我的系统中,是否存在那样的“或非门”——一个足够简单、又能构建一切的基础模块?

如果你找到了它,恭喜,你已经掌握了抽象的艺术。

如果你也动手实现了这个或非门半加器,欢迎在评论区晒出你的仿真波形图!我们一起聊聊你在卡诺图化简时踩过的坑。

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

万州网站建设云南网站建设

AMD Ryzen处理器终极调优完整指南:用RyzenAdj释放隐藏性能【免费下载链接】RyzenAdjAdjust power management settings for Ryze

2026/06/30 13:04:34

建设网站教程巴中网站建设

管理 OpenLDAP 与配置邮件服务器指南1. OpenLDAP 信息查询在 SUSE Linux Enterprise Server 10 系统中,可使用ldapsearch命令从 LDAP 目录

2026/06/30 11:45:57

团购网站建设山西网站建设

作为 Spring Boot 3.x 之后的首个大版本更新,Spring Boot 4.0 基于 Spring Framework 7.0、Jakarta EE 11 和 Java 17+(推荐 Ja

2026/06/30 11:08:24

网站建设哪家公司好广州市网站建设

Java调用Python脚本运行CosyVoice3:JNI与ProcessBuilder方案在当前AI语音技术快速落地的背景下,越来越多的企业希望将前沿的开源语音合成模型

2026/06/30 11:13:54

青岛网站建设哪家好徐州网站建设

基于PaddlePaddle镜像的情感分析系统设计与实现在电商评论区刷屏的“真的绝了”,到底是夸还是骂?客服工单里一句“你们挺有意思的”,背后藏着多少不满&#

2026/06/30 11:31:56

昆山网站建设岳阳网站建设

AI智能视频剪辑技术深度解析:FunClip如何革新传统剪辑流程【免费下载链接】FunClipOpen-source, accurate and easy-to-use video cl

2026/06/30 14:08:39

嘉兴网站建设长沙 网站建设

HuggingFace AutoClasses 与 PyTorch-CUDA 镜像:构建高效、灵活的 AI 开发闭环在如今这个模型即服务(MaaS)盛行的时代

2026/06/30 14:12:39

门户网站建设晋江网站建设

ABB变频器(如ACS系列)是变频调速技术的代表,能够精确控制电机的转速、扭矩和功率,实现节能和优化生产流程。但故障发生时,如果不

2026/06/30 12:14:00

丹阳网站建设网站建设 英文

已经构建好的CSH初始晶胞,模型经过删除硅链,吸水饱和,基于ClayFF力场,且模型化学组成,密度,钙硅比ÿ

2026/06/30 11:06:53