☰
从三体人列计算机到CMOS电路:计算本质的跨越
2026/10/7 21:47:40 网站建设 项目流程

我一个做嵌入式的老同学,最近聊起《三体》里的“人列计算机”——就是秦始皇指挥三千万士兵举旗子当逻辑门,用旗语算题那段。他说这段虽然震撼,但总感觉不太真实,问我这玩意儿到底能不能算?算得有多快?跟我们现在用的芯片又有什么关系?这一下把我问住了,我连夜翻书、查资料、还顺手把LTSpice里的CMOS反相器仿真重新跑了一遍。写完这篇稿子,算是把“从人列计算机到CMOS电路”这条线彻底捋清楚了。这期就好好聊聊:科幻里的人列计算机是怎么用最原始的方式实现“计算”的,以及它的原理如何一步步映射到今天半导体工艺最核心的CMOS电路上。

这个内容特别适合两类人:一类是读《三体》读得热血沸腾、想知道里面科学技术到底靠不靠谱的科幻迷;另一类是刚开始接触数字电路、学CMOS逻辑门和版图,总觉得脑子里缺一张“物理图景”的电子工程师或在校生。看完你会明白,所谓计算,说到底就是“规则化的开关”,而三体人的举旗子和芯片里的MOS管,本质上是同一件事。

1. 人列计算机的计算原理剖析

1.1 三千万士兵如何组成一台计算机

《三体》第一部里,冯·诺依曼在秦朝大殿上给秦始皇画的“人列计算机”图纸,是一个金字塔形的结构。底层是密密麻麻的士兵,一层一层往上,信号靠旗语(或者像书中描述的那样,靠士兵举旗、放旗)逐级传递。每个士兵不是一个“算数的人”,而是一个逻辑门:他接收到左右两旁传过来的信号,根据预设的规则(比如“两个旗子都举起来我才举旗”),再决定自己举不举旗。这个规则,就是逻辑运算中的“与门”或者“或门”。

关键的设计思路在于:士兵并不知道自己在算什么,他只需要遵守极其简单的本地规则,但无数个本地规则叠加起来,就构成了全局的计算能力。这不只是科幻,这正是现代计算机的核心组织原则:用大量低智能的基本单元,通过局部互联,涌现出全局智能。一个CPU芯片里有上百亿个晶体管,每个晶体管做的事情比一个士兵简单得多——它只是一个受电压控制的开关。但一百亿个开关按规则连在一起,就能跑操作系统、跑神经网络、跑原子弹仿真。

秦始皇的三千万人列计算机采用的是二进制,用旗子举起来表示“1”,放下表示“0”(书中还有用白旗、黑旗区分的设定,具体颜色其实不重要,关键是两种可区分的状态)。这套体系和现代数字电路完全一致:高电平代表“1”,低电平代表“0”。没有第三种状态,因为物理实现越简单越可靠。

冯·诺依曼给秦始皇画的架构里,把人分成了几个功能块:一部分人当“运算器”,一部分人当“存储器”,一部分人负责“控制器”,还有信号在中间源源不断传递。这就是后来著名的冯·诺依曼架构——计算、存储、控制分离,通过总线互联。今天你电脑里的CPU加内存加主板芯片组,还是这个架构。三千年没变过。

人列计算机的运算速度,原作里有一个估算:每秒钟大概能执行十几次操作。为什么这么慢?因为信号要从金字塔底层逐级传到顶层,每传一级需要士兵反应一下,这个延迟是不可压缩的。相比之下,现代CPU的主频是几十亿赫兹。差距在哪里?不是逻辑原理,而是开关速度。士兵举起一面旗子需要零点几秒,晶体管翻转只需要几十皮秒,相差十几个数量级。原理相同,物理载体不同,性能天上地下。

1.2 十进制逻辑门与冯·诺依曼结构的映射关系

