ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用MOS管手搓7种基础逻辑门:从非门到异或门全解析

用MOS管手搓7种基础逻辑门:从非门到异或门全解析 逻辑门是数字电路的积木MOS管则是造积木的砖头。这篇文章想做的事情很直白不用任何现成逻辑芯片只靠MOS管在面包板上手搓出7种基础逻辑门每一条都配上电路图和真值表。作为过来人我可以负责任地说当我第一次亲手用两个MOS管拼出非门再接上LED看到输出翻转时“芯片内部到底是什么”的疑惑瞬间消散了一大半。这篇文章适合学数字电路有点犯迷糊的同学也适合所有想亲自验证CMOS原理的电子爱好者。1. 动手之前为什么我坚持用MOS管手搓逻辑门1.1 用现成芯片不香吗香但学不到真东西直接买74HC00里面集成了四个与非门插上就能用从实用角度看当然更高效。但问题在于芯片是个黑盒子你只知道引脚功能不知道内部那层硅片上到底发生了什么。逻辑门是数字电路的砖MOS管是造砖的原料如果你想真正搞懂“砖头”是怎么从“泥巴”里烧出来的就得从MOS管开始。我自己刚学数字电路时也有个误区总觉得真值表背下来就行。直到某次做项目被问到“CMOS与非门里面几个管子、怎么接的”我才发现单纯背真值表根本不够。从那以后我给自己定了个规矩凡是学过的逻辑门都必须能在面包板上用分立MOS管搭出来眼见为实。这次一口气把七个基础门全搭了一遍收获远超预期。当然用分立管子搭逻辑门并不是为了替代芯片。它的价值在两点一是原理验证CMOS数字IC内部用的就是这套互补开关网络搭一次胜过背十遍书二是故障分析当你亲手搭的电路出了问题你去查线、测电压、判断管子好坏的过程比任何仿真软件都能锻炼实战能力。所以我建议把它当成一个“原理体检项目”来做而不是追求实用替代。1.2 材料清单与MOS管选型动手之前先把器件选对。我用的是2N7000作NMOS、BS250作PMOS。选这两个型号主要有几个考虑第一它们是逻辑电平MOS管2N7000的开启电压Vth典型值在1V到2V之间用5V电压就能可靠开启如果换成某些工业级大功率MOS管Vth可能就要4V以上3.3V电压根本驱动不了实验会卡在第一步。第二这两款的导通电阻都在几欧到十几欧量级带个LED负载毫无压力不会出现输出被负载拉垮的问题。第三都是To-92直插封装三只脚间距标准插面包板非常顺滑。BS250还要多说一句它是P沟道很多人第一次用P沟道容易犯迷糊导通条件是G极比S极电压低超过阈值也就是Vgs为负。它的漏极电流方向和NMOS相反S极通常接VDD。如果你手头没有BS250也可以用BSS92、TP0610之类的P沟道逻辑电平管参数接近就能用。材料清单如下表这些都能在常见电子元件店铺一站式买到总成本不到二十块。器件/工具型号或规格数量用途NMOS管2N7000至少10只构成下拉网络PMOS管BS250或BSS92至少10只构成上拉网络面包板830孔1块搭建平台面包板电源模块5V输出1个给电路供电拨码开关2位以上2个模拟输入高低电平LED红色或绿色8个指示输入输出状态电阻330Ω到1kΩ10个LED限流跳线公对公若干连线万用表普通数字万用表即可1块测量验证工具方面万用表必须有至少要用直流电压挡和通断挡示波器有的话更好能直观看到开关波形没有也不影响实验用万用表和LED完全能验证逻辑功能。2. MOS管快速扫盲三个极、两个条件、一个开关模型2.1 三个极到底怎么认MOS管有栅极G、漏极D、源极S三个极。栅极是电压控制端它和下面的导电沟道之间隔着一层极薄的氧化硅绝缘层所以栅极几乎不取电流这也是MOS管输入阻抗极高的原因。漏极和源极在物理结构上往往是对称的实际使用时靠外加电压极性来判断哪个是S哪个是D。以2N7000为例把平面对着自己、字符面朝前从左到右依次是S、D、G但不同型号排布不一定相同所以拿到管子第一步永远是查数据手册不要凭记忆。对于NMOS电路里通常把S接GNDD通过负载接正电源当G比S高出的电压Vgs超过阈值Vth时N型导电沟道形成D和S之间像开关一样闭合。对于PMOS电路里通常把S接VDDD通过负载接GND当G比S低出的电压达到阈值也就是Vgs小于负的Vth时P型导电沟道形成开关闭合。记住这个“NMOS低端接地、PMOS高端接电源”的接法后面所有电路图都不会乱。2.2 为什么逻辑门必须成对出现如果只用一个NMOS当开关能不能做一个简单的反相器能但效果很差。设想A接NMOS的G输出从D取S接地那A为高电平时NMOS导通输出被拉到0V没问题但A为低电平时NMOS关断输出悬空既不是高也不是低。要让它输出高还得在输出和VDD之间接一个大电阻做上拉可上拉电阻会跟NMOS的导通电阻构成分压输出低电平永远到不了0V而且功耗可观。这就是互补CMOS结构出现的根本原因每个逻辑门都同时配置PMOS上拉网络PUN和NMOS下拉网络PDN输入信号同时控制两者保证任意时刻只有一个网络导通。输出为高时PMOS网络导通把输出拉到VDD输出为低时NMOS网络导通把输出拉到GND输出永远不会悬空也没有持续的直通电流。静态功耗几乎为零输出摆幅满电源轨逻辑电平清晰可靠这就是为什么现代数字芯片绝大多数都采用CMOS工艺。2.3 搭建逻辑门最容易踩的三个坑第一个坑是栅极悬空。MOS管栅极输入阻抗极高悬空时一点点电荷就能让它不确定导通还是关断逻辑功能完全不可控甚至会上下管同时导通造成短路。实验中所有输入都必须明确接高或接低这句话值得写三遍。第二个坑是管脚认错。前面说过不同型号的管脚排布不同特别是P沟道的BS250管脚定义跟2N7000不一样拿万用表二极管挡测一下G和其他脚之间发现有电压读数的那只脚就是G然后再区分D和S最稳。第三个坑是拿模拟思维看数字。MOS管本质上是个电压控制的可变电阻导通时电阻不为零关断时也有微弱的漏电流。在高速开关里这些参数影响很大但在我们这种低速逻辑门实验中只要管子工作在“充分导通”或“完全关断”两个状态这些非理想效应几乎可以忽略。这也是为什么实验电压要选在5V而不是1.8V电压越高逻辑电平裕量越大越不容易出问题。3. 七个逻辑门电路图与真值表3.1 非门NOT最简结构但足以说明一切非门是标准CMOS逻辑门的基础架构整个结构只有两只管子上面的PMOS接VDD下面的NMOS接GND输入A同时接到两个管的栅极输出Y从两只管子中间的节点取出来。逻辑功能是一句话输出跟输入反相输入0输出1输入1输出0。VDD │ ┌───┴───┐ │ PMOS │ └───┬───┘ │ A ───┤ ├────── Y A ───┤ │ ┌───┴───┐ │ NMOS │ └───┬───┘ │ GND工作过程分成两半来看。当A为0V时NMOS的Vgs0V低于阈值关断PMOS的S接VDDG接0VVgs-5V满足导通条件输出Y被PMOS拉到接近VDDY1。反过来A为5V时NMOS导通把输出拉到GNDPMOS的Vgs0V关断Y0。两只管子一个开一个关输出电平永远不会悬空。真值表也很简单AY0110这里我建议搭完以后把万用表红表笔放在Y节点拨动输入开关看电压是不是在5V和0V之间干净地跳变。如果出现中间电压比如2.5V说明很可能两只管子同时导通了要检查输入是不是悬空。3.2 与非门NAND串并联结构的第一次交锋与非门在逻辑上就是“先与后非”A和B都为1时输出0其它情况输出1。它在CMOS里的接法是上面两只PMOS并联下面两只NMOS串联。输入A控制P1和N1输入B控制P2和N2。VDD ──┬── P1(S) ── P1(D) ──┐ │ ├── Y └── P2(S) ── P2(D) ──┘ A ── P1(G), N1(G) B ── P2(G), N2(G) Y ── N1(D) N1(S) ── N2(D) N2(S) ── GND控制关系要顺着导通路径梳理。当A和B都为高时N1和N2都导通NMOS串联路径形成完整通路把Y拉到GND同时P1和P2的Vgs都是0V都关断所以输出为0。只要A、B中有一个为低对应的那个NMOS就关断串联通路断开而对应PMOS导通输出被拉到VDDY1。ABY001011101110实际搭建时NMOS串联那部分最容易接错。N1的源极S不是直接接地而是接N2的漏极DN2的源极S才接地。很多人第一次搭会把两个NMOS都直接接地结果不管输入怎么变输出都是0这个坑我踩过后来养成习惯搭串联结构时先在纸上把D和S的级联路径画清楚再上板子。3.3 或非门NOR把串并联反过来就是另一番天地或非门是“先或后非”A和B都为0时输出1其它情况输出0。CMOS结构跟前一个正好镜像上面两只PMOS串联下面两只NMOS并联。VDD ── P1(S) ── P1(D) ── P2(S) ── P2(D) ── Y A ── P1(G), N1(G) B ── P2(G), N2(G) Y ── N1(D) Y ── N2(D) N1(S) ── GND N2(S) ── GND当A和B都为低时N1和N2都关断NMOS并联网络不起作用P1和P2都导通PMOS串联路径从VDD到Y完全接通输出高电平。只要任意一个输入为高对应的NMOS就导通把Y拉到GND同时对应PMOS关断串联路径断开输出低。ABY001010100110与非门和或非门搭完之后可以放在一起对比看一个的关键在下拉串联一个的关键在上拉串联。你亲手搭过一次就能明白为什么CMOS电路设计里串联管子越多速度越慢因为等效电阻是叠加的。这也是进阶学习时理解门延迟的重要起点。3.4 与门AND和或门OR组合出来的基础门前面已经搭出NAND和NOR那AND和OR就变得非常简单在它们输出端再接一个非门就行。与非门后面接非门得到与门或非门后面接非门得到或门。从电路上看就是一个三级的逻辑网络。以与门为例输入A、B先进入与非门得到中间信号SNAND(A,B)S再进入非门最终输出YNOT(NAND(A,B))A·B。因为非门的输入阻抗高、输出阻抗低还顺便起到隔离和整形的作用所以这种组合方式在实际电路里很常见。ABANDOR0000010110011111搭建时有一个很实用的做法把前面搭好的与非门模块和或非门模块当作“半成品”不要拆掉直接在输出端再接一套非门。这样一方面验证了逻辑门的级联思想另一方面也为后面异或门用多个与非门拼接打下基础。3.5 异或门XOR最复杂也最有意思的一个异或门的逻辑是“相同为0不同为1”也就是只有A和B不相等时输出才为1。它是七个门里唯一不能直接用串并联结构独立完成的基础门需要多级组合来实现。适合初学者的方案是用四个与非门拼出来逻辑表达式是Y(A NAND (A NAND B)) NAND (B NAND (A NAND B))搭建思路是先用一个与非门同时接收A、B产出一个中间信号SNAND(A,B)然后把A和S送进第二个与非门B和S送进第三个与非门最后把这两个门的输出再接进第四个与非门得到的就是XOR。整个过程需要16个MOS管数量多但路径清晰很适合验证逻辑。如果管子够用还有更省的传输门方案只需要8只管子先用一个反相器把A变成A再用一个反相器把B变成B然后通过两个传输门做二选一。传输门本质上是一个NMOS加一个PMOS并联靠控制信号的高低压来通断信号。当A0时送入B的信号通过第一个传输门到达输出当A1时送入B的信号通过第二个传输门到达输出。这不就实现了Y在A0时等于B、A1时等于B吗正好就是异或逻辑。ABY000011101110我建议第一次尝试时用四个与非门方案因为它用到的都是你前面已经验证过的模块好排查问题。传输门方案等逻辑验证通过后再玩理解一下双向开关的用法。3.6 同或门XNOR异或门的“反向孪生”同或门的逻辑是“相同为1不同为0”正好是异或门的反相。实现方式就是在异或门输出端再接一个非门把XOR的输出再翻转一次。如果你已经搭好异或门那这个就属于白送的功能。ABY001010100111这里有一个值得思考的细节从真值表看同或门就是异或门取反但在CMOS集成电路里设计者通常会直接在内部搭一个紧凑的XNOR结构而不是先做XOR再接反相器因为这样能省管子、省面积。你在面包板上用分立元件做“XOR加NOT”理解的是逻辑关系芯片内部优化理解的是工程权衡。两个层面都有价值。七个门全部搭完之后把真值表合在一起看会发现门与门之间存在非常清晰的规律与门取反就是与非门或门取反就是或非门异或门取反就是同或门。数字电路的学习本质上就是建立这张表的过程有了表再复杂的组合逻辑也能拆解成这些基本单元。4. 实操实录从面包板到第一个稳定输出4.1 第一步先搭非门建立信心也建立标准我的建议是永远从非门开始因为它只有两只管子五分钟搞定却能把电源、输入、输出、测量这四条线全部走通。上电之前先把VDD和GND两根电源轨检查一遍万用表通断挡确认没有短路然后用跳线把两个拨码开关的一端分别接VDD另一端接GND中间抽头作为输入信号A。这样做的好处是输入高低电平非常明确不会出现悬空。接着把2N7000插到面包板中间G接输入AS接GNDD接输出节点再把BS250的S接VDDG也接输入AD接同一个输出节点。输出端接一个LED到GND串联一个330Ω到1kΩ的限流电阻。上电以后拨动开关输入低电平时LED亮输入高电平时LED灭非门逻辑就验证通过了。测量的时候有个小技巧不要只量LED亮不亮要用万用表量一下输出节点的实际电压。非门输出高时应该接近5V输出低时接近0V。如果高电平只有3.8V说明PMOS没有完全导通或者电源压降太大如果低电平有1V以上说明NMOS导通电阻偏大或者地线接触不良。用数据说话比看灯亮靠谱得多。4.2 第二步拆解与非门和或非门的搭建差异非门验证通过后开始搭与非门。四个管子在面包板上的布局建议是两个PMOS放在最上面一行紧挨VDD轨两个NMOS放在下面紧挨GND轨。输入A和B分别从左右两侧送进来这样导线交叉最少不容易短路。NMOS串联部分按前面画的路径来第一个NMOS的D接输出节点YS接到第二个NMOS的D第二个NMOS的S接GND。PMOS并联部分两个PMOS的S都接VDDD都接同一个输出节点Y。A同时接P1的G和N1的GB同时接P2的G和N2的G。接线时我习惯用不同颜色的跳线区分红色接电源黑色接地黄色接输入蓝色接输出这样排查起来能省一半时间。或非门的接法和与非门刚好反过来PMOS串联NMOS并联。搭的时候不要想着“把与非门的图翻转一下就行”建议重新对着电路图一根一根接因为面包板的物理布局不可能直接镜像。我踩过的坑是搭完或非门后忘记把PMOS串联路径的中间节点接对结果输出永远高电平。后来习惯是每接一根线就在电路图上划掉一根保证图实一一对应。4.3 第三步异或门的两种搭法与实测感受异或门用四个与非门方案时最好先把前面搭好的单个与非门当作“积木块”使用。如果面包板面积足够就保留四个独立的与非门区域每个区域四只管然后按逻辑表达式把中间连线接好。连线顺序建议从输入端开始先给两个原始输入各接一个与非门再把两个中间信号分别接到新的与非门上最后把两个结果汇入第四个与非门。实测时重点验证两组最容易出错的组合A0、B1时Y应为1A1、B0时Y也应为1。这两组需要两级以上的门同时翻转如果出现输出不定或者电平偏弱多半是中间某个门的NMOS下拉和PMOS上拉动作不同步。这时候不要急着改接线先用万用表量中间节点电压判断是哪一级出了问题。传输门方案我后来也试了一次搭建更清爽两个反相器加两个传输门总共八只管。传输门的关键是NMOS和PMOS的S和D要相互联通一个管的S接另一个管的D形成双向通路控制信号来接栅极。虽然它比四与非门方案省管子但对初学者来说判断“什么时候用A控制、什么时候用A控制”还是有点绕不如先搭四与非门来得踏实。4.4 用LED和万用表做完整功能验证所有门都搭完后我习惯做一个统一的验证流程先拨动输入开关组合出真值表里的每一种状态观察对应LED亮灭再拿万用表确认输出电平。输入状态的组合顺序建议按00、01、10、11来也就是先让A从0变1再让B从0变1这样能顺便观察前一级变化对后一级的影响。如果手头有双通道示波器可以把A接到CH1输出Y接到CH2把A的输入改成一个1Hz左右的方波信号源另一路B用开关设定高或低。这样能看到输出波形的翻转沿能直观理解门的传播延迟。没有示波器也不用纠结LED加万用表足够验证所有逻辑正确性。这里再强调一遍实验全程不要让任何MOS管的栅极悬空。拨码开关拨到中间位置其实也算一种悬空状态所以最好用那种带明确高/低档位的开关或者干脆用跳线帽去插VDD或GND确定性更强。5. 常见问题与排查技巧实录5.1 故障排查速查表搭建过程中我整理了遇到过的问题和对应的排查思路整理成一张速查表希望你用不上但收藏好。现象可能原因排查与解决输出始终为高下拉NMOS不导通检查NMOS的G是否接对输入S是否真的接地用万用表二极管挡确认管子类型输出始终为低上拉PMOS不导通检查PMOS的G是否接对输入S是否接VDD确认是P沟道管而不是N沟道输出在2V到3V之间上下管同时导通或输入悬空检查输入是否悬空测量两管Vgs是否都满足导通条件输入高时LED暗NMOS导通电阻偏大Vth过高的管子不适合5V逻辑换2N7000等逻辑电平管管子烫手VDD到GND直通立刻断电检查上下网络是否同时导通排除接线短路逻辑偶发错乱电源去耦不充分在VDD和GND轨之间加0.1uF陶瓷电容检查面包板电源轨接触某只管子换上去就不工作静电击穿或脚位判断错换新管子前先测G极不要在通电状态下插拔管子5.2 静电防护和器件保护MOS管栅极的氧化层非常薄静电电压上千伏就能把它击穿这是实际工作中常见的情况。虽然2N7000和BS250这类小功率管内部通常集成了保护二极管但实验时还是要养成好习惯每次拿起管子之前先摸一下水管或接地金属把人体静电放掉管子不从包装里一次性全倒出来用一只拿一只焊接或者插拔时给烙铁接好地线。还有一种情况要特别注意禁止在电路通电的情况下插拔MOS管。一瞬间的接触抖动可能导致栅极悬空输出状态不可控甚至造成直通短路。稳妥的做法是每次改电路前先关掉电源把输入都拨到明确的低电平再接好线、检查无误后重新上电。5.3 进阶现象米勒效应、寄生电容和栅极电阻如果只用LED和开关做低速验证你几乎感觉不到MOS管开关的速度限制。但只要换成几十kHz以上的方波信号立刻能看到输出波形变得圆润、有延迟这就是栅极寄生电容和米勒效应在起作用。栅极与漏极之间有个很小的寄生电容Cgd开关瞬间输出端电压变化会通过这个电容反馈回栅极产生一个“米勒平台”延长开关时间。很多MOS管驱动电路里专门在栅极串一个小电阻来抑制这个效应。在逻辑门实验里这个现象不需要刻意解决但理解它有实际意义为什么单片机不能直接驱动大功率MOS管为什么驱动芯片都强调峰值电流本质都是要在极短时间里给栅极电容充放电。你把逻辑门搭到能工作只是第一步如果能用示波器观察到开关沿的斜率再对比加不加栅极电阻的差异那这趟实验的价值就直接翻倍了。6. 再往前走一步七个门之外还能做什么七个基本门全部搭完后可以继续挑战几个组合逻辑模块。比如用四个与非门做一个半加器A和B相加S输出异或结果C输出进位这正好用到我们搭过的异或门和与门真值表也现成只有A和B都为1时进位C才为1。这个实验能让你直观看到“运算器”的最基础单元不是魔法就是MOS管的开关网络组合而已。还可以尝试用两个与非门搭一个RS锁存器这是最基础的时序逻辑单元。把与非门的输出交叉反馈到另一个门的输入你会发现电路开始具备“记忆”能力哪怕把输入断开输出状态也能保持。这一下就跨出了组合逻辑的范畴进入时序逻辑的大门而这一切依然只需要前面这四只管子。我个人在这套实验里最深的体会是数字电路的学习如果只停留在真值表和逻辑表达式层面总有点隔靴搔痒。当你亲手用MOS管把非门、与非门、异或门一层一层搭起来之后再看任何芯片的数据手册、任何复杂的数字系统框图脑子里会自动浮现出管子导通关断的画面。这种感觉很难用文字描述但一旦有了就很难再忘记。建议你从非门开始耐心搭完这七个门每搭一个都量一量电压出问题就顺着节点查这套基本功练扎实了后面无论是学单片机还是学嵌入式都会顺畅得多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进