news 2026/5/23 22:44:39

或非门作为通用门的初步认识:入门学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
或非门作为通用门的初步认识:入门学习

从零开始理解或非门的“万能”本质:不只是逻辑,更是设计哲学

你有没有想过,一个看似简单的逻辑门——或非门(NOR Gate),竟然可以独自撑起整个数字世界的底层大厦?它不像与非门那样在现代芯片中无处不在,也不像异或门那样在加密和校验中大放异彩。但它却拥有一个令人惊叹的能力:仅靠自己,就能实现任何复杂的逻辑功能

这不是理论游戏,而是一种深刻的设计思想。今天我们就来揭开这个“冷门明星”的面纱,看看它是如何用最朴素的方式,完成最强大的任务的。


为什么我们需要“通用门”?

在数字系统的世界里,一切信息都被简化为0和1。我们用逻辑门对这些信号进行加工,就像工人用砖块盖房子。最基本的“砖块”是与门、或门、非门。但问题来了:如果每种功能都得准备一种专用芯片,那电路板岂不是要堆成山?

于是工程师们开始思考:能不能只用一种类型的门,搭出所有其他功能?

答案是肯定的。只要满足“功能完备性”(Functional Completeness),一个逻辑门就可以成为“通用门”。目前公认的两种通用门是:

  • 与非门(NAND)
  • 或非门(NOR)

它们就像是数字逻辑中的“乐高基础块”,无论多复杂的结构,都可以由它们拼出来。本文聚焦于后者——或非门,带你一步步见证它的“变形记”。


或非门的本质:不只是“或+非”

先来看它的定义。两输入或非门的输出表达式是:

$$
Y = \overline{A + B}
$$

也就是说,只有当 A 和 B 都为 0 时,输出才是 1;只要有一个为 1,输出就是 0。

ABY
001
010
100
110

这看起来很普通,对吧?但关键在于它的行为模式:输出高电平的条件极其苛刻——必须所有输入都安静(低电平)。一旦有任何一个“发声”(高电平),它就立刻沉默(输出低)。

这种“宁可错杀,不可放过”的特性,在硬件层面有着天然的优势。CMOS 实现中,它的上拉网络是并联 PMOS,下拉是串联 NMOS。只有当所有输入为低时,PMOS 才能导通,把输出拉高;只要有任一输入为高,NMOS 就会形成通路,将输出接地。

这也带来了几个重要特点:

  • 静态功耗极低:没有电流直通路径。
  • 噪声容限高:电平切换干净利落。
  • 延迟略大:尤其是多输入时,串联结构拖慢响应速度。
  • 扇入有限:一般不超过4个输入,否则性能急剧下降。

更重要的是,它具备功能完备性——这意味着,哪怕全世界只剩下或非门这一种芯片,我们也依然能构建出任意布尔函数。

听起来像魔法?其实背后是一套严密的逻辑推导。


如何用或非门“变”出所有基本门?

要证明它是通用门,就必须展示它可以构造出三种基本逻辑单元:非门、与门、或门。下面我们一个个来“破解”。


第一步:用或非门做“非门”(NOT)

这是最简单的一步,也是后续所有操作的基础。

设想我们将两个输入接在一起,都连到同一个信号 A 上。那么根据公式:

$$
Y = \overline{A + A} = \overline{A}
$$

完美!这就是非门的功能。

✅ 技巧提示:把或非门的多个输入短接,就相当于让它对自己“自问自答”——“我有没有高?”如果有,那就输出低;如果没有,才输出高。

Verilog 实现如下:

module not_from_nor (output Y, input A); assign Y = ~(A | A); // 等价于 ~A endmodule

虽然语法上写了A | A,综合工具通常会优化成单个反相器,但在物理实现中若限定只能使用或非门模块,则必须显式调用并短接输入端。


第二步:还原“或门”(OR)

既然或非门是“或+非”,那我们只要再加一级“非”,就能把那个多余的“非”抵消掉。