有人可能好奇:三体人用的是十进制(三体文明有十根手指的设定还蛮贴合地球人),为什么人列计算机偏偏要改成二进制?其实在真实历史中,早期计算机也走过十进制的弯路,比如ENIAC就是十进制电子管计算机,用了上万个电子管,运算逻辑极难设计,布线像迷宫。后来冯·诺依曼在EDVAC方案里果断改成二进制,核心原因就是从物理实现上,二进制只需要区分“通”与“断”,不要求精确分辨十种不同电压或电流状态。

《三体》里冯·诺依曼给秦始皇画的方案同样选二进制,分寸感拿捏得很准。三千万士兵在操场上列队,如果要求他们精确传递十种信号(比如举旗高度分成十档),且不说人眼能不能分辨,光是“信号衰减”就足以让整个系统崩溃——远处士兵看一眼近处士兵举到“7分高度”,他很难判断这是“7”还是“8”,错误会逐级放大。而二进制只要判断“举了”还是“没举”,容错能力高得多。这实际上就是数字电路极重要的“噪声容限”问题:现代芯片用一个阈值电压来判断高低电平,只要干扰不越过阈值,信号就不会出错。三体人用人眼当阈值检测器,现代芯片用晶体管当阈值检测器,都是同一套逻辑。

冯·诺依曼结构映射到现代CMOS电路,可以按照下面这张表来对照:

人列计算机组件功能说明现代CMOS对应物
举旗士兵(单个逻辑门)执行与/或/非运算CMOS门电路(NAND/NOR/INV)
旗语信号线在单元之间传递数据金属互连线(Metal Interconnect)
负责存储的方阵暂存中间数据锁存器、静态随机存取存储器(SRAM)单元
旗语广播与时钟节拍同步协调全局动作时钟树(Clock Tree),全局时钟分配网络
秦始皇的“指令”调度控制逻辑控制单元(Control Unit)、状态机

这张表建议你收藏。理解人列计算机之后,再学CMOS,完全是降维打击——你早就知道“逻辑门是谁、信号走哪条路、存储在哪里”,只是把“士兵”换成“晶体管”,“旗语”换成“电压”,“操场”换成“硅片”而已。

2. 从人列计算机到CMOS:那些“开关”如何从人变成了晶体管

2.1 为什么计算最终选择了MOSFET

士兵举旗虽然能实现逻辑,但有一个致命的物理瓶颈:人太重、太慢、太费粮食。一台人列计算机需要三千万人,一天的口粮是个天文数字,而且士兵会疲惫、传错口令、生病。这就是“计算载体”的可靠性问题。真实计算机的发展史,本质上就是寻找更快、更小、更可靠、更省电的“开关”的历史。

第一代计算机用继电器——靠电磁铁吸合触点的机械开关,一秒钟能开关几十次,但触点会磨损、火花会烧蚀,而且体积大得吓人。第二代换电子管,开关速度提升到微秒级别,但功耗极高,发热量让机房像烤箱,还动不动就烧坏。ENIAC有近一万八千只电子管,平均每几天就有一只失效。第三代是晶体管,它没有机械运动部件、没有灯丝加热、寿命长、功耗低、体积小,是电子设备里第一个真正可靠、快速、可大规模集成的电子开关。

为什么最终是金属氧化物半导体场效应晶体管(MOSFET)而不是双极型晶体管(BJT)一统天下?一个重要原因是MOSFET是电压控制型器件:栅极电压决定源漏之间能不能导通,栅极几乎不取电流。这带来的好处是:当一个MOS管的输出接到下一级的栅极时,它只需要“提供电压”就能驱动后面,不需要提供大电流。这意味着可以把无数个管子直接级联而不用担心“上一级驱动能力不够”,也意味着电路静态功耗接近零。而BJT是电流控制型器件,基极需要持续注入电流,多级级联的功耗会大得多。打个比方,MOSFET就像一个只需要“下命令”的军官,而BJT像必须“亲自动手推”的苦力。大规模集成只有选前者。

人列计算机的归谬点在于,一个“逻辑门”占一个人的身体,舞台上永远不可能集成上亿人。而MOSFET的“栅极-源极-漏极”结构,把一个逻辑门压缩到微米甚至纳米尺度,在一块指甲盖大小的芯片上放置数百亿个开关。尺度决定了计算力的量级,这是半导体工艺几十年来不断追求特征尺寸缩小的底层驱动力。

