☰
CMOS门电路详解:从晶体管开关到OD门、传输门、三态门
2026/10/7 13:31:21 网站建设 项目流程

1. 一条捷径:先从开关角度看CMOS门电路

每次带新人或者给学生讲数字电路,我第一件事就是让他们忘掉复杂的布尔代数,先从物理本质看起。数字电路里那些门电路,无论是与非门、或非门、非门,还是后来更进阶的OD门、传输门、三态门,本质都是在做一件事:用晶体管当开关,控制电流的通断,然后把通断翻译成逻辑0和逻辑1。

CMOS全称是Complementary Metal Oxide Semiconductor,互补金属氧化物半导体。所谓互补,就是同一组逻辑功能由两种类型的MOS管配合完成:一种是N沟道MOS管(NMOS),一种是P沟道MOS管(PMOS)。NMOS在栅极为高电平时导通,低电平时截止;PMOS恰好反过来,栅极为低电平时导通,高电平时截止。把这个特性记住,后面的所有门电路都可以自己推导出来,不用死记真值表。

这门课解决什么问题?往小说,是搞懂芯片内部那几十亿个晶体管是怎么搭成逻辑电路的;往大说,是理解CPU、GPU、MCU底层运算逻辑的必经之路。哪怕你将来只写嵌入式软件,不碰硬件设计,知道门电路的工作原理也能帮你在看原理图、查时序、定位引脚冲突时少走很多弯路。所以这篇文章既是写给电子类专业的学生,也是写给刚入行的硬件工程师、FPGA开发者的。

我尽量不堆公式,用“搭电路”的视角把CMOS门电路拆开讲清楚,每个门都会聊到它是怎么搭的、为什么这么搭、实战中容易在哪里翻车。

2. 基础三件套:非门、与非门、或非门到底怎么工作

2.1 非门(反相器):CMOS一切门电路的起点

先看最基础的反相器,也就是非门。它只有两个管子:上面一个PMOS,下面一个NMOS,两个栅极接在一起作为输入,两个漏极接在一起作为输出。电源接PMOS的源极,地接NMOS的源极。

输入为高电平(比如3.3V)时,PMOS截止,NMOS导通,输出被NMOS拉到地,也就是低电平0;输入为低电平时,PMOS导通,NMOS截止,输出被PMOS接到电源,也就是高电平1。这就是“反相”的含义。

这个结构的精妙之处在于:稳态时,总有一个管子是截止的,电源到地之间没有直流通路,所以静态功耗几乎为零。这一点是CMOS能取代TTL、成为现代芯片主流工艺的根本原因。TTL门电路静态时会有不小的电流流过,几十个门感觉不出来,几百万个门同时工作,功耗和发热就是灾难级问题。

还有一点值得注意,非门的输出不是简单的“高或低”,它存在一个电压传输特性:当输入电压从0逐渐升高到电源电压时,输出电压不会突然跳变,而是在中间某个阈值附近急剧变化。这个阈值大概在电源电压的一半左右,具体位置取决于PMOS和NMOS的尺寸比例。设计时如果把两个管子的宽长比调成对称,阈值就在VDD/2附近,噪声容限最好。

实际工程中,我再补一个细节:反相器还可以串联起来构成缓冲器。一个反相器驱动大电容负载时速度不够,就用两级、三级反相器逐级加大管子尺寸,像接力赛一样把驱动能力提上去。这叫“buffer chain”,几乎所有芯片的输入输出端口(IO)和时钟树里都有这种结构。

2.2 与非门:为什么它是数字电路里最常用的门

与非门的CMOS结构是:两个PMOS并联在上边,两个NMOS串联在下边。两个输入A和B同时为高时,两个NMOS都导通,两个PMOS都截止,输出被拉到低电平;只要A或B有一个为低,对应PMOS导通,串联的NMOS至少有一个截止,输出被拉到高电平。真值表四个组合,只有00、01、10输出1,11输出0,这就是与非逻辑。

