
我最早把二极管和逻辑门联系起来是在学校实验室里做数字电路实验的时候。当时教材上写着“二极管与门”“二极管或门”我照着面包板插了一排1N4148结果输出电平怎么测都不对要么高电平不够高要么低电平压不下去。后来才明白二极管逻辑门只是理解“开关构成逻辑”的启蒙模型真正让数字电路走向大规模集成的是CMOS——互补金属氧化物半导体。这篇笔记我想把从二极管到CMOS这条线完整捋一遍先从最简单的二极管开关讲起再拆解CMOS反相器、与非门、或非门的电路结构最后给出能直接上手的实操步骤和原理图连接方式。无论你是刚学数字电路基础的学生还是想补一补器件级知识的嵌入式开发者都能从中找到可以直接参考的内容。1. 为什么每个学数字电路的人都该从二极管逻辑门开始1.1 逻辑门不是黑盒先建立开关模型数字电路里天天见到的与门、或门、非门本质上不是魔法而是一堆工作在“导通”和“截止”两种状态下的开关。布尔代数里的0和1对应到物理世界就是某个节点的电压高与低再往下一层就是某个半导体器件通与断。二极管、三极管、MOS管都能当开关用但它们的开关特性差别很大。二极管是两端器件靠正偏和反偏控制通断三极管是电流控制器件靠基极电流控制集电极和发射极之间的通路MOS管是电压控制器件靠栅极电压控制源极和漏极之间的沟道。数字电路设计的关键就是选对开关把它们组合成能实现布尔函数的网络。从二极管开始的好处是它是最简单的非线性器件数学上容易分析电路上也容易理解。你不需要一上来就面对CMOS的体效应、沟道长度调制、栅氧化层击穿这些复杂概念只需要记住一句口诀“正偏导通反偏截止。”用这个模型就能搭出最初的与门和或门也能直观感受到为什么二极管逻辑只能停留在启蒙阶段。1.2 CMOS不是只有电脑主板电池先说一个经常被搞混的点。很多人在网上搜“CMOS”搜出来的第一条往往是“cmos battery is bad”——那是电脑主板上保存BIOS设置的那个纽扣电池叫CMOS电池属于历史遗留叫法。而我们这里讨论的CMOS是Complementary Metal Oxide Semiconductor互补金属氧化物半导体是一种集成电路工艺也是数字电路里最基本的门电路实现方式。这两者有关系吗没有直接关系。主板上那颗电池之所以叫CMOS电池是因为早期主板用一颗CMOS芯片保存配置信息电池给芯片供电于是大家就这么叫习惯了。但在数字电路领域说“CMOS”指的是一整套用PMOS和NMOS互补搭配来设计逻辑门的电路体系。搞清这个区别你才不会在查资料的时候跑偏。Digital电路里的CMOS核心思想是“互补”——每一个逻辑状态都有一对MOS管配合工作一个负责把输出拉高一个负责把输出拉低不存在像二极管逻辑那样“靠电阻硬拉”的情况。这个互补结构正是CMOS能够做到极低静态功耗、高噪声容限、高集成度的根本原因。2. 二极管逻辑门只靠两个二极管也能做“与”和“或”2.1 二极管当开关正偏导通、反偏截止二极管的核心是PN结。P区多子是空穴N区多子是电子二者在交界处形成耗尽层。给二极管加正向电压也就是P端接高、N端接低耗尽层变窄多数载流子可以越过结区形成电流反过来加反向电压耗尽层变宽电流几乎为零。这就是“正偏导通、反偏截止”的物理基础。需要注意的是正偏导通时二极管两端会有一个导通压降。硅二极管比如1N4148、1N4007典型压降约为0.6V到0.7V肖特基二极管比如1N5819大约0.2V到0.3V锗二极管大约0.3V。这个压降是二极管逻辑门最大的敌人——信号每经过一级二极管门电平就会损失一个导通压降所以用它搭两级以上的逻辑几乎必然出错。选型方面做低频逻辑实验用1N4148就足够了。千万别拿1N4007这种工频整流管来做逻辑实验虽然它能导通但反向恢复时间太长频率稍高一点就会严重影响波形。1N4148是开关二极管反向恢复时间在纳秒级用来验证逻辑电平足够了。2.2 二极管与门高电平靠上拉电阻低电平靠二极管钳位二极管与门的基本思路是把几个二极管的阴极接到一起作为输出阳极分别接输入信号再在输出节点接一个上拉电阻到Vcc。用文字描述连接方式的话是这样的D1阳极接输入AD2阳极接输入BD1阴极与D2阴极连接在一起作为输出Y上拉电阻R1一端接Vcc比如5V另一端接输出Y输入A、B的低电平为0V高电平为5V。分析一下工作过程。当A、B都是高电平5V时两个二极管两端几乎零压差都处于截止状态输出Y被上拉电阻拉到接近5V。当A为低电平0V时D1正偏导通输出Y被钳到约0.7V此时B哪怕为5VD2两端电压也不够导通输出仍然被D1拉低。只要有一个输入为低输出就是低。这正好符合与门“全高才高有一低则低”的逻辑。真值表如下输入A输入B输出Y0V(0)0V(0)0.7V(0)0V(0)5V(1)0.7V(0)5V(1)0V(0)0.7V(0)5V(1)5V(1)≈5V(1)上拉电阻的取值不是随便选的。R越小充电电流越大输出从低到高的上升沿越快但静态功耗也越大R越大功耗小但上升沿变慢而且当某个二极管导通时流过的下拉电流变小输出低电平会更接近0.7V。一般5V电源下用1kΩ到10kΩ都能正常工作。如果只是驱动LED做指示灯1kΩ比较合适如果只做电平验证10kΩ功耗更小、发热更少。2.3 二极管或门低电平靠下拉电阻高电平靠二极管传递与门用了上拉电阻或门反过来用下拉电阻。连接方式是二极管阴极分别接输入A、B阳极连接在一起作为输出Y输出节点接下拉电阻到地。D1阴极接输入AD2阴极接输入BD1阳极与D2阳极连接在一起作为输出Y下拉电阻R1一端接地另一端接输出Y。当A、B都是低电平0V时两个二极管都截止输出被下拉电阻拉到0V。只要有一个输入为高5V对应二极管就会正偏导通输出大约等于输入高电平减去一个二极管压降也就是5V减0.7V约4.3V。这符合或门“有一高则高”的逻辑。输入A输入B输出Y0V(0)0V(0)0V(0)0V(0)5V(1)≈4.3V(1)5V(1)0V(0)≈4.3V(1)5V(1)5V(1)≈4.3V(1)可以看到或门的高电平不是标准的5V而是4.3V。这4.3V够不够用取决于下一级电路的输入阈值。如果下一级是CMOS门高电平阈值一般取0.7倍Vcc也就是3.5V那4.3V勉强能算高电平但如果下一级也是二极管或门再损失一个0.7V高电平就变成3.6V了要是再接一级就只剩下2.9V直接掉进不确定区。2.4 三个硬伤电平偏移、无增益、速度慢二极管逻辑门最大的问题是电平偏移。从上面的分析可以看到与门把低电平抬高到0.7V或门把高电平拉低到Vcc减0.7V。多级级联时电平就像温水煮青蛙一样逐渐恶化最终导致逻辑误判。第二个问题是没有增益。二极管是无源器件只能衰减信号不能放大信号所以它无法恢复电平也无法驱动较重的负载。输出阻抗主要由外接电阻决定阻值小了功耗大阻值大了驱动能力弱进退两难。第三个问题是速度。二极管从导通到截止需要消耗存储电荷尤其是正偏时注入的少数载流子需要时间复合或抽出。虽然1N4148的反向恢复时间已经很快但比起CMOS门里MOS管近乎纯容性的开关过程还是慢了一个数量级。至于用1N4007去做高频脉冲实验上升沿和下降沿会难看得没法看。这三点注定了二极管逻辑只能出现在教科书和实验室里用来理解“开关如何构成逻辑”不可能成为现代数字芯片的主流。3. CMOS核心单元反相器、与非门、或非门是怎么工作的3.1 PMOS和NMOS一对互补开关MOS管全称是金属氧化物半导体场效应管分为NMOS和PMOS两种。NMOS的导通条件是栅极相对于源极为高电平PMOS正好相反栅极相对于源极为低电平时导通。这俩的开关逻辑完全是镜像关系。用生活化类比来说NMOS像一扇“高电平推开”的门PMOS像一扇“低电平推开”的门。你站在门口喊“高”NMOS门开、PMOS门关你喊“低”NMOS门关、PMOS门开。CMOS反相器就是把这两扇门背靠背装在一起无论输入是高还是低总有一扇门是开的把输出拉到对应的电源轨。这里的“互补”二字指的是PMOS与NMOS在结构和电学特性上相互补充一个负责把输出拉向VDD一个负责把输出拉向GND二者轮流工作不会同时大量导通所以静态电流极小。这是CMOS相比二极管逻辑、TTL逻辑最根本的优势。3.2 CMOS反相器电路结构、版图和截面CMOS反相器是最简单的CMOS门电路也是所有CMOS逻辑门的积木。结构如下PMOS管源极接VDD漏极接输出Y栅极接输入ANMOS管源极接GND漏极接输出Y栅极接输入APMOS和NMOS的栅极连接在一起形成输入端APMOS和NMOS的漏极连接在一起形成输出端Y。输入A为高电平时NMOS导通、PMOS截止输出Y被拉到GND也就是0V。输入A为低电平时NMOS截止、PMOS导通输出Y被拉到VDD也就是高电平。所以输出总是输入的反相这就实现了非门反相器功能。版图上看PMOS通常做在N阱里NMOS做在P型衬底上两条栅极由多晶硅连成一条直线源漏区域通过金属层引出。截面图上最明显的特点是栅氧化层极其薄通常只有几纳米到十几纳米。这个薄氧化层是MOS管能够用电压控制导通的关键也是它容易被静电击穿的根本原因。所以你在碰CMOS芯片之前最好先摸一下地线放掉身上的静电别小看这一步。3.3 由反相器到与非门和或非门有了反相器的“互补搭配”思路与非门就非常自然了。与非门的逻辑是“全高才低有一低则高”所以在结构上两个PMOS并联接在VDD和输出之间两个NMOS串联接在输出和GND之间。PM1源极接VDDPM1漏极接输出YPM2源极接VDDPM2漏极接输出YNM1漏极接输出YNM1源极接NM2漏极NM2源极接GNDPM1栅极接APM2栅极接BNM1栅极接ANM2栅极接B。分析一下当A、B都是高电平时两个PMOS都截止两个NMOS都导通输出Y被串联的NMOS拉到GND输出低。只要有一个输入为低对应的PMOS就导通把输出拉高同时两个NMOS中至少有一个截止切断了到GND的通路输出为高。这就是与非门。或非门则反过来两个PMOS串联接在VDD和输出之间两个NMOS并联接在输出和GND之间。它的逻辑是“有一高则低全低才高”。这两种结构是CMOS数字电路的基本单元其它复杂的门电路本质上都是在这两种结构上叠加串联、并联得到的。3.4 为什么CMOS能成为绝对主流用过TTL三极管-三极管逻辑的人都知道TTL门电路即使输出稳定静态时也有毫安级的电流流过。而CMOS反相器静态时PMOS和NMOS中总有一个完全截止漏电流只有纳安到微安级别功耗低了几个数量级。这就是为什么手机、电脑里的芯片几乎全部用CMOS工艺——电池经不起TTL那种发热量。另一个优势是噪声容限。CMOS轨到轨输出意味着高电平接近VDD低电平接近0V而输入阈值一般取0.5倍VDD左右所以它允许信号上叠加相当大的噪声而不误判。相比之下二极管逻辑的高电平被压到4.3V、低电平被抬到0.7V留给噪声的余量非常小。扇出能力也是CMOS的强项。CMOS输入端的直流输入电流几乎为零因为它只是一层栅氧化层加一个电容所以一个CMOS输出可以驱动很多个CMOS输入这在数字芯片设计里极其重要。二极管逻辑门没有这些优势它就像一辆没有变速箱的汽车原理上能跑但一上负载就露馅。4. 手把手实操面包板搭建二极管门和CMOS门4.1 器材清单和搭建前检查实操部分建议准备以下器材面包板一块最好带电源条5V直流电源可以用USB供电模块或者实验室稳压电源1N4148开关二极管6只电阻若干1kΩ、10kΩ各4只CD4007芯片一片内含3个PMOS和3个NMOS互补对74HC00芯片一片内含4个2输入与非门LED加限流电阻330Ω到1kΩ用来做输出指示按键开关或跳线若干用来做逻辑输入万用表一台最好有示波器没有也能做基础验证。搭建之前先确认电源电压。CD4007和74HC00在5V电源下都很稳定CMOS电路的电源反接是致命的接之前用万用表量一下面包板电源条上的电压确认正负极没错再插芯片。另外强烈建议给每个芯片的VDD和GND引脚并一个0.1uF去耦电容电容尽量靠近芯片引脚。这个习惯能避免很多莫名其妙的抖动和自激尤其是你在用示波器观察波形的时候。4.2 实验一用1N4148搭二极管与门和或门先搭与门。按照前面说的连接方式两个1N4148的阴极接到一起作为输出Y阳极分别接输入A和输入B上拉电阻10kΩ一端接5V、另一端接输出Y。输入用跳线接5V或GND输出端接LED限流电路观察。搭好后你会看到只有当A和B都接5V时LED才亮只要有一个输入接地LED熄灭。用万用表量一下输出电平输入全为高时输出约4.9V任意一个输入为低时输出约0.7V。这0.7V就是二极管的导通压降。接着搭或门两个二极管阳极接一起作为输出阴极分别接输入A和B下拉电阻10kΩ接到GND。这时只要有一个输入接5V输出就约有4.3VLED点亮全部输入接地时输出0VLED熄灭。做这个实验时建议你顺手记录电压表读数。你会发现二极管与门输出低电平是0.7V而不是0V或门输出高电平是4.3V而不是5V。这个观测结果非常直观地解释了二极管逻辑只能用于演示的原因。你还可以把10kΩ上拉电阻换成1kΩ再测一次低电平会略微变低一点点但功耗明显增大。4.3 实验二用CD4007搭CMOS反相器CD4007是一颗很有历史感的芯片里面包含3个PMOS和3个NMOS引脚不多特别适合在面包板上手动搭CMOS电路。搭反相器只需要选取其中一组互补对选取一个PMOS和对应的NMOSPMOS的源极接VDDNMOS的源极接GNDPMOS和NMOS的栅极连接在一起作为输入端APMOS和NMOS的漏极连接在一起作为输出端Y。接好之后输入端接一个开关用来切换高电平和低电平输出端接LED。你会看到输入为低时LED亮输出高输入为高时LED灭输出低。用万用表量输出电压几乎就是0.0V和4.98V的轨到轨比二极管门干净太多了。这里有个经验CD4007的引脚编号比较绕不同厂家的数据手册画法不同不要指望一次插对。我自己的做法是先查数据手册找到三组MOS管的引脚分配然后在面包板图上用不同颜色的线把源极、漏极、栅极标出来再动手接线。这样能够避免把PMOS和NMOS搞混。操作CD4007时切记它输入阻抗极高栅极悬空时电压不定可能导致输出乱跳。所有不用的输入引脚一定要接VDD或GND不能悬空否则芯片可能工作不稳定甚至发热。测试时输入引脚接一个开关到VDD或GND不要让它在中间状态停留太久。4.4 实验三用74HC00搭与非门、非门、与门74HC00是CMOS工艺的四组2输入与非门内部电路已经是封装好的了你不需要手动搭管子。用它来验证逻辑功能最省事把两个输入接到开关输出接LED然后按真值表拨动开关观察LED状态。输入00输出高LED亮输入01输出高LED亮输入10输出高LED亮输入11输出低LED灭。这就是与非门的完整真值表。如果想得到非门很简单把74HC00的两个输入引脚短接然后接同一个信号源就得到反相器。如果想得到与门可以再用另一组与非门接成反相器把第一级与非门的输出反相一次逻辑上就变得“全高才高有一低则低”。这组实验能让你直观理解一个道理CMOS电路里门电路的输入阻抗极高且输出能力很强驱动LED甚至一个小继电器都轻松。对比前面二极管门的“0.7V钳位”你才真正体会到互补结构的价值。4.5 波形观察要是有示波器看上升沿更有意思如果你手头有示波器可以让信号源输出1kHz方波接到74HC00的其中一个与非门输入另一个输入接高电平然后在输出端看波形。你会发现输出波形和输入波形正好反相而且上升沿比较陡峭。如果你想测二极管门的速度把同样的方波送进二极管与门的输入端你会发现输出波形“圆润”很多上升沿变慢。这是因为上拉电阻和电路寄生电容组成了RC低通时间常数约等于R乘以负载电容。100pF的负载电容配10kΩ上拉电阻时间常数就是1微秒对应的带宽只有一百多千赫兹跑高速根本不行。如果实在没有示波器用万用表也能做粗略判断。万用表测方波时读的是平均值占空比不同的方波读出的电压不同可以初步判断信号是否在翻转。但要看波形质量还是得借一台示波器或者用廉价的USB逻辑分析仪采样数字波形。5. 新手最容易踩的坑电平、浮空、静电、闩锁5.1 二极管门级联为什么越级越乱很多同学做完单级二极管门之后都会想着把它们串起来组成更复杂的逻辑比如“与门再接与门”“与门输出接或门”。结果一接就发现输出电平彻底乱了。原因就是前面说的电平偏移。假设第一级与门输出高电平约为4.9V、低电平为0.7V。拿这个输出去驱动第二级二极管或门如果第一级输出高电平4.9V经过或门的二极管之后高电平变成4.2V如果第一级输出低电平0.7V经过或门输入端的下拉电阻后第二级要看这个0.7V是否足够低于其输入阈值。此时0.7V和4.2V的差距缩小了噪声容限严重恶化。如果再接第三级高电平继续降、低电平继续升最后两级输出可能完全无法区分高低。所以别指望二极管逻辑门能级联。如果需要多级逻辑老老实实用CMOS芯片或者用三极管做缓冲级恢复电平。这不是二极管门“不实用”的问题而是无源器件的天然限制。5.2 CMOS输入浮空与上拉/下拉电阻CMOS输入栅极是极高阻抗的电容性负载浮空时引脚电位不定可能漂移到阈值附近导致输出随机翻转。更麻烦的是浮空输入如果处在中间电平PMOS和NMOS可能同时部分导通芯片功耗异常升高。解决办法有两个一是所有不用的输入引脚直接接VDD或GND二是如果输入信号可能处于三态高阻就在输入端加一个上拉电阻到VDD或者下拉电阻到GND默认电平由电阻决定。一般用10kΩ就比较合适既不会造成过大功耗也能把悬空引脚稳稳拉到一个确定状态。在设计PCB时这个原则同样重要。你去看很多单片机设计I2C的SCL和SDA、复位引脚、使能引脚都会默认加上拉电阻目的就是防止上电瞬间或引脚悬空时逻辑状态不确定。5.3 静电保护与闩锁效应CMOS栅氧化层非常薄几伏的静电就可能把它击穿。冬天干燥环境人体身上积累的静电轻松超过几百伏摸芯片引脚前不放电运气不好一次就报废。实验台上最好配防静电手环没有的话至少先摸一下电源适配器的金属外壳或者洗手后再动芯片。另一个CMOS特有的现象是闩锁效应。当输入或输出端的电压超过电源轨高于VDD或低于GND时芯片内部的寄生PNPN结构可能被触发导通形成一个类似可控硅的低阻通路电流不受控地增大芯片立刻发热甚至烧毁。表现为芯片莫名发烫电源电流突然飙升。避免闩锁最有效的方法是确保所有输入输出信号都不超过VDD和GND的范围。比如用5V单片机去驱动3.3V的CMOS芯片一定要加电平转换电路或分压电阻不要直接把5V信号怼进去。5.4 排查速查表现象可能原因排查方法二极管与门输出低电平为0.7VLED半亮低电平被二极管钳位属正常现象换肖特基二极管或改用CMOS门二极管或门输出高电平只有4.3V二极管压降导致电平损失输出端加三极管/缓冲级恢复电平CMOS反相器输出乱跳输入悬空输入引脚接上拉/下拉电阻芯片发热严重输入电压超出电源轨导致闩锁断电检查输入信号范围加保护电阻74HC00输出持续为高/低芯片损坏或电源反接先查电源再换芯片示波器看到的波形上升沿很缓门电路输出加上拉电阻后RC过大减小上拉电阻或去掉上拉检查负载电容6. 最后再分享一点个人体会如果让我给入门数字电路的朋友一个建议我会说找一个完整的下午把二极管与门、或门、CD4007反相器、74HC00验证这四组实验全部做一遍。二极管逻辑门会让你直观体会到“电平损失”是什么概念CD4007会告诉你CMOS互补结构是怎么工作的74HC00则让你意识到真正的集成芯片内部已经帮你搞定了所有这些细节。我踩过最深的坑是当年拿着1N4007去搭高频脉冲电路结果上升沿一塌糊涂还以为自己电路接错了折腾半天才反应过来是二极管类型不对。从那以后我养成一个习惯做任何电路实验之前先确认器件类型再确认电源范围最后才接线。从二极管到CMOS看起来是从一个元器件跳到一个工艺体系中间隔着好几代技术演进。但它们的核心逻辑是贯通的都在用“开关”实现“逻辑”。只不过二极管开关不够好于是人类发明了三极管、造出了MOS管最终用CMOS把数字电路推向了今天无处不在的程度。理解了这条主线你看任何数字芯片的原理图都会觉得亲切很多。