2.2 CMOS反相器:计算世界的基本单元

在所有CMOS电路里,最基础的门电路就是反相器(Inverter),它把输入的“0”变成“1”,把“1”变成“0”。反相器由两个互补的晶体管组成:一个PMOS(P型金属氧化物半导体)管放在上面,连接电源;一个NMOS(N型金属氧化物半导体)管放在下面,连接地。

我见过太多新手一开始背电路图,却不知道背后物理原理。解释一下:PMOS管,当栅极电压为低(0)时导通,高(1)时关断;NMOS管恰好相反,栅极为高(1)时导通,低(0)时关断。这两个管子“你导通我关断、我导通你关断”,像两个以摔跤的对手交替按着对方,于是输出永远是输入的反相。这个“互补”结构,正是CMOS名字里“C”的由来:Complementary,互补。

反相器的输入接到两个管子的栅极。输入为高时,NMOS导通、PMOS关断,输出被下拉到地,输出低电平;输入为低时,NMOS关断、PMOS导通,输出被上拉到电源电压,输出高电平。关键是,在稳定的“0”态和“1”态,总有一个管子是关断的,因此电源到地之间没有直流通路,静态功耗几乎为零。这是CMOS区别于早期逻辑电路的巨大优势:只有翻转的一瞬间才消耗动态功耗,静静待着的时候几乎不耗电。这也是为什么CMOS技术从20世纪80年代起全面碾压TTL(晶体管-晶体管逻辑),成为数字芯片的绝对主流。

从反相器往上一层,两个反相器串联起来加两个传输门,就能组成D触发器(D Flip-Flop)的一个基本存储环节。还记得《三体》里那些“负责存储的方阵”吗?现代电路中的存储单元,就是由这样一对反相器组成的交叉耦合正反馈结构,把一个电平“锁住”。三体人用一排举着旗子的士兵锁住一个值,现代芯片用两个反相器锁住一个位。原理一模一样。

2.3 从逻辑门到触发器再到图像传感器:CMOS的广泛版图

CMOS字面上是工艺,实际应用却远远超出“逻辑芯片”。早期CMOS工艺只用来做数字逻辑,后来工程师发现,既然能在同一片硅上同时集成高精度模拟电路和复杂数字逻辑,那为什么不在同一颗芯片上把模拟信号感知、放大、数字化统统做完?这就催生了CMOS图像传感器(CIS,CMOS Image Sensor)的爆发。

CMOS图像传感器的核心是一个像素阵列,每个像素里有光电二极管把光转成电流,再靠几个MOS管做读出、增益切换和行选通。它把“感受光”和“处理数据”放在同一块芯片上,成本低、功耗小、集成度高,因此从手机摄像头到安防监控再到汽车自动驾驶视觉,全面取代了早期的CCD传感器。某无人机航拍机里的摄像头、你手机前置摄像头里的感光芯片,绝大多数都是CMOS工艺做的。

在嵌入式领域,CMOS技术同样无处不在。任何一颗MCU(微控制器)芯片的核心逻辑,都是CMOS门电路;很多MCU内部还集成了CMOS工艺的模拟外设、传感器前端、射频前端。理解CMOS反相器的原理,等于掌握了嵌入式系统“铁皮之下”的第一块基石。很多人写了几年代码,对GPIO引脚为什么能推挽输出、为什么上拉输入比下拉常见、为什么开漏输出需要外部上拉,全都一头雾水。其实这些行为都源自CMOS管的结构。

再说一个非常实际的连接点:逻辑门构成D触发器。在实际的时序电路设计中,D触发器是最重要的存储单元,没有之一。一个常见的正沿触发的D触发器,由两个反相锁存器主从级联(或者说两个“锁存器”背靠背),中间用传输门做时钟控制的“门闩”。CMOS工艺里传输门恰好就是由一个PMOS和一个NMOS并联组成的开关。这又回到“互补”两个字:一个管子负责通过强“1”,另一个负责通过强“0”,合起来才能无损传输任何电平。三体人用“士兵手臂挡不挡路”当开关,CMOS用“传输门”当开关,都是路由信号,只是尺度透明到看不见。

