2026-02-15 01:57:52 +08:00
|
|
|
|
# 从晶体管到 CPU
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
::: tip 核心问题
|
2026-02-18 15:52:55 +08:00
|
|
|
|
**计算机是怎么"思考"的?** 你可能知道 CPU 是电脑的"大脑",但这个大脑到底是怎么工作的?它怎么从一堆金属和塑料变成能执行程序、处理数据的智能设备?本章带你从最底层的晶体管开始,一步步理解 CPU 的构造原理。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 0. 全景图:从沙子到智能
|
|
|
|
|
|
|
|
|
|
|
|
现代计算机的"思考"能力,归根结底来自于一个简单的东西:**开关**。
|
|
|
|
|
|
|
|
|
|
|
|
想象你有一个开关,可以控制灯的亮灭。现在,如果你有几十亿个这样的开关,并且能用它们组合出各种复杂的逻辑,会发生什么?这就是计算机的奥秘。
|
|
|
|
|
|
|
|
|
|
|
|
**从沙子到智能的层次结构:**
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
| 层级 | 名称 | 数量级 | 作用 | 类比 |
|
|
|
|
|
|
| ----- | -------- | ------ | ---------------------------- | -------- |
|
|
|
|
|
|
| **1** | 晶体管 | 数十亿 | 最基本的开关单元 | 一个开关 |
|
|
|
|
|
|
| **2** | 逻辑门 | 数亿 | 实现基本逻辑运算 | 开关组合 |
|
|
|
|
|
|
| **3** | 功能单元 | 数百 | 实现特定功能(加法、存储等) | 功能模块 |
|
|
|
|
|
|
| **4** | CPU 核心 | 1-128 | 完整的处理器 | 大脑 |
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
::: tip 逐行解读这张表
|
2026-02-18 15:52:55 +08:00
|
|
|
|
**第1层(晶体管)**:这是最底层的"开关"。现代 CPU 使用的是 MOSFET(金属氧化物半导体场效应晶体管),它的特点是:给栅极加电压,源极和漏极之间就导通;不加电压,就断开。这就是"用电控制电"的开关。
|
|
|
|
|
|
|
|
|
|
|
|
**第2层(逻辑门)**:把晶体管组合起来,就能实现"与"、"或"、"非"等逻辑运算。比如 AND 门:两个输入都为 1 时输出才为 1。这就像两个串联的开关,必须都按下灯才会亮。
|
|
|
|
|
|
|
|
|
|
|
|
**第3层(功能单元)**:把逻辑门组合起来,就能实现更复杂的功能。加法器能做加法,寄存器能存储数据,多路选择器能选择数据。这些是 CPU 的"器官"。
|
|
|
|
|
|
|
|
|
|
|
|
**第4层(CPU 核心)**:把功能单元组合起来,加上控制器、总线等,就形成了一个完整的 CPU 核心。它能取指令、解码、执行、写回结果——这就是"计算"的全部过程。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 晶体管:数字世界的开关
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<TransistorDemo />
|
|
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
### 1.1 什么是晶体管?
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
::: tip 晶体管是什么?
|
2026-02-18 15:52:55 +08:00
|
|
|
|
**晶体管(Transistor)** 是一种半导体器件,它可以像开关一样控制电流的通断。
|
|
|
|
|
|
|
|
|
|
|
|
**生活类比**:想象一个水龙头:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- **水龙头**:你用手拧开关,控制水流
|
|
|
|
|
|
- **晶体管**:用电压控制开关,控制电流
|
|
|
|
|
|
|
|
|
|
|
|
关键区别是:晶体管不是用手拧,而是用"电"来控制。这意味着一个开关可以控制另一个开关,从而实现"自动控制"。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
**晶体管的三个极:**
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
| 极 | 名称 | 作用 | 类比 |
|
|
|
|
|
|
| ----------------- | -------- | -------------- | ---------- |
|
|
|
|
|
|
| **源极 (Source)** | 电流入口 | 电流从这里进入 | 水管入口 |
|
|
|
|
|
|
| **漏极 (Drain)** | 电流出口 | 电流从这里流出 | 水管出口 |
|
|
|
|
|
|
| **栅极 (Gate)** | 控制端 | 控制是否导通 | 水龙头开关 |
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
|
|
|
|
|
### 1.2 晶体管如何表示 0 和 1?
|
|
|
|
|
|
|
|
|
|
|
|
计算机只认识 0 和 1,这和晶体管有什么关系?
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
::: tip 用电压表示 0 和 1
|
2026-02-18 15:52:55 +08:00
|
|
|
|
**核心思想**:用电压的高低来表示 0 和 1。
|
|
|
|
|
|
|
|
|
|
|
|
- **高电压(如 3.3V)**:表示 1
|
|
|
|
|
|
- **低电压(如 0V)**:表示 0
|
|
|
|
|
|
|
|
|
|
|
|
这就像灯泡的亮和灭:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 灯亮 = 1
|
|
|
|
|
|
- 灯灭 = 0
|
|
|
|
|
|
|
|
|
|
|
|
晶体管的作用就是"控制灯泡的亮灭"——给栅极加高电压,源极和漏极导通,"灯泡"亮了(输出 1);给栅极低电压,源极和漏极断开,"灯泡"灭了(输出 0)。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3 从一个开关到几十亿
|
|
|
|
|
|
|
|
|
|
|
|
你可能好奇:一个开关能做什么?答案是:一个开关做不了什么,但几十亿个开关组合起来,就能做任何计算。
|
|
|
|
|
|
|
|
|
|
|
|
**现代 CPU 的晶体管数量:**
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
| 年份 | CPU | 晶体管数量 | 制程工艺 |
|
|
|
|
|
|
| ---- | ------------- | ---------- | -------- |
|
|
|
|
|
|
| 1971 | Intel 4004 | 2,300 | 10μm |
|
|
|
|
|
|
| 1993 | Intel Pentium | 310万 | 0.8μm |
|
|
|
|
|
|
| 2006 | Intel Core 2 | 2.91亿 | 65nm |
|
|
|
|
|
|
| 2020 | Apple M1 | 160亿 | 5nm |
|
|
|
|
|
|
| 2023 | Apple M3 Max | 920亿 | 3nm |
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
::: tip 什么是制程工艺?
|
2026-02-18 15:52:55 +08:00
|
|
|
|
**制程工艺**(如 5nm、3nm)指的是晶体管的尺寸。数字越小,晶体管越小,同样面积能容纳的晶体管越多。
|
|
|
|
|
|
|
|
|
|
|
|
- **5nm**:大约是 50 个原子的宽度
|
|
|
|
|
|
- **3nm**:大约是 30 个原子的宽度
|
|
|
|
|
|
|
|
|
|
|
|
制程越小,CPU 性能越强、功耗越低。但制造难度也指数级增加。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 逻辑门:用开关做运算
|
|
|
|
|
|
|
|
|
|
|
|
### 2.1 从晶体管到逻辑门
|
|
|
|
|
|
|
|
|
|
|
|
一个晶体管只是一个开关,但把多个晶体管组合起来,就能实现"逻辑运算"。
|
|
|
|
|
|
|
|
|
|
|
|
<LogicGateDemo />
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 基本逻辑门详解
|
|
|
|
|
|
|
|
|
|
|
|
**AND 门(与门)**:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- **规则**:两个输入都为 1,输出才为 1
|
|
|
|
|
|
- **生活类比**:串联的两个开关,必须都按下灯才亮
|
|
|
|
|
|
- **应用**:判断"多个条件是否同时满足"
|
|
|
|
|
|
|
|
|
|
|
|
**OR 门(或门)**:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- **规则**:任一个输入为 1,输出就为 1
|
|
|
|
|
|
- **生活类比**:并联的两个开关,按任意一个灯就亮
|
|
|
|
|
|
- **应用**:判断"是否满足任一条件"
|
|
|
|
|
|
|
|
|
|
|
|
**NOT 门(非门)**:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- **规则**:输入和输出相反
|
|
|
|
|
|
- **生活类比**:反相器,开变关、关变开
|
|
|
|
|
|
- **应用**:取反操作
|
|
|
|
|
|
|
|
|
|
|
|
**XOR 门(异或门)**:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- **规则**:两个输入不同时输出 1
|
|
|
|
|
|
- **生活类比**:判断"两个值是否不同"
|
|
|
|
|
|
- **应用**:比较、加法运算
|
|
|
|
|
|
|
|
|
|
|
|
### 2.3 用逻辑门做加法
|
|
|
|
|
|
|
|
|
|
|
|
<AdderDemo />
|
|
|
|
|
|
|
|
|
|
|
|
::: tip 💡 加法器是怎么工作的?
|
|
|
|
|
|
**半加器**:处理两个 1 位二进制数相加
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 输入:A、B(各 1 位)
|
|
|
|
|
|
- 输出:和(S)、进位(C)
|
|
|
|
|
|
- 公式:S = A XOR B,C = A AND B
|
|
|
|
|
|
|
|
|
|
|
|
**全加器**:处理两个 1 位二进制数相加,加上上一位的进位
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 输入:A、B、Cin(进位输入)
|
|
|
|
|
|
- 输出:和(S)、Cout(进位输出)
|
|
|
|
|
|
|
|
|
|
|
|
**多位加法器**:把多个全加器级联起来
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 第 1 位加法器的进位输出,连接到第 2 位加法器的进位输入
|
|
|
|
|
|
- 就像我们手算加法时"逢二进一"
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 功能单元:逻辑门的组合
|
|
|
|
|
|
|
|
|
|
|
|
### 3.1 常见功能单元
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
| 单元 | 功能 | 组成 | 类比 |
|
|
|
|
|
|
| -------------- | -------- | ---------------- | ---------------- |
|
|
|
|
|
|
| **加法器** | 做加法 | 多个全加器级联 | 计算器的加法功能 |
|
|
|
|
|
|
| **多路选择器** | 选择数据 | AND 门 + OR 门 | 多选一开关 |
|
|
|
|
|
|
| **译码器** | 解码指令 | 多个 AND 门 | 翻译器 |
|
|
|
|
|
|
| **寄存器** | 存储数据 | 触发器(锁存器) | 临时笔记本 |
|
|
|
|
|
|
| **计数器** | 计数 | 触发器级联 | 计分牌 |
|
|
|
|
|
|
|
|
|
|
|
|
<RegisterDemo />
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
|
|
|
|
|
### 3.2 寄存器:存储 1 位数据
|
|
|
|
|
|
|
|
|
|
|
|
::: tip 💡 寄存器是怎么存储数据的?
|
|
|
|
|
|
寄存器使用**触发器**电路来存储数据。触发器的特点是:一旦设置了状态,就能保持住,直到下一次改变。
|
|
|
|
|
|
|
|
|
|
|
|
**生活类比**:想象一个跷跷板:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 推一下左边,左边就沉下去,右边翘起来
|
|
|
|
|
|
- 即使你松手,跷跷板也会保持这个状态
|
|
|
|
|
|
- 只有再推一下,才会改变状态
|
|
|
|
|
|
|
|
|
|
|
|
触发器就是这样的"电子跷跷板",能"记住"上一次被设置的状态。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 4. CPU 架构:从功能单元到处理器
|
|
|
|
|
|
|
|
|
|
|
|
### 4.1 CPU 的核心组件
|
|
|
|
|
|
|
|
|
|
|
|
<CpuArchitectureDemo />
|
|
|
|
|
|
|
|
|
|
|
|
### 4.2 CPU 是如何执行指令的?
|
|
|
|
|
|
|
|
|
|
|
|
CPU 执行一条指令,需要经过四个阶段:
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
| 阶段 | 名称 | 做什么 | 类比 |
|
|
|
|
|
|
| ----- | ----------------- | ---------------- | ------------------ |
|
|
|
|
|
|
| **1** | 取指 (Fetch) | 从内存读取指令 | 从书架上取书 |
|
|
|
|
|
|
| **2** | 解码 (Decode) | 分析指令要做什么 | 阅读书的内容 |
|
|
|
|
|
|
| **3** | 执行 (Execute) | 执行运算 | 按书中的指示行动 |
|
2026-02-18 15:52:55 +08:00
|
|
|
|
| **4** | 写回 (Write Back) | 把结果存回寄存器 | 把结果记在笔记本上 |
|
|
|
|
|
|
|
|
|
|
|
|
::: tip 💡 指令周期
|
|
|
|
|
|
这四个阶段组成一个**指令周期**。CPU 不断重复这个周期,一条一条执行指令,就实现了"计算"。
|
|
|
|
|
|
|
|
|
|
|
|
现代 CPU 使用**流水线技术**,让多个指令的不同阶段并行执行:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 第 1 条指令在执行时
|
|
|
|
|
|
- 第 2 条指令在解码
|
|
|
|
|
|
- 第 3 条指令在取指
|
|
|
|
|
|
|
|
|
|
|
|
这就像工厂流水线,大大提高了效率。
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
### 4.3 CPU 性能的关键指标
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
| 指标 | 含义 | 影响 | 典型值 |
|
|
|
|
|
|
| ---------- | ---------------------- | ---------------------- | -------- |
|
|
|
|
|
|
| **主频** | 每秒执行多少个时钟周期 | 主频越高,执行越快 | 3-5 GHz |
|
|
|
|
|
|
| **核心数** | 独立的处理器数量 | 核心越多,并行能力越强 | 4-64 核 |
|
|
|
|
|
|
| **缓存** | CPU 内部的高速存储 | 缓存越大,访问内存越少 | 8-64 MB |
|
|
|
|
|
|
| **指令集** | CPU 能理解的指令集合 | 决定兼容性和功能 | x86、ARM |
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 总结:从沙子到智能
|
|
|
|
|
|
|
|
|
|
|
|
让我们回顾一下从晶体管到 CPU 的完整路径:
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<EvolutionFlowDemo />
|
|
|
|
|
|
|
|
|
|
|
|
::: tip 核心启示
|
2026-02-18 15:52:55 +08:00
|
|
|
|
**计算机的本质是"开关的组合"**。
|
|
|
|
|
|
|
|
|
|
|
|
- 一个开关做不了什么
|
|
|
|
|
|
- 但几十亿个开关,按特定方式组合,就能执行任何计算
|
|
|
|
|
|
- 这就是"量变引起质变"的最好例证
|
|
|
|
|
|
|
|
|
|
|
|
理解这一点,你就会明白:
|
2026-02-21 10:04:47 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
- 为什么计算机只认识 0 和 1
|
|
|
|
|
|
- 为什么编程语言最终都要翻译成机器码
|
|
|
|
|
|
- 为什么算法效率如此重要(因为每一步操作都需要大量晶体管参与)
|
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 延伸阅读
|
|
|
|
|
|
|
|
|
|
|
|
- **计算机组成原理**:深入了解 CPU、内存、I/O 的工作原理
|
|
|
|
|
|
- **数字电路**:学习逻辑门、触发器、时序电路的设计
|
|
|
|
|
|
- **计算机体系结构**:研究 CPU 的性能优化、流水线、缓存等
|
|
|
|
|
|
- **汇编语言**:直接和 CPU 对话,理解指令执行过程
|