很多人学到这里会问:为什么教材里总说“与非门是最常用的门”?两个原因。第一,与非门本身是功能完备的,仅用与非门就能搭出任何逻辑函数;第二,在CMOS工艺里,与非门的管子排列非常紧凑,PMOS并联、NMOS串联的结构版图面积小、速度快。

从速度角度看,串联的NMOS相当于增加了导通电阻,输出低电平的路径变长,但这可以通过加大NMOS的宽长比来补偿。实际标准单元库里,与非门通常比同尺寸的与门快,因为与门是“与非门+非门”两级结构,多了一级延时。

我在用Verilog写RTL时也养成了一个习惯:综合工具反馈的关键路径上,如果需要手工优化,减少与门、或门等复合门的级数,尽量用与非门、或非门改写逻辑表达式。这不是玄学,是基于CMOS门电路结构特性的经验技巧。

2.3 或非门:结构刚好反过来

或非门和与非门是对偶结构:两个PMOS串联在上面,两个NMOS并联在下面。任意一个输入为高,对应的NMOS导通,PMOS串联支路断开,输出为低;只有两个输入同时为低时,两个PMOS都导通,两个NMOS都截止,输出为高。

这里有个性能上的细节:或非门的输出高电平路径是串联的PMOS,而PMOS本身的空穴迁移率比NMOS的电子迁移率低,导通电阻更大。所以串联PMOS会让上升沿变慢。同样尺寸下,或非门的速度通常比与非门慢,版图面积也更大。

这也是为什么很多数字电路教材里,或非门的出场频率远低于与非门。不过或非门不是没有用,在特定场景下它也有优势,比如实现“只要任一条件满足就清零”这种逻辑时,或非门很直观。还有一个地方经常用或非门——SR锁存器。用两个或非门交叉耦合就能构成最简单的锁存器,这是存储器的鼻祖结构。

2.4 逻辑门的电平窗口与扇入扇出

学门电路不能只懂逻辑关系,还得懂“驱动能力”和“带负载能力”。CMOS门的输入阻抗极高,栅极和沟道之间是绝缘的二氧化硅层,直流情况下几乎没有电流流入。所以一个门可以驱动很多个后续门,这就是“扇出”概念的基础。

扇出不是无限的。虽然直流输入电流很小,但每个后续门的栅极都有寄生电容。驱动多个门,等效于驱动一个更大的电容。电容充电需要时间,RC延迟随负载电容增大而增加。所以扇出越大,边沿越缓,传播延时越长。

扇入也影响速度。一个四输入与非门,需要四个NMOS串联,导通路径电阻接近四倍单个管子,下拉能力变差。所以实际设计中很少做太宽扇入门,宁可拆成两级。我调试FPGA时见过不少因为扇入过大导致时序违例的案例,解决办法就是逻辑重组,把八输入与门拆成两级四输入与门加一个二输入与门,时序立刻改善。这些工程细节,教科书不会讲这么细,但在关键路径上非常管用。

3. 特殊门电路:OD门、传输门、三态门的应用场景

3.1 OD门(开漏输出):没有上拉,电平全靠外部决定

OD门的全称是Open-Drain,开漏极输出。它的结构很有意思:只有一个NMOS管,漏极直接作为输出端,没有PMOS上拉网络。输出端只存在“下拉到地”和“高阻”两种状态。想要输出高电平?必须在外部接一个上拉电阻到电源。

很多刚接触OD门的人不理解:好好的门电路,为什么不把PMOS做进去,非要靠外部电阻?原因有三个,每一个都是实际工程痛点。

第一,电平转换。OD门输出高电平的电压不取决于芯片的电源电压,而是取决于上拉电阻接的电源。比如芯片供电5V,但你要和一个3.3V的I2C设备通信,I2C规范就要求使用开漏结构加上拉电阻到3.3V。这样OD门既能输出0,又能输出3.3V,实现电平匹配。

