← TIL
2026-07-19

从硅沙到逻辑门:重拾我的晶体管与逻辑门物理直觉

作为一个写了多年业务代码和分布式系统的程序员,我一直习惯将底层硬件视为一个黑盒。CPU 就像是一个只听得懂 0 和 1、以超高主频疯狂吞吐指令的无情机器。但每当优化遇到瓶颈,或者看到那些底层的汇编指令时,我总觉得心里缺了点什么——那几十亿个微小的晶体管,究竟是如何仅仅通过通电和断电,就拼凑出如此庞大而复杂的数字帝国的?

带着这种好奇,最近我与我的 AI 结对伙伴 Antigravity 从零开始共同设计了这套《Chip Design from the Bottom Up》课程,并决定尝试从最底层的物理原理出发,合作手造一个 CPU。今天把我们一起推敲出来的第一模块 Physics & Gates(物理与逻辑门) 的心得,以及合作写出来的这几个交互式模拟器整理记录下来。


1. 掺杂硅片(Silicon & Doping):制造移动的“载流子”

在最底层的物理尺度上,芯片是由硅(Silicon)制成的。纯净的单晶硅中,每个硅原子有 4 个价电子,与相邻的 4 个硅原子共享,形成极其稳定的共价键结构。因为所有的价电子都被锁死在共价键里,纯硅在室温下的导电性极差。

为了让硅导电,我们需要通过掺杂(Doping)强行打破这种平衡。根据掺入杂质的不同,我们可以制造出两种材料:

  • N型半导体(Negative):掺入有 5 个价电子的元素(如磷 P)。其中 4 个价电子形成共价键,多出来的第 5 个电子就会变成自由移动的负电荷载流子(自由电子)
  • P型半导体(Positive):掺入只有 3 个价电子的元素(如硼 B)。由于缺少电子,在共价键中会留下一个空位,即空穴(Hole)
💡 软件工程师视角
把纯硅晶格想象成一个刚好填满的定长数组。 N型掺杂就像是往数组里塞入了一个多余的指针(自由电子),它无法在固定槽位安家,因而可以在内存空间中漂移; P型掺杂则是故意删掉一个元素留下一个空槽(空穴)。当其他元素移动来填补这个空槽时,空槽本身就在向相反方向移动。

扫清的第一个直觉迷雾:空穴真的能移动吗?

以前我一直觉得“空穴移动”是个反直觉的伪概念,明明空穴什么都不是,怎么能动呢?其实物理上移动的依然是相邻共价键上的电子——电子为了填补空缺而跳跃,但在宏观上,这个“空槽”在向相反的方向不断漂移。将空穴视为一种带正电的“虚拟粒子”,能够极大地简化后续我们对电路电场的定性分析。

硅晶格掺杂与载流子漂移模拟器
电场方向 E (正极 + ──► 负极 -) + -

提示:开启外加电场后,可以观察带负电的电子向正极(左)漂移,而带正电的空穴向负极(右)漂移的过程。

2. 晶体管即开关(MOSFETs):电场的双重协奏

让掺杂半导体真正发挥魔力的是MOSFET(金属-氧化物-半导体场效应晶体管),它是现代集成电路最基础的电压控制开关。

一个 MOSFET 拥有三个极:源极 (Source)漏极 (Drain)栅极 (Gate)。根据工作机制,它分为两种基本类型:

  • NMOS:建立在 P 型衬底上,源极和漏极是两个分离的 N 型区。当栅极电压为 HIGH (1) 时,垂直电场将衬底中的电子吸附到表面,在源漏之间形成一条电子通道(沟道),开关导通。
  • PMOS:建立在 N 型衬底上,源极和漏极是两个分离的 P 型区。当栅极电压为 LOW (0) 时,衬底表面的空穴聚集形成空穴沟道,开关导通。

物理细节探究一:双重电场机制 (Dual-Field Mechanism)

