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/22 19:28:42

用Miniconda-Python3.9搭建Stable Diffusion本地运行环境

用Miniconda-Python3.9搭建Stable Diffusion本地运行环境 在生成式AI席卷创意与工程领域的今天,越来越多开发者不再满足于调用云端API来生成图像。隐私顾虑、响应延迟和定制化限制,正推动一股“回归本地”的部署浪潮——尤其是在使用像 Stable Diffusion…

作者头像 李华
网站建设 2026/5/22 17:10:06

基于java + vue社区团购系统(源码+数据库+文档)

社区团购 目录 基于springboot vue社区团购统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue社区团购统 一、前言 博主介绍:✌️大厂码…

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

GitHub星标项目推荐:基于Miniconda的轻量AI开发模板

GitHub星标项目推荐:基于Miniconda的轻量AI开发模板 在数据科学和人工智能项目的日常开发中,你是否曾遇到过这样的场景?刚配置好的PyTorch环境,因为安装了一个新包导致训练脚本突然报错;团队成员复现论文实验时&#x…

作者头像 李华
网站建设 2026/5/22 12:49:30

基于java + vue餐厅点餐系统(源码+数据库+文档)

餐厅点餐 目录 基于springboot vue餐厅点餐系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue餐厅点餐系统 一、前言 博主介绍:✌️大…

作者头像 李华
网站建设 2026/5/20 13:09:27

基于java + vue婚纱摄影网站系统(源码+数据库+文档)

婚纱摄影网站 目录 基于ssm vue婚纱摄影网站系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于ssm vue婚纱摄影网站系统 一、前言 博主介绍:✌️大厂…

作者头像 李华
网站建设 2026/5/22 15:33:53

Bespoke.js快速入门:5步打造专业级互动演示文稿

Bespoke.js快速入门:5步打造专业级互动演示文稿 【免费下载链接】bespoke DIY Presentation Micro-Framework 项目地址: https://gitcode.com/gh_mirrors/be/bespoke Bespoke.js是一个极简的DIY演示框架,专为现代浏览器设计。这个超轻量级&#x…

作者头像 李华