第二,线与逻辑。多个OD门的输出可以直接接在一条线上,各自独立控制。任何一个OD门输出低电平时,整条线就被拉低;只有所有OD门都输出高阻,线上才会被上拉电阻拉到高电平。这就是所谓的“线与”。I2C总线、中断信号线、复位信号线都靠这个特性实现多个设备共享一根线。

第三,驱动能力扩展。开漏输出可以直接驱动外部负载,比如继电器、LED、功率MOS管,电流大小由外部电路决定,不受芯片内部管子尺寸限制。很多单片机的IO引脚配置为开漏模式后,就能驱动比普通推挽输出更大的电流。

OD门使用中最关键的元件是上拉电阻。阻值选多大?要综合考虑三个因素:功耗、速度、驱动能力。阻值太大,充电电流小,上升沿变慢;阻值太小,静态时流过电阻的电流大,功耗高。I2C总线在100kHz标准模式下常用4.7kΩ到10kΩ上拉电阻,400kHz快速模式用2.2kΩ左右,1MHz以上高速模式甚至要用1kΩ。设计中可以用“RC充电时间常数”来估算:上升时间约等于0.8倍的R_pullup乘以总线等效电容。总线电容越大,上拉电阻就要越小,但功耗会随之上升。

我调试I2C时遇到过一个典型的上升沿过缓问题,波形像钝刀一样,加了一个1kΩ上拉电阻后波形立刻变得棱角分明。但在低功耗设备上不能这么粗暴,因为在静态时电阻一直在耗电。如果总线不忙,可以考虑用PMOS动态上拉来实现“平时高阻、需要时拉高”的方案,这属于进阶技巧了。

3.2 传输门:双向导通,几乎没有压降

传输门(Transmission Gate)的电路结构是由一个NMOS和一个PMOS并联而成,NMOS的栅极接控制信号C,PMOS的栅极接控制信号C的反相C'。它没有电源和地的固定连接,输入输出是可以互换的,这就是“双向导通”的由来。

为什么要两个管子并联?因为在传输信号时,单个NMOS传强0弱1,单个PMOS传强1弱0。NMOS作为开关导通时,漏极输出电压最高只能到VDD减去一个阈值电压Vth,再高就导通不了;PMOS导通时,输出最低只能到Vth,再低就截止。两个管子并联在一起,NMOS负责传输接近0的低电平,PMOS负责传输接近VDD的高电平,互补之后,无论传0还是传1,都几乎无损失,输出范围接近满电源摆幅。

这个特性让传输门成为了CMOS电路里的“万金油”。模拟开关、采样保持电路、D触发器内部锁存结构、多路选择器(MUX)、移位寄存器,到处都有它的身影。比如一个二选一MUX,就可以用两个传输门,一个在控制信号为1时导通传A,另一个在控制信号为0时导通传B。

使用传输门要注意的主要是“竞争风险”和“电荷共享”。控制信号C和C'必须严格互补,如果出现两者同时导通或同时截止的时间窗口,电路可能瞬间出现未知状态甚至直通短路,这在高速设计中尤其致命。所以驱动传输门控制端的信号必须经过仔细的时序约束,甚至要加缓冲器保证反相信号同步到达。

还有一个容易被忽略的点:传输门导通时有导通电阻,一般在几百到几千欧姆量级,取决于管子尺寸和栅极电压。这个电阻会和后级负载电容构成RC延迟。在采样电路中,导通电阻太大意味着采样时间常数大,捕捉信号的速度就慢。设计输入信号频率较高的模拟采样电路时,传输门尺寸必须仔细优化,必要时用并联多组传输门降低导通电阻。

3.3 三态门:让多路输出安全共享一根总线

三态门的“三态”是指:高电平、低电平、高阻态。前两个和普通门一样,第三个高阻态意味着输出端和内部电路完全断开,既不输出高也不输出低,外部可以任意驱动。三态门通常多了一个使能控制端EN(或OE,Output Enable)。

