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

厦门宇添科技有限公司 2026/09/09 19:10:07

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

你有没有想过,现代计算机里那些复杂的运算,其实都可以拆解成最简单的开关动作?而这一切的起点,可能只是一个小小的或非门(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碱基对的排列组合,计算机的智能也始于这些简单门电路的协同工作。而或非门,正是那个最小的“可复制单元”。

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

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

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

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

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

岳阳网站建设嘉兴网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:创建一个简单的React Todo应用,使用Lucide-Re

2026/06/30 13:16:35

网站建设流程房产网站建设

从CAN到CAN FD:AUTOSAR通信栈升级实战全解析车载网络的演进,从来不是一场突如其来的革命,而是一次次在带宽瓶颈边缘的精准突围。十年前,

2026/06/30 10:42:22

网站建设方案网站建设书

在 Python 的世界里,“属性”(Attribute)远不只是数据字段,它是一种访问入口,一种使用约定,更是一种

2026/06/30 12:29:31

网站建设团队网站正在建设中

Anything-LLM:用AI打造你的专属“面试官”在求职竞争日益激烈的今天,准备一场技术面试早已不再是简单地背几道算法题或翻一翻简历就能应付的。面对动辄几十页的岗位JD

2026/06/30 11:24:55

建设企业网站模板网站建设

西门子smart200三轴码垛机械手,触摸屏为昆仑通泰,CAD电气图纸,程序已经应用于设备上,稳定可靠,值得学习借鉴最近在产线升级

2026/06/30 11:39:27

黄冈网站建设富阳网站建设

智能家居场景下VibeVoice提供个性化语音反馈在智能音箱越来越“懂”用户的今天,我们却仍常听到机械的播报声:“检测到您已回家。”——语气平板,毫无温度。孩

2026/06/30 11:52:28

南宁网站建设小企业网站建设

Qwen3Guard-Gen-8B能否检测AI辅助写作中的抄袭倾向?在AI生成内容(AIGC)快速渗透教育、媒体与创作领域的今天,一个日益尖锐的

2026/06/30 12:13:59

医院网站建设方案北京网站建设报价

当你的Multisim突然“失库”:一次因授权过期引发的主数据库访问危机你有没有经历过这样的时刻?打开熟悉的Multisim准备调试一个电源电路,刚想拖出一颗

2026/06/30 13:02:04

无锡网站建设网站建设规划

想象一下,你正在组建一个虚拟团队:有擅长研究的分析师、文笔优美的撰稿人、经验丰富的项目经理。在CrewAI的世界里,这些角色由不同的AI智能体扮演࿰

2026/06/30 11:41:27

青岛网站建设公司广州企业网站建设

文章目录目录一、基础架构类二、训练优化类三、推理应用类四、部署压缩类五、评估安全类目录若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题

2026/06/30 14:17:09