3. CMOS电路的核心实现:电路图、版图与截面图

3.1 怎么看懂一张CMOS反相器电路图

很多朋友学CMOS卡在电路图上。真不难。认清一个规律:PMOS向上指,NMOS向下指,这是画图约定。PMOS的源极接高电位(VDD),漏极接输出;NMOS的源极接低电位(GND),漏极也接输出。两个栅极连在一起就是输入。输出从两个漏极的公共节点引出。

反相器的电路图只有两个管子,但做集成电路时还涉及一个关键器件:阱(Well)。现实中CMOS工艺是在同一块P型硅衬底上做的,但PMOS需要一个N型的“游泳圈”区域把它隔离起来,这叫N阱;NMOS可以直接做在P衬底上。所以芯片物理结构上,“N阱里的PMOS”和“P衬底上的NMOS”是分开的。这就是为什么版图里能看到一大块N阱区域里放着PMOS。阱的存在是为了让每个晶体管有正确的偏置条件、避免衬底电流串扰,这直接关系到闩锁效应(Latch-up)风险,后面讲。

还有一个关键参数是宽长比(W/L,沟道宽度与沟道长度的比值)。NMOS的载流子(电子)迁移率高,同样的尺寸导通能力更强;PMOS的载流子(空穴)迁移率低,需要更大的宽度才能获得和NMOS一样的驱动电流。因此反相器里PMOS的宽度通常做成NMOS的两到三倍,叫“PMOS:NMOS = 2:1 ~ 3:1”。做版图的时候,这个比例直接决定了两个管子的物理面积。做数字标准单元库的人最熟悉这套。

选一个推导逻辑吧:设NMOS的宽长比为1,PMOS的宽长比设为2.5(或者3),这样反相器的上升时间和下降时间大致对称,输出波形的占空比才不会畸变。在LTSpice里做仿真,可以先从1:1开始,再改成3:1,对比输出波的上升沿下降沿,你会发现上升沿还是明显偏慢,因为PMOS天生驱动弱。这个模拟过程足够直观。

3.2 版图设计:把电路图“画”到硅片上

版图(Layout)是电路设计走向制造的桥梁。工程师要按设计规则(Design Rule)画出每一层掩膜的形状:有源区(Diffusion)、多晶硅栅(Poly)、金属互连(Metal)、接触孔(Contact/CT)、通孔(Via)。这些设计规则是由晶圆厂根据光刻、刻蚀、薄膜沉积的工艺能力制定的,违反规则轻则性能退化,重则芯片直接报废。

CMOS反相器的版图一眼看上去很简单:一条长条形P衬底区域里画一个NMOS,旁边的N阱里画一个PMOS,两者的栅极多晶硅连在一起,构成输入;两个漏极用金属线连到一起,构成输出。但“画对”和“画好”完全是两码事。版图里处处都通向“寄生效应”这个坑:线长了有电阻,线近了有电容,晶体管之间靠太近有闩锁风险,金属层覆盖太多有天线效应。做模拟版图的人天天在权衡面积、寄生、对称性,一个直接的对比是:

设计需求面积优先性能优先
晶体管距离尽量近,省面积拉远,减少耦合与干扰
金属布线层尽量用最小层数多用高层金属,低寄生
阱接触(TAP)能省则省必须密集打,防闩锁
电源地走线窄一点可以尽量宽,降IR压降

很多初学者一上来就追求“面积最小”,结果做出来的版图要么DRC过不了,要么流片后良率惨淡。我个人的经验是:先满足对称性、再做面积优化。尤其对于差分信号路径,两根线必须长得一样宽、一样长,否则时钟偏斜和噪声失配会让整个电路性能崩掉。

3.3 截面图:一颗芯片的“地质剖面”