高阻态的价值在总线结构里体现得淋漓尽致。设想一条数据总线连接着CPU、内存、外设等多个设备。如果每个设备都直接输出,互相之间就会“打架”:一个设备输出高,另一个输出低,两个电流方向相反,轻则逻辑错误,重则烧毁芯片。三态门的解决思路是:同一时刻只有一个设备的输出使能(EN为有效),其他设备的输出都切到高阻态,总线由那一个设备独占驱动。

这个机制在SPI、SDIO、SRAM接口、PCI总线里普遍存在。单片机里常见的GPIO模式配置,有一个模式叫“浮空输入”,本质就是引脚内部不驱动、呈现高阻态,外部信号可以自由输入。这也是三态门思想在IO口设计中的应用。

三态门使用中最害怕的故障是“总线冲突”,也就是两个三态门同时使能。我在仿真时经常故意检查这个场景:一旦发现总线上两个设备输出电平相反,电流尖峰会非常大。如果只是在仿真工具里看波形,顶多出现X态;如果是在真实硬件上,很可能会损坏IO驱动电路。所以设计多主设备总线时,必须通过片选信号CS或者地址译码逻辑严格保证只有一个使能。

还有一个实践细节值得分享:三态门输出高阻时,总线节点处于悬浮状态,电压不确定。如果外部没有其他电路把总线拉到一个确定的电平,这个引脚就可能拾取噪声,造成逻辑混乱。因此总线设计里经常需要在总线上加一个下拉电阻(或上拉电阻),让没有设备驱动时总线有一个确定的默认电平。比如I2C的SDA和SCL线上拉,SPI的MISO线在未选中设备时保持高阻,如果主设备不使能内部上拉,就要靠外部电阻稳定电平。

4. 选型要看的参数:电平、噪声容限、功耗怎么权衡

4.1 直流参数:VOH、VOL、VIH、VIL不是摆设

拿到一个CMOS门电路数据手册,最先看的应该是直流参数那一页。里面四个核心电压参数,每个都必须过一遍。

VOH是输出为高时的最低输出电压。比如标称VOH为2.4V,意思是只要输出为高,电压至少是2.4V以上。VOL是输出为低时的最高输出电压,比如0.4V。VIH是输入被识别为高电平所需的最低电压,VIL是输入被识别为低电平所需的最高电压。

这四个参数之间的差值,就是噪声容限(Noise Margin)。高电平噪声容限NMH = VOH - VIH,低电平噪声容限NML = VIL - VOL。这个差值越大,电路抗干扰能力越强。假设一个门输出2.4V的高电平,下一个门只要1.8V以上就认为是高电平,那么一串0.6V以内的噪声就不会导致逻辑翻转。

在电平转换场景中,这四个参数尤其重要。用3.3V的芯片驱动5V的TTL器件,3.3V输出的高电平2.6V左右,5V器件的VIH可能要求2.0V,差距不大,一般能驱动。但如果5V器件明确要求高电平最低3.5V,那就必须用OD门加上拉电阻或电平转换芯片,否则输出虽高,但对方认不出,逻辑就会随机性出错。

我做过一个项目,STM32的IO直接驱动一个老款LCD屏,用的5V供电。所有通信测试正常,但偶尔屏幕花屏。最后用示波器抓信号,发现高电平只有2.9V,而LCD控制器VIH要求3.5V以上,差值只有0.6V,稍微有点干扰就翻转错误。后来加了一个简单的电平转换电路,症状立刻消失。

4.2 动态参数:传播延时与功耗的平衡艺术

CMOS门电路的传播延时,定义为输入信号变化到输出信号变化之间的时间。它由两部分组成:一部分是管子本身的开关速度,一部分是负载电容的充放电时间。负载电容越大,延时越大。

传播延时还直接决定了电路的最高工作频率。在数字IC中,时钟周期必须大于所有路径的“组合逻辑延时+寄存器建立时间+时钟偏移”,否则数据就来不及稳定。所以关键路径上的门电路数量、每个门的延时,都直接影响芯片能跑多快。

