news 2026/4/15 6:25:32

手把手教程:用MOSFET搭建基本异或门电路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教程:用MOSFET搭建基本异或门电路

从晶体管到逻辑:手把手用MOSFET搭建一个真正的异或门

你有没有想过,手机里的处理器、电脑中的CPU,甚至一块简单的加法器芯片——它们最底层的“思维”究竟是怎么工作的?不是靠代码,也不是靠魔法,而是由无数个微小的晶体管开关构成的逻辑网络在默默运算。

今天,我们就来当一回“数字电路工匠”,不用现成的74系列芯片,也不调用FPGA库元件,只用8个MOSFET晶体管,从零搭建一个完整的异或门(XOR Gate)。这不仅是一次动手实验,更是一场深入硅片内部的硬核探索。


为什么是异或门?它到底特别在哪?

我们都知道与门、或门、非门这些基础逻辑单元,但异或门是个“异类”

它的规则很简单:输入不同则输出高,输入相同则输出低。真值表如下:

ABY = A⊕B
000
011
101
110

看起来不复杂,对吧?可正是这个看似简单的功能,让它无法像与门那样通过简单的串并联NMOS就能实现。
问题出在哪儿?

因为 $ Y = \overline{A}B + A\overline{B} $ 这个表达式既不是标准的“与-或”结构,也不是单一类型的网络可以搞定的。它需要同时处理原变量和反变量,并且上下拉路径都必须精确控制。

换句话说:你想用MOSFET做XOR,就得玩点高级花样了。


MOSFET是怎么当“开关”的?

在进入设计之前,先快速回顾一下我们的核心工具——MOSFET

NMOS vs PMOS:一对互补搭档

  • NMOS:当栅极电压高于阈值(比如 VGS> 0.7V),漏源导通,相当于一个由高电平触发的开关。
  • PMOS:相反,它在栅极为低电平时导通(VGS< -0.7V),适合用来拉高信号。

把它们组合起来,就构成了现代数字电路的基石——CMOS结构

关键优势
- 静态时几乎不耗电(没有直流通路)
- 输出能完整摆幅(0V ↔ VDD)
- 抗干扰能力强

举个例子,一个最简单的反相器就是由一个PMOS和一个NMOS组成:

  • 输入为0 → PMOS导通,NMOS关闭 → 输出被拉高至VDD
  • 输入为1 → NMOS导通,PMOS关闭 → 输出接地

这就是CMOS的精髓:永远只有一个通路打开,避免短路功耗

而我们要做的异或门,本质上就是把这个思想扩展到更复杂的逻辑拓扑中去。


拆解异或门:如何用晶体管“翻译”布尔公式?

目标是实现:
$$
Y = \overline{A}B + A\overline{B}
$$

我们分两步走:先构建下拉网络(NMOS侧),再构造对应的上拉网络(PMOS侧),最后合成完整CMOS电路。

第一步:设计下拉网络(Pull-Down Network)

我们知道,当输出Y应该为0时,NMOS网络必须将输出节点拉到地。

根据公式,Y=0发生在两种情况之外:
- $\overline{A}B$ 成立(A=0, B=1)
- $A\overline{B}$ 成立(A=1, B=0)

所以,我们需要两条独立的导通路径来实现这两个条件:

  1. 路径1:A=0 且 B=1 → 需要用 $\overline{A}$ 和 $B$ 控制两个串联的NMOS
  2. 路径2:A=1 且 B=0 → 需要用 $A$ 和 $\overline{B}$ 控制另一对串联NMOS

这两条路径是“或”的关系,因此应并联连接

于是得到下拉网络结构:

┌──[NMOS_A̅]──[NMOS_B]──┐ │ ├── Y → GND └──[NMOS_A]──[NMOS_B̅]──┘

注意:这里出现了 $\overline{A}$ 和 $\overline{B}$,但我们只有原始输入A和B。怎么办?

👉得先做个反相器,生成A̅和B̅!

这意味着整个电路需要额外增加两个反相器模块,分别用于产生A和B的反相信号。


第二步:构造上拉网络(Pull-Up Network)

CMOS的设计哲学是“互补”。既然下拉用了串并结构,那上拉就要用其对偶形式。

回忆德摩根定律(De Morgan’s Law):
- 串联 → 对应 并联
- NMOS → 替换为 PMOS
- 输入取反(因为PMOS低电平有效)

所以下拉中的:
- “$\overline{A}$ 与 B 串联” → 上拉变为 “A 与 $\overline{B}$ 的反相”,即“A或$\overline{B}$”对应的PMOS并联?

等等……有点绕。换个思路更直观:

我们要让输出Y=1在以下情况发生:
- A=0, B=0 → 此时 $\overline{A}=1$, $\overline{B}=1$
- A=1, B=1 → 此时 A=1, B=1

也就是说,当A=B时,输出应被拉高

那么上拉网络应在:
- A=0 且 B=0 → 导通
- A=1 且 B=1 → 导通

对应逻辑为:$ \overline{A} \cdot \overline{B} + A \cdot B $