如果说版图是俯视图,那截面图就是“地质剖面图”。做半导体的工程师几乎每周都要看截面图——无论是晶圆厂给的工艺文件,还是失效分析里的SEM(扫描电子显微镜)照片,都得通过截面图去理解每一层的高低次序和物理厚度。

一个CMOS反相器的典型截面结构,从下往上大致是:硅衬底(P型单晶硅)→ N阱(对PMOS来说)→ 有源区(源漏的掺杂区)→ 栅氧化层(极薄的二氧化硅,只有几纳米厚)→ 多晶硅栅极 → 层间介质(把晶体管埋起来)→ 钨接触钨插塞(把源漏和栅引到上面)→ 金属互连层(通常是铜或者铝,一层一层堆上去,层间有通孔连接)→ 钝化层(保护芯片表面)。

栅极下方的二氧化硅“栅氧化层”是MOS管最核心的地方。栅极加电压时,电场穿过绝缘层,在下面感应出导电沟道,源漏之间才能导通。这层氧化膜薄得惊人:今天的先进工艺只有1到2纳米,相当于几个原子的厚度。这也是为什么MOS管是“电压控制”的开关——不是靠电流直接控制,而是靠电场感应。理解了这个,你就明白为什么静态功耗可以趋近于零:栅极上几乎无电流,相当于只看电压不下电流。

衬底掺杂浓度、阱的深度、栅氧化层的厚度、阈值电压(Vth)的微调离子注入……这些参数每一个都是在晶圆厂经过大量实验调出来的。普通电路设计者通常不直接调这些参数,而是用晶圆厂提供的工艺库(PDK)里的模型做设计。但在LTSpice仿真里,我们可以手动输入一堆工艺参数,体验一把“造器件”的感觉。

4. 仿真验证:用LTSpice亲手搭一个CMOS反相器

4.1 在LTSpice中搭建CMOS反相器的完整步骤

LTSpice是ADI(亚德诺半导体)出品的一款免费SPICE仿真软件,界面不花哨,功能却非常扎实。想亲眼看到CMOS反相器的翻转特性,用它可以很快搞定。

第一步,打开LTSpice,放置一个NMOS(在元件库搜索“NMOS”或者选“nmos4”,代表四端NMOS管)和一个PMOS(pmos4)。四端管的衬底(Bulk,即B端)需要单独连接:NMOS的衬底接地,PMOS的衬底接VDD。如果不接,浮动衬底会导致仿真结果异常甚至不收敛。

第二步,设置器件模型。常用的方法是直接放一个“Model”命令,在原理图上打以下SPICE指令:

.model NMOS1 NMOS (VTO=0.5 KP=200e-6 LAMBDA=0.01) .model PMOS1 PMOS (VTO=-0.5 KP=80e-6 LAMBDA=0.02)

这里NMOS的阈值电压VTO设为0.5V,PMOS为-0.5V;KP是工艺跨导参数,电子迁移率高所以NMOS的KP比PMOS大一倍多。这两行模型已经足够模拟常见的CMOS行为了。沟道宽长比可以用W、L参数填:

  • NMOS的W=1u,L=100n(表示沟道长100纳米,宽1微米)
  • PMOS的W=3u,L=100n(为了匹配电流)

第三步,搭电路:VDD设为1.8V(典型数字芯片电压),输入接一个方波信号V1,PULSE(0 1.8 0 1n 1n 10n 20n),意思是0到1.8V跳变,上升下降时间1ns,高电平保持10ns,周期20ns。输出端加一个1pF的电容模拟负载。别忘了在输入端接一个50Ω或者干脆加一个很短的上升沿,否则SPICE的瞬态分析会很难收敛。

第四步,设置仿真命令。用瞬态分析(.tran 0 40n)看完整输出波形,再用直流扫描(.dc V1 0 1.8 0.01)看电压传输特性曲线。

4.2 波形解读:慢翻转、阈值点和动态功耗

仿真跑完之后,你会在波形窗口里看到两条线:输入方波(红色)和输出方波(绿色)。如果参数设置正确,输出刚好是输入的反相,而且会有一个可见的翻转延迟。管子越大、负载电容越大,延迟越长。这就是延时的来源:管子在给负载电容充电/放电,本质上是一道电流对电容的积分题。