数学上就是双重否定:
$$
Y = \overline{\overline{A + B}} = A + B
$$

所以做法很简单:

  1. 第一级:用或非门得到 $\overline{A+B}$
  2. 第二级:把这个结果送进一个配置为非门的或非门(即两端短接)

最终输出的就是 $A + B$。

Verilog 实现:

module or_from_nor (output Y, input A, B); wire nor1_out; assign nor1_out = ~(A | B); // 第一级:或非 assign Y = ~(nor1_out | nor1_out); // 第二级:取反 → OR endmodule

总共用了两个或非门。简单直接,毫无花哨,却体现了数字设计的核心思想:通过组合简单单元,构建复杂功能


第三步:最难的挑战——实现“与门”(AND)

这才是真正的考验。毕竟或非门天生排斥“同时为真”的情况,怎么让它反过来表示“两者都为真”呢?

这里就要请出数字逻辑的“神兵利器”——德摩根定律(De Morgan’s Law):

$$
A \cdot B = \overline{\overline{A} + \overline{B}}
$$

这句话的意思是:“A 且 B” 等价于 “非A 或 非B”的整体取反。

而这三步操作,全都可以用或非门完成!

实现步骤分解:
  1. 用两个或非门分别生成 $\bar{A}$ 和 $\bar{B}$(输入短接)
  2. 将 $\bar{A}$ 和 $\bar{B}$ 输入第三个或非门,得到 $\overline{\bar{A} + \bar{B}}$
  3. 根据德摩根律,结果正是 $A \cdot B$

等等,是不是漏了什么?不对啊,第三步出来的已经是 $A \cdot B$ 了?

别急,注意看:第三步的结果是 $\overline{\bar{A} + \bar{B}}$,确实等于 $A \cdot B$。所以理论上到这里就结束了?

但等等!$\bar{A}$ 和 $\bar{B}$ 是怎么来的?它们本身是通过或非门实现的非门,而那个“非门”其实是 $\overline{X + X} = \bar{X}$,所以我们已经用了或非门来造反相器。

因此完整流程需要四个或非门:

module and_from_nor (output Y, input A, B); wire not_A, not_B, nor_sum; assign not_A = ~(A | A); // 非A assign not_B = ~(B | B); // 非B assign nor_sum = ~(not_A | not_B); // 或非(非A, 非B) assign Y = ~(nor_sum | nor_sum); // 取反 → 得到 A·B endmodule

咦?最后还多了一级取反?这不重复了吗?

仔细一看才发现:nor_sum是 $\overline{\bar{A} + \bar{B}}$,而我们要的是 $A \cdot B$,它俩本来就是相等的。那为什么还要最后一级?

因为前面那句错了!

实际上:
$$
\overline{\bar{A} + \bar{B}} = A \cdot B
$$

所以nor_sum已经是正确结果了!根本不需要第四级!

那上面代码是不是写错了?

没错,很多初学者在这里都会犯迷糊。让我们重新理清:

  • 我们想实现:$Y = A \cdot B$
  • 利用德摩根:$A \cdot B = \overline{\bar{A} + \bar{B}}$
  • 所以只需要:
  • 先得到 $\bar{A}, \bar{B}$
  • 再做一个“或”操作:$\bar{A} + \bar{B}$
  • 最后取反:$\overline{\bar{A} + \bar{B}}$

但注意!我们手里只有或非门,不能直接做“或”再取反,只能做“或非”。所以:

$$
\text{或非}(\bar{A}, \bar{B}) = \overline{\bar{A} + \bar{B}} = A \cdot B
$$

一步到位!

所以正确的 Verilog 应该是:

module and_from_nor (output Y, input A, B); wire not_A, not_B; assign not_A = ~(A | A); // ~A assign not_B = ~(B | B); // ~B assign Y = ~(not_A | not_B); // NOR(~A, ~B) = A·B endmodule