但这还不是最终结构。我们要把它转换成PMOS的驱动方式。

由于PMOS在输入为低时导通,我们可以这样安排:

  • 要在A=0,B=0时导通 → 使用A控制的PMOS和B控制的PMOS并联
  • 要在A=1,B=1时导通 → 使用A̅和B̅控制的PMOS也并联

然后这两个支路再串联?不对!

等等……其实更好的方法是直接使用对偶规则重构:

下拉是两个“与”项并联(OR of ANDs),其对偶是两个“或”项串联(AND of ORs)。但在CMOS中,这通常映射为:

上拉网络 = 下拉网络的“对偶图”:串联变并联,NMOS变PMOS,输入取反

应用后得出:

  • 原下拉:(A̅·B) || (A·B̅)
  • 上拉:(A + B̅) || (A̅ + B) ? 不对,还是混乱。

别急,我们换种方式思考:直接写出上拉条件,并用PMOS实现

当 A=0 且 B=0:
- A=0 → PMOS_A导通
- B=0 → PMOS_B导通
→ 若两者并联接VDD,则任一导通即可拉高?不行,必须同时满足才行。

错误!并联意味着“或”,但我们想要的是“与”。

所以正确做法是:两个PMOS串联才能实现“与”逻辑

即:
- PMOS_A 与 PMOS_B 串联 → 只有当A=0且B=0时才导通
- 同理,PMOS_A̅ 与 PMOS_B̅ 串联 → 当A=1且B=1时导通

然后这两个串联支路并联,就能覆盖所有Y=1的情况。

最终上拉结构如下:

┌──[PMOS_A]──[PMOS_B]──┐ │ ├── Y ← VDD └──[PMOS_A̅]─[PMOS_B̅]──┘

完美!现在上下拉网络完全互补。


完整电路图:8个MOSFET+2个反相器

总结一下所需器件:

类型数量功能说明
NMOS6主体下拉网络 ×4 + 反相器×2
PMOS6上拉网络 ×4 + 反相器×2
总计MOSFET12个实现全部逻辑功能

等等……不是说8个吗?怎么变成12个了?

澄清一点:如果你已经有A̅和B̅信号可用(例如来自前级电路),那你只需要8个MOSFET来构建主门。
但在独立工作场景下,你必须自己生成反相信号,这就需要额外两个反相器(每个含1个PMOS+1个NMOS),总共再加4个晶体管。

所以我们实际搭建的是一个自包含的异或门系统,共需:

  • NMOS:4(主门)+ 2(反相器)= 6
  • PMOS:4(主门)+ 2(反相器)= 6
  • 总计:12个MOSFET

电路连接示意图如下(文字版):

VDD │ ┌────────[PMOS_A]────┴────[PMOS_B]─────┐ │ │ │ ┌──────┐ │ ├────[PMOS_A̅] [PMOS_B̅]────┤ │ └──────┘ │ │ │ │ Y │ └────────────────┬─────────────────┘ │ ┌──────────────┴──────────────┐ │ │ │ [NMOS_A̅] [NMOS_A] [NMOS_B̅] │ │ │ [NMOS_B] [NMOS_B̅] [NMOS_A] │ │ │ └──────┬───────┴──────┬───────┘ │ │ GND GND

抱歉,上面画得有点乱。我们重新整理逻辑层级:

子模块1:反相器A → 生成A̅

  • PMOS_A_inv:源接VDD,栅接A,漏接A̅节点
  • NMOS_A_inv:源接GND,栅接A,漏接A̅节点

同理构建反相器B → 生成B̅

子模块2:主异或门

下拉网络(NMOS部分):
  • M1: NMOS_A̅(栅=A̅)与 M2: NMOS_B(栅=B)串联 → 接Y
  • M3: NMOS_A(栅=A)与 M4: NMOS_B̅(栅=B̅)串联 → 并联至Y
上拉网络(PMOS部分):
  • M5: PMOS_A(栅=A)与 M6: PMOS_B(栅=B)串联 → 接Y
  • M7: PMOS_A̅(栅=A̅)与 M8: PMOS_B̅(栅=B̅)串联 → 并联至Y

所有PMOS源极统一接VDD,所有NMOS源极接GND。


实际搭建建议与常见坑点

🔧 元件选型推荐

  • 通用N沟道MOSFET:2N7002(SOT-23封装,Vth≈1V)
  • 通用P沟道MOSFET:DMG2302U 或 FDN302P(匹配尺寸)
  • 供电电压:3.3V 或 5V(兼容TTL电平)
  • 板级去耦:在VDD/GND间加0.1μF陶瓷电容,靠近电源引脚

⚠️ 常见问题与调试技巧

问题现象可能原因解决方案
输出始终为高下拉网络未导通检查NMOS是否损坏,栅极是否有反相信号
输出始终为低上拉网络开路或PMOS失效确认PMOS连接正确,栅极驱动电平到位
输出不稳定/振荡浮空输入或寄生电容影响所有输入端必须明确上拉/下拉,避免悬空
功耗异常大上下拉同时导通检查反相器延迟是否一致,可能导致短暂短路电流
速度慢PMOS迁移率低导致上升沿迟缓加宽PMOS沟道宽度(W/L比约为NMOS的2倍)