看直流扫描曲线更有意思。横轴是输入电压从0扫到1.8V,纵轴是输出电压,你会得到一条“几”字形(或者S形)的传输特性曲线。关键在中间段:当输入电压处于中间值(0.6V到1.2V之间)时,输出发生陡峭的翻转。翻转点通常在VDD/2附近,这是反相器的阈值逻辑阈值。如果这个点偏移太多,说明PMOS和NMOS的驱动能力不匹配,直接后果是噪声容限不均等,上游一个很小的干扰都可能触发误翻转。实际上,这一段的斜率越陡越好,表示“开关”越像理想开关。而斜率不够陡,则说明管子沟道长度偏大或模型参数里的沟道长度调制效应过强。

动态功耗的估算公式也很直观:P = C × VDD² × f。负载电容1pF,电压1.8V,频率50MHz,算下来的功耗大约是162微瓦。这个数应该能让你感受到为什么移动SoC要拼命降电压和频率:功耗和电压平方成正比,电压从1.8V降到0.9V,动态功耗直接降到四分之一。这也是为什么今天先进芯片坚持把核心电压压得越来越低的原因。

4.3 由反相器到D触发器:时序逻辑的起步

很多人热词里挂着“CMOS逻辑门构成D触发器逻辑图”,但不知道手工搭到底怎么来。从一个反相器出发,再往前走一步:先做一个“传输门”。传输门就是并联一个NMOS和一个PMOS,两个栅极分别接时钟CLK和反相时钟CLKN。CLK为高时传输门导通,信号通过;CLK为低时,传输门关断,信号被切断。注意PMOS的栅极接反相时钟,这又回到“互补”上:要让两个管子同时导通或同时关断。

然后再做一个“反相锁存器”:把两个反相器首尾相连,形成正反馈。信号进去之后被牢牢“锁”住。接下来用两个反相锁存器主从级联加传输门,就构成一个标准D触发器。当CLK上升沿到来时,主锁存器采样输入,从锁存器保持输出;CLK下降沿时,主锁存器保持,从锁存器跟随主锁存器。这就是边沿触发。你在FPGA里写的“always @(posedge clk)”最终综合出来的硬件,底层就是这样一堆CMOS传输门和反相器。

建议你在LTSpice里完整搭一次D触发器,并用四个相位不同的输入信号仿真验证:时钟高电平时,输出不会变;只有上升沿那一瞬间,输出才更新为输入值。亲手跑通之后,你对“时序逻辑”这四个字的理解会彻底改变——不再是一个抽象概念,而是一堆实实在在的晶体管在按节奏开关。

5. 常见问题与排查技巧实录

5.1 仿真不收敛、波形异常这些坑怎么跳出来

做CMOS仿真,最常见的问题就是SPICE报“Timestep too small”(时间步长太小)然后拒绝收敛。这通常有三个原因:一是电源电压和模型阈值不匹配(比如VDD=1.8V但模型VTO写错,导致管子永远关断或永远导通);二是信号上升沿太陡或者太缓,SPICE无法精细跟踪;三是出现了浮空节点,比如某个管子的衬底没接好。排查顺序建议是:先检查所有B端是否接对,再看输入信号的上升/下降时间是不是合理,最后把模型参数逐行打印出来核对。

新手特别喜欢把VDD设得很大(比如5V)加上很窄的脉冲,结果电容充电还没完成脉冲就没了,输出波形看起来像“毛刺”。这不是电路坏了,是仿真设置不合理。用1.8V或者3.3V,脉冲周期拉开到管子负载时间常数的十倍以上,波形就漂亮了。

还有一个常见问题:瞬态仿真时,输出端不接任何电容,上升沿陡得像一根直线,于是一堆人问“我的反相器是不是没有延时不真实?”其实任何电路都有寄生电容,哪怕负载为空,MOS管的漏端本身也有结电容。建议在输出加一个0.5到2pF的固定负载电容,这是最接近真实场景的仿真方式。做版图之前评估延时,也基本靠这个思路。