要想晶体管工作,实际上有两个电场在协同起作用:

  1. 纵向栅极电场:负责“建路”。在栅极和衬底之间形成。例如在 NMOS 中,栅极加正高压吸引负电子向上贴紧二氧化硅绝缘层,从而在 P 型衬底表面反型出一层极薄的 N 型沟道。
  2. 横向源漏电场:负责“通车”。在源极和漏极之间形成电压差,驱动沟道内的载流子沿着管道定向漂移。

物理细节探究二:PN结的“表面抹平” (Junction Penetration)

在学习时,我产生过一个疑问:源漏两端的 N+ 区和衬底的 P 区之间明明天然存在反向偏置的 PN 结(耗尽层屏障),电子是怎么从源极跑去漏极的?

仔细研读了器件物理才明白:栅极极板在物理制造上会微微重叠(overlap)源极和漏极的边缘。当栅极高电平激活时,纵向电场直接将这部分重叠区域下方的衬底表面强行电反型为 N 型。由于这层超薄的表面沟道与源漏区的 N+ 掺杂性质完全一致,表面的 PN 结壁垒直接被“抹平”消除了。电子得以在表面畅通无阻,从而绕过了衬底深处的反向结屏障。

MOSFET 场效应管静态电场与载流子漂移模拟
p-type Substrate (Holes) n+ Source (源) n+ Drain (漏) Oxide Layer (SiO₂) Gate (栅) Vs = 0V (GND) Vg = 0V (LOW) Vd = 5V (VDD)

3. CMOS 互补之美与 NAND 万物起源(CMOS & NAND Logic)

早期的芯片为了省事只使用单一类型的晶体管(如纯 NMOS)搭配被动的上拉电阻。但这种电路在输出低电平时,上拉电阻会一直有电流直通 Ground,静止状态下会疯狂白白烧电。为了解决这个致命缺点,集成电路进入了 CMOS(互补型金属氧化物半导体)时代。

CMOS 的核心逻辑极其优雅:上拉网络(Pull-up network)全部使用 PMOS 晶体管将输出连接至 VDD(电源);下拉网络(Pull-down network)全部使用 NMOS 晶体管将输出连接至 GND(地)。

因为 PMOS 和 NMOS 在相反的栅极电平信号下导通,所以在任何时刻,这两个网络中必定有一个断开,另一个接通。VDD 到 GND 之间永远不会存在直通路径。这就保证了 CMOS 电路在静止状态下几乎零功耗,只有在状态翻转、充电放电的一瞬间才会产生动态功耗。这也是现代芯片能塞入几十亿晶体管而不被瞬间烧毁的基础。

为什么 NAND 是真正的 Universal Gate(万能逻辑门)?

我们在软件课上学逻辑,最先接触的是 AND(与)和 OR(或)。但到了晶体管物理层面,AND/OR 反而是奢侈品。

由于 CMOS 电路输出端通常在上下拉网络交接处,它天生是反相的:一个 NAND(与非门)或者 NOR(或非门)只需要 4 个晶体管。如果你非要做一个 AND 门,你必须先用 4 个晶体管做出 NAND 门,然后再屁股后面接一个由 2 个晶体管组成的 NOT 反相器,总共需要 6 个晶体管!

多两个晶体管意味着多 50% 的面积和功耗。因此,在物理硬件的构建中,NAND/NOR 才是真正的一等公民和万物基石。通过把 NAND 门交错组合,我们可以低成本地搭出任何逻辑门,乃至于构建出完整的中央处理器。

CMOS 逻辑门级晶体管级电路图交互模拟

提示:点击左侧按钮切换逻辑门,点击右上角或图中的圆形节点 A/B 可以改变输入值,绿线代表高电平 (1),红线代表低电平 (0)。

4. Lab 1 实践:仅使用 NAND 组装万物

理解了理论后,Lab 1 要求我们做一件很硬核的事:除了一个基本的 nand(a, b) 原语,禁用所有 Python 自带的逻辑操作符(如 and, or, not, ^),手造出 NOT、AND、OR、XOR 门以及 2选1 多路复用器(MUX)。