🛠 设计优化小贴士

  • 对称布局:尽量让上下拉路径物理长度相近,减少传播延迟差异
  • 输入保护:长导线输入建议加TVS二极管防ESD击穿MOS栅氧
  • 扇出能力:单个门驱动多个负载时,考虑加入缓冲级
  • 仿真验证:可用LTspice建立晶体管网表进行瞬态分析

它不只是个门:异或门的实际用途远超你的想象

别以为这只是教科书上的玩具电路。异或门在真实系统中无处不在:

✅ 半加器的核心

Sum = A ⊕ B Carry = A & B

两个MOSFET门就能做出最基本的加法单元,这是ALU的起点。

✅ 数据比较器

异或门天然就是“是否相等”检测器:
- Y=0 → 输入相同
- Y=1 → 输入不同

可用于内存校验、配置一致性检查等。

✅ 奇偶校验生成

多个比特依次异或,结果表示“1”的个数是奇还是偶,广泛用于通信纠错。

✅ 加密中的基本操作

流密码中常用明文 XOR 密钥 = 密文,解密时再异或一次即可还原,简单高效。

✅ 差分信号解码

在高速通信中,接收端通过异或判断信号跳变边沿,恢复时钟信息。


写在最后:回到硬件的本质

当你按下开发板上的按钮,看到LED随着输入变化闪烁,那一刻你会意识到:

所有的软件、算法、人工智能,最终都要落回到这些小小的晶体管开关之上

今天我们亲手用12个MOSFET搭出了一个异或门。它可能不如74HC86稳定,也不如FPGA灵活,但它让你看清了数字世界的底色。

这种“从硅出发”的思维方式,才是嵌入式工程师、IC设计者真正的护城河。

下次当你写一句if (a != b)的时候,不妨想想背后是不是有一群MOSFET正在为你执行一场精密的布尔舞蹈。


💡拓展思考
你能试着用传输门(Transmission Gate)结构来简化这个电路吗?提示:只需4个MOSFET + 2个反相器,就能实现同等功能,而且速度更快、面积更小。

欢迎在评论区分享你的改进方案!

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

Open Interpreter制造业应用:Qwen3-4B自动化报表生成部署指南

Open Interpreter制造业应用&#xff1a;Qwen3-4B自动化报表生成部署指南 1. 引言 在智能制造与工业数字化转型加速的背景下&#xff0c;制造企业每天产生海量的生产、质检、设备运行数据。传统的人工报表制作方式效率低下、易出错&#xff0c;且难以满足实时性要求。如何将自…

作者头像 李华
网站建设 2026/4/6 1:23:28

告别安卓连接烦恼:Universal ADB Driver让Windows设备管理如此简单

告别安卓连接烦恼&#xff1a;Universal ADB Driver让Windows设备管理如此简单 【免费下载链接】UniversalAdbDriver One size fits all Windows Drivers for Android Debug Bridge. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalAdbDriver 还在为不同安卓设备…

作者头像 李华
网站建设 2026/4/10 17:15:09

触控板革命:Loop如何用环形菜单重塑Mac窗口管理体验

触控板革命&#xff1a;Loop如何用环形菜单重塑Mac窗口管理体验 【免费下载链接】Loop MacOS窗口管理 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 还在为记住复杂的快捷键组合而烦恼吗&#xff1f;每天面对数十个窗口的排列调整&#xff0c;传统鼠标拖拽和…

作者头像 李华
网站建设 2026/4/2 7:41:36

Unity 中的 IEnumerator协程详解

Unity 中的 IEnumerator 是 C# 迭代器接口&#xff0c;主要用于实现 协程&#xff08;Coroutines&#xff09;&#xff0c;这是 Unity 中处理异步操作和时间控制的核心机制。基本概念1. 什么是协程&#xff1f;协程是一种特殊的函数&#xff0c;可以在执行过程中暂停&#xff0…

作者头像 李华
网站建设 2026/4/4 7:07:33

未来轻量工具趋势分析:AI智能二维码工坊开源价值解读

未来轻量工具趋势分析&#xff1a;AI智能二维码工坊开源价值解读 1. 引言&#xff1a;轻量化工具的复兴与AI时代的再定义 在大模型和深度学习主导的AI浪潮中&#xff0c;技术圈普遍追求参数规模、训练复杂度和推理能力的极致突破。然而&#xff0c;一种反向趋势正在悄然兴起—…

作者头像 李华
网站建设 2026/4/13 19:34:23

完整指南:foo2zjs打印机驱动的简易配置方法

完整指南&#xff1a;foo2zjs打印机驱动的简易配置方法 【免费下载链接】foo2zjs A linux printer driver for QPDL protocol - copy of http://foo2zjs.rkkda.com/ 项目地址: https://gitcode.com/gh_mirrors/fo/foo2zjs 在Linux系统中配置打印机驱动常常让新手感到困惑…

作者头像 李华