5.2 版图里的闩锁效应与阱接触布置

版图设计里,新手最容易忽略的就是阱接触(TAP)和衬底接触的密度。CMOS工艺里,N阱里的PMOS周围要打N+接触接到VDD,P衬底里的NMOS周围要打P+接触接到GND。如果接触太少,阱和衬底之间的电位分布不均,四周的PN结可能意外正偏,形成寄生晶闸管结构,一旦触发电流就会持续导通,直到芯片烧毁。这就是著名的闩锁效应(Latch-up)。防止它的办法很粗暴:在版图里多打接触孔,每隔一段距离就放一排TAP。晶圆厂设计规则里不敢马虎,都会写清楚TAP的最大间距。

另外还有一个极易被忽略的细节:天线的方向一致性。对于要求配对精度高的模拟电路(比如电流镜、差分对、甚至某些高速时钟缓冲器),PMOS和NMOS的朝向要一致,所有管子的方向都朝一个方向画,否则注入时的应力方向不同,会导致阈值电压失配。做数字标准单元库的工程师管这叫“同向布局”,这句话背后是几十纳米级别的失配代价。别小看版图上的“方向感”,很多模拟芯片性能上不去,就是因为这块失了分。

5.3 嵌入式CMOS的实际使用建议

最后说一个嵌入式开发里最容易被忽略、又最基础的CMOS问题:GPIO的推挽输出和开漏输出到底怎么选?推挽输出内部就是一对大小匹配的PMOS和NMOS:输出高电平时PMOS导通上拉,输出低电平时NMOS导通下拉。它能快速驱动外部负载,适合驱动LED、蜂鸣器、数字信号线。但推挽不能做“线与”,两个引脚同时输出高和低会互相打架,烧管子。开漏输出则是只保留NMOS下拉,PMOS不接或者根本不存在,输出高电平必须靠外部上拉电阻。这样多个开漏引脚可以并联实现线与逻辑,比如I2C总线就是这样干的。

想直接体会到CMOS“互补”的含义,你去翻MCU数据手册里的GPIO结构图,会看到一个由PMOS和NMOS构成的输出级。PMOS管负责“拉高”,NMOS管负责“拉低”,这两者绝不允许同时导通,否则电源到地直接短路。数字设计里专门有“告别竞争冒险”这一课,讲的就是这个问题;而在很老的TTL电路里,因为输出级不是互补结构,上行和下行驱动能力天然不对等,开漏概念也完全不同。理解了CMOS,回头再看嵌入式外设的电气特性,基本就是融会贯通。

结语:从小说到芯片,计算的本源从未改变

算到底,《三体》里的人列计算机和咱们手机里的芯片,遵循的是完全相同的逻辑原理:用有限的状态表达信息,用简单的规则处理信息,然后把无数个简单规则组织起来,形成强大的计算能力。人列计算机输在了速度、体积和功耗上——三千万人规模的系统只能每秒执行十几次操作,而一块指甲盖大小的芯片能每秒执行上百亿次。物理载体不同,计算本质从未改变。

我把人列计算机和CMOS电路放在一起讲,其实是想说明一件事:学芯片设计不要怕那些密密麻麻的电路图和版图,它们本质上都是用“开关”和“连线的规则”搭积木。从秦始皇的操场到千亿晶体管的先进芯片,中间差的只是把“人”换成了“晶体管”,把“旗语”换成了“电压”,把“操场”换成了“硅片”。你能看懂三体人怎么变成计算机,就一定能在某个瞬间看懂CMOS电路。

如果你想进阶,我的建议是:找一份成熟工艺的PDK(工艺设计套件)文档翻一翻,看看里面给出的模型参数和版图规则,再对照LTSpice手动搭一个反相器,然后把W/L扫一遍,最后把D触发器完整搭出来。这个过程走完,你基本就算“入了半导体电路的门”。后面再学着把多个D触发器排成寄存器阵列、连成状态机,你会发现,硅片上的世界,其实跟三体人那个热闹的操场一样,各司其职,按规则运转。

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

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

立即咨询