✅ 总共只需三个或非门:两个做反相器,一个做或非运算即可得到与门。

⚠️ 常见误区提醒:不要画蛇添足地再加一级反相!那是误解了德摩根的应用方式。


三大基本门实现方式对比

目标门所需或非门数量关键方法
NOT1输入短接
OR2双重否定消除内层“非”
AND3利用德摩根定律重构乘积项

看到没?没有一个是靠蛮力堆出来的,每一个都建立在清晰的逻辑推理之上。


真实场景演练:一个报警系统的纯或非门实现

假设我们要做一个简单的安全控制系统:

当门窗传感器 A 触发处于夜间模式 B 时,启动警报 C。

逻辑表达式很简单:
$$
C = A \cdot B
$$

但我们手头只有CD4001BE芯片——一片内含四个独立的两输入或非门。能不能实现?

当然可以!

构建方案(基于 CD4001):
  1. G1:将 A 接到两个输入 → 输出 $\bar{A}$
  2. G2:将 B 接到两个输入 → 输出 $\bar{B}$
  3. G3:接收 $\bar{A}$ 和 $\bar{B}$ → 输出 $\overline{\bar{A} + \bar{B}} = A \cdot B$
  4. G4:未使用,输入必须接地(CMOS 悬空会导致功耗上升甚至振荡)

就这样,只用一片 IC,完成了原本需要与门+非门组合的功能。

工作流程也很清晰:

  1. 系统上电,采集传感器状态;
  2. 信号进入由或非门构成的逻辑网络;
  3. 经过两级门延迟后输出判定结果;
  4. 若输出为高,驱动继电器触发声光报警。

整个过程无需额外芯片,也没有引入新的元器件类型。


为什么这样做有价值?

你可能会问:现在都有 FPGA 和微控制器了,干嘛还折腾这些分立元件?

答案是:在某些特定场景下,简单反而更可靠

工程价值体现在哪里?

  • 降低 BOM 成本:物料清单越精简,采购、库存、替换就越容易。只备一种逻辑芯片,省心又省钱。
  • 提升可维护性:现场维修时,技术人员不用区分七八种不同型号的逻辑门,换哪个都一样。
  • 增强一致性:所有逻辑路径具有相同的温度系数、延迟特性和抗干扰能力。
  • 适用于老旧平台升级:在无法更换主控的老设备中,用几块钱的或非门就能增加新功能,性价比极高。
  • 教学意义重大:帮助学生理解“抽象→实现”的全过程,培养底层思维。

设计实战中的注意事项

别以为这只是纸上谈兵。真正在 PCB 上跑起来,还有很多细节要注意。

1. 传播延迟累积

每个或非门都有一定延迟(典型值 20~50ns)。与门用了三级门(NOT → NOT → NOR),总延迟可能达到上百纳秒。对于高频信号(>10MHz)来说,这就成了瓶颈。

📌建议:在高速路径中尽量减少级数,必要时插入缓冲器或改用查找表结构。

2. 功耗问题

虽然静态功耗很低,但每次翻转都要对负载电容充放电。尤其在频繁切换时,动态功耗显著上升。相比与非门,或非门在“多数为0”的场景更节能,但在“活跃信号多”的系统中反而更耗电。

📌建议:用于中低频控制逻辑,如状态机、使能信号生成等。

3. 扇出匹配

一个或非门最多能驱动10个标准TTL负载。如果后面挂太多门电路,会出现信号衰减或上升沿变缓。

📌建议:超过扇出限制时,加一级缓冲(可用两个或非门级联实现)。

4. 未使用引脚处理

CMOS 器件严禁悬空!未使用的输入端必须接地(不可接电源),否则会因感应电荷导致误触发或功耗异常。

📌最佳实践:所有空闲输入通过 1kΩ 电阻接地,兼顾稳定与防静电。

5. 抗干扰设计