CMOS功耗的经典公式是P = α × C × V² × f。α是翻转率(平均每个时钟周期翻转的概率),C是负载电容,V是电源电压,f是工作频率。从这个公式能看出一个残酷的事实:电压从5V降到3.3V,功耗降到原来的约43%;从3.3V降到1.8V,功耗又降到原来的约30%。所以现代芯片拼命降低供电电压,不是没有道理的。

但电压也不能无限制降,因为晶体管的阈值电压Vth不会随电源电压一起线性下降。当VDD接近Vth时,导通电流呈指数级减小,速度会急剧恶化。这就是为什么低压工艺下,“低功耗”和“高性能”总是打架。做嵌入式硬件选型时,看到“宽电压供电”的芯片,也要掂量一下在高电压下功耗和发热是否能接受。

4.3 上拉电阻计算实例:以OD门驱动I2C总线为例

开漏OD门的应用,标准例子就是I2C总线。假设总线上挂3个设备,总线寄生电容约100pF,要求在100kHz标准模式下,上升时间不超过1微秒。RC充放电时间常数可以用公式V(t) = VDD(1 - e^(-t/RC))来估算。

从0到70%VDD需要约1.2倍时间常数。如果要求1微秒内上升到70%,那RC要小于约0.83微秒。除以100pF电容,上拉电阻要低于8.3kΩ。标准值里小于8.2kΩ的,最常用的是4.7kΩ,既满足上升时间要求,静态功耗也不算大。如果总线电容到了200pF,同样时间要求下电阻要降到4.3kΩ以下,这就是快速模式下用2.2kΩ的原因。

实际计算时还要考虑OD门本身的下拉驱动能力。数据手册里会标出VOL=0.4V时对应的灌电流,比如3mA。那么上拉电阻的下限就不能低于(VDD - 0.4V) / 3mA。以3.3V供电算,就是(3.3 - 0.4) / 0.003 ≈ 967Ω,所以1kΩ是最低极限,再小就把NMOS的灌电流能力逼到极限了。

所以OD门上拉电阻的取值区间是:上限由上升时间决定,下限由灌电流能力决定,中间再留出余量。这个方法论适用于所有开漏输出场景,包括中断信号线、复位信号线、一线制协议(如DS18B20)等。把这些搞懂,OD门就不再是只能照着参考电路接的“黑盒”。

5. 实际调试中踩过的坑与排查技巧

5.1 OD门输出接MOS管驱动负载,为什么低电平关不掉?

有个朋友做过一个用OD门驱动PMOS做电源开关的电路。设计思路是OD门输出低电平时,PMOS导通,给负载供电;OD门高电平时,PMOS截止。听起来没问题,但实际测试发现,无论OD门输出什么,PMOS都一直导通。

我一看电路就发现问题了:OD门输出端只接了下拉到地的NMOS,输出高电平状态其实是“高阻”。如果没有上拉电阻,输出端就悬浮着,PMOS的栅极电压不确定,可能是0,也可能是VDD,完全没有办法保证PMOS截止。后来我在OD门输出端加了一个10kΩ上拉电阻到PMOS的源极电压,问题立刻解决。

这个坑的本质,是很多初学者把OD门当成普通推挽输出来理解,以为输出“高电平”是门电路内部拉上去的。实际上,开漏结构只有两个状态:低电平和开路。它不能主动输出高电平,需要外部电阻“代劳”。

5.2 三态门总线冲突:波形烂得像一锅粥

做多片SPI设备共享总线的项目,示波器抓MISO线,发现波形有时出现台阶、毛刺,甚至烧了IO引脚。逐个检查发现,两个从设备的片选信号CS1和CS2在某个时刻同时为低,两个设备同时驱动MISO输出。一个输出0,一个输出1,相当于两个输出级直接对着干。