这里面蕴含的逻辑证明推导非常有意思:

1. NOT 门:信号自我复制

NOT 门最简单,把 NAND 门的两个输入端绑定即可。当输入为 A 时,nand(A, A) 即相当于 NOT (A AND A) = NOT A

def not_gate(a):
    return nand(a, a)

2. AND 门:双重否定即肯定

NAND 是“与非”,那么把 NAND 的输出再取反,不就是 AND 了吗?

def and_gate(a, b):
    n = nand(a, b)
    return nand(n, n)  # 相当于 not_gate(nand(a, b))

3. OR 门:德·摩根定律(De Morgan's Laws)

如何用“与”逻辑拼出“或”?根据德·摩根定律:A OR B = NOT (NOT A AND NOT B)。利用 NAND 代替外层的 NOT AND 关系,直接得到 OR(A, B) = NAND(NOT A, NOT B)

def or_gate(a, b):
    not_a = nand(a, a)
    not_b = nand(b, b)
    return nand(not_a, not_b)

4. XOR 门:守卫与过滤器架构(Watchdog & Filters)

异或门(XOR)稍微复杂一些,它要求输入不同才输出 1。最经典的实现仅需 4 个 NAND 门。我们可以将其拆解为一个极具物理直觉的“两级过滤”架构:

  • Gate 1(守卫/Watchdog): 计算 N1 = NAND(A, B)。它的作用是防守:当且仅当 A 和 B 同时为 1 时输出 0(报警)。
  • Gate 2 & 3(过滤器/Filters): 分别计算 N2 = NAND(A, N1)N3 = NAND(B, N1)。如果守卫报警输出为 0,这两个过滤器会被强行关停(都输出 1)。否则,它们起到“信号筛选”作用。
  • Gate 4(裁决者/Decision Maker): 计算 NAND(N2, N3)。它决定了最终的异或输出。
def xor_gate(a, b):
    n1 = nand(a, b)      # 守卫检测
    n2 = nand(a, n1)     # 过滤器 A
    n3 = nand(b, n1)     # 过滤器 B
    return nand(n2, n3)  # 最终裁决

5. MUX 门:2选1选择器

多路复用器(MUX)通过一个选择信号 Sel 来路由数据:如果 Sel=0,输出 A;如果 Sel=1,输出 B。逻辑表达式为 (A AND NOT Sel) OR (B AND Sel)

再次利用德·摩根定律双重否定展开,化简为 NAND 门的嵌套形式:

def mux(a, b, sel):
    not_sel = nand(sel, sel)
    n1 = nand(a, not_sel)  # 通道 A 选通
    n2 = nand(b, sel)      # 通道 B 选通
    return nand(n1, n2)    # 混合汇总

在本地终端运行 python3 labs/lab1_nand_logic.py,随着五个单元测试全部亮起绿色 ✅ PASSED,再到最后的 🎉 Congratulations! All Lab 1 logic gates passed successfully!,那种亲手用最小的沙粒垒起高楼的快乐,是调库调包绝对无法给予的。

结语

从纯净无瑕的硅原子,到通过掺杂引入自由电子和空穴,再到通过电场控制结壁垒消除形成导电沟道——晶体管这种微小的物理开关,本质上是在用量子和电磁规律控制电流的形态。而当我们将 PMOS 与 NMOS 互补地编在一起,就建立起了一个不会空转漏电的稳定逻辑世界。在这个世界上,仅仅靠着一扇简单的“与非门”,就能衍生出繁衍出万物的逻辑算术体系。

第一模块虽然基础,但帮我彻底打破了晶体管黑盒,重塑了物理直觉。下一模块将进入 Arithmetic & ALUs,开始研究如何用这些纯物理逻辑门去搭出半加器、全加器,以及 CPU 的计算大脑——算术逻辑单元(ALU)。

期待下一次在逻辑层上的相遇!