工业环境中电磁干扰严重。长线传输的信号应加 RC 滤波,或选用带施密特触发输入的或非门(如 74HC14 内部逻辑配合使用)。


它只是过去的技术吗?不,它是未来的基石

有人说,现在谁还用手动搭逻辑门?早就被 HDL 和综合工具取代了。

但事实是:今天的高级工具,正是建立在过去这些基础概念之上的

  • FPGA 的 LUT(查找表)本质上就是实现了任意布尔函数的“通用单元”,其原理与“通用门”一脉相承。
  • ASIC 中的标准单元库,仍然包含各种尺寸的 NAND、NOR、INV 单元,供综合器自由调用。
  • 可重构计算、存内计算等前沿方向,仍在探索如何用最少的物理资源实现最大的逻辑灵活性。

掌握或非门的通用性,不仅是学习数字电路的第一课,更是理解现代电子系统设计哲学的关键入口。


写在最后:从“能做什么”到“为什么这样设计”

当我们学会用或非门搭建与门、或门、非门的时候,真正学到的并不是某个具体的电路图,而是一种思维方式

如何用有限的资源,解决无限的问题?

这正是工程的本质。

下次当你看到一块复杂的电路板时,不妨想想:它的最深处,是不是也藏着几个默默工作的或非门,在用最原始的方式守护着整个系统的逻辑秩序?

如果你也在FPGA或嵌入式开发中尝试过类似的门级构造,欢迎在评论区分享你的经验和踩过的坑!我们一起把基础打得更牢。

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

基于java + vue动漫交流与推荐平台系统(源码+数据库+文档)

动漫交流与推荐平台 目录 基于springboot vue动漫交流与推荐平台系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue动漫交流与推荐平台系统 一、…

作者头像 李华
网站建设 2026/5/23 21:11:46

IOPaint终极指南:AI图像修复的完整使用教程

IOPaint终极指南:AI图像修复的完整使用教程 【免费下载链接】IOPaint 项目地址: https://gitcode.com/GitHub_Trending/io/IOPaint 你是否曾经面对珍贵的照片却因为划痕、水印或多余的物体而感到束手无策?传统的图像修复方法不仅耗时耗力&#x…

作者头像 李华
网站建设 2026/5/23 21:10:45

使用Miniconda管理PyTorch虚拟环境的最佳实践

使用Miniconda管理PyTorch虚拟环境的最佳实践 在深度学习项目开发中,一个看似简单却频繁困扰开发者的问题是:为什么代码在同事的机器上能跑通,而在我这里却报错?追溯原因,往往是 torch 版本不一致、CUDA 驱动不匹配&a…

作者头像 李华
网站建设 2026/5/23 21:11:39

30分钟从零部署Vue3宝可梦猜谜游戏:避开新手所有坑

30分钟从零部署Vue3宝可梦猜谜游戏:避开新手所有坑 【免费下载链接】guess-pokemon Guess Pokmon Game--基于 Vue3 的猜 Pokmon 游戏 项目地址: https://gitcode.com/vogadero/guess-pokemon 你是不是也遇到过这样的情况:在网上找到一个看起来很酷…

作者头像 李华
网站建设 2026/5/23 21:21:51

科研人员必备:Miniconda创建独立Python环境精确控制依赖

科研人员必备:Miniconda创建独立Python环境精确控制依赖 在科研项目中,你是否曾遇到这样的场景?刚复现完一篇论文的模型训练代码,准备开始自己的实验时,却发现新安装的某个包意外升级了依赖项,导致原来的脚…

作者头像 李华
网站建设 2026/5/23 21:59:01

Latest:重新定义macOS应用更新体验的智能管家

Latest:重新定义macOS应用更新体验的智能管家 【免费下载链接】Latest A small utility app for macOS that makes sure you know about all the latest updates to the apps you use. 项目地址: https://gitcode.com/gh_mirrors/la/Latest 你是否曾因错过重…

作者头像 李华