这种问题排查起来其实不太难:用逻辑分析仪同时抓CS1、CS2和MISO,一旦发现两个CS同时为低,就检查控制逻辑。我当时的问题是CPLD逻辑里片选的译码逻辑条件重叠,导致两个CS在地址切换瞬间同时有效了一个周期。修掉译码逻辑的交叠后,总线冲突彻底消失。

另一个心得是:三态门在切换高阻和有效输出之间的时候,存在“先导通后断开”或“先断开后导通”的时序窗口。为了安全,总线设计通常要求“先断开后导通”,也就是先把原有设备置为高阻,再使能另一个设备。硬件设计上,片选信号的建立时间和保持时间必须按照器件手册要求来,这些时序参数就是用来防止总线冲突的。

5.3 传输门电路导致信号“衰减”的错觉

用传输门做模拟开关时,有人会抱怨“传输门传过去的电压始终到不了电源电压”。排除掉NMOS弱上拉的问题,还有一个容易被忽略的原因:传输门导通电阻和负载电阻构成分压。

举个例子,一个模拟开关导通电阻是100Ω,后级负载是10kΩ,损耗0.1V还能接受;但如果后级负载是低阻抗的,比如50Ω,导通电阻上就会分掉很大一部分电压。所以在要求较高的场合,要么选择导通电阻特别低的传输门,要么在开关后面加缓冲器。

还有一个高频应用的问题:传输门并联造成的寄生电容,会在高频时形成额外的信号串扰路径。开关断开后,控制端的高频信号可能通过电容耦合到信号通路,导致“开关已关断,但信号仍能穿过来”。这在高阻抗信号链里特别明显。解决方法是尽量减少开关节点上的走线长度,或者在信号通路两侧加保护地。

5.4 一张表快速理清各门电路的关键差异

门电路类型核心结构输出状态典型应用常见坑
非门(反相器)PMOS+NMOS共栅共漏高/低缓冲、整形、延时阈值设计不当导致噪声容限差
与非门PMOS并联、NMOS串联高/低通用组合逻辑、译码扇入大时下拉能力不足
或非门PMOS串联、NMOS并联高/低SR锁存器、清零逻辑PMOS串联导致上升沿慢
OD门单NMOS或单PMOS低/高阻(或高/高阻)I2C、电平转换、线与忘记上拉电阻导致高电平悬浮
传输门NMOS+PMOS并联双向导通/高阻模拟开关、MUX、采样保持控制信号竞争、导通电阻分压
三态门普通门+使能控制高/低/高阻总线驱动、GPIO输出总线冲突、高阻态浮空

这张表是我讲课和做项目时常用的速查表。每次布局布线前先过一遍,能避免大多数低级错误。做硬件调试时,先看输出状态是否符合预期,再用示波器确认电平是否收在噪声容限以内,最后检查时序边沿是否满足要求,一套流程走下来,90%的门电路问题都能定位。

6. 从门电路到工程思维的最后一段经验

前面把这些门电路拆开讲了一遍,电路结构、工作原理、参数计算、调试方法都覆盖到了。但我想强调一点:学CMOS门电路,最重要的是养成“用晶体管开关视角看数字电路”的思维方式。看到任何逻辑门,不要先背真值表,而是先看它上面并联还是串联、下面并联还是串联,然后把PMOS和NMOS的导通条件代进去,真值表自然就出来了。

我自己的习惯是,每拿到一个新器件,先把内部框图和数据手册里的等效电路图研究一遍,再对照真值表验证一遍自己的推导。这个过程看似多花了时间,但能让你对电路的理解深入几个层次,调试时遇到问题也能从原理层面定位,而不是靠试错碰运气。

如果你正卡在“能看懂逻辑关系,但不会分析电路为什么这么搭”的阶段,我的建议很简单:找几款常见芯片的数据手册,比如74HC系列、CD4000系列,把里面的每个门电路结构都亲手画一遍。画完三五个,你就能感觉到自己对CMOS门电路不再是背结论,而是真的懂了。数字电路的世界很大,但这些看似基础的门电路,恰恰是所有复杂逻辑芯片的一块块积木。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询