從電晶體到 CPU
前言
電腦是怎麼「思考」的? 你可能知道 CPU 是電腦的「大腦」,但這個大腦到底是怎麼運作的?本章帶你從最基層的電晶體開始,一步步理解 CPU 的建構原理。
這篇文章會帶你學什麼?
學完這章後,你將獲得:
- 術語理解能力:聽到「CPU 主頻」、「多核」、「指令集」不再一頭霧水
- 程式碼執行視角:看到一行程式碼如何經過取指、解碼、執行、寫回
- 抽象層次思維:理解每一層如何向上層提供服務
- 後續學習基礎:為電腦體系結構、嵌入式開發打下基礎
| 章节 | 內容 | 核心概念 |
|---|---|---|
| 第 1 章 | 電晶體 | 數位世界的開關 |
| 第 2 章 | 邏輯閘 | 布林運算的物理實作 |
| 第 3 章 | 功能單元 | 加法器、暫存器、多工器 |
| 第 4 章 | CPU 核心 | 取指、解碼、執行、寫回 |
0. 全景圖:從沙子到智慧
在探索電腦底層的過程中,常常會遇到一個最根本的問題:現代電腦的「思考」能力,究竟從何而來?
答案是一個再簡單不過的物理抽象:開關。
想象你面前有一個控制燈泡的開關。按下燈亮,表示為「1」;斷開燈滅,表示為「0」。如果我們擁有幾十億個這樣的開關,並且能夠讓一個開關的輸出去控制另一個開關,從而組合無比複雜的邏輯網路,會發生什麼?
答案是一台能執行任意邏輯的通用運算平台。
逐層解構:從沙子到智慧
- 第一層:電晶體(數百億級) — 最底層的「開關」
- 第二層:邏輯閘(數十億級) — 電路變成了數學
- 第三層:功能單元(數百級) — 有特定用途的運算模組
- 第四層:CPU 核心(1-128核) — 整個微架構的指揮中心
1. 電晶體:數位世界的開關
Source
Drain
1.1 什麼是電晶體?
概念引入
電晶體(Transistor) 是一種改變了人類歷史的半導體元件。在數位電路的語境下,我們可以直接把它抽象為一個完美的「開關」。
電晶體其實就是一個奈米級的水龍頭:
- 源極 (Source) 和 汲極 (Drain) 就如同水管的兩端。
- 閘極 (Gate) 就是那個用來控制水流的閥門。
關鍵的區別在於:我們不是用手去擰開關,而是用電壓訊號。
1.2 電晶體如何表示 0 和 1?
- 我們把高電壓(比如 3.3V 或 1.0V) 定義為邏輯的 1(True)。
- 把低電壓(接近 0V) 定義為邏輯的 0(False)。
1.3 電晶體數量的演進
| 時代標誌 | 處理器晶片 | 電晶體數量 | 製程節點 |
|---|---|---|---|
| 1971 | Intel 4004 | 2,300 | 10微米 |
| 1993 | Intel Pentium | 310萬 | 800奈米 |
| 2006 | Intel Core 2 Duo | 2.91億 | 65奈米 |
| 2020 | Apple M1 | 160億 | 5奈米 |
| 2023 | Apple M3 Max | 920億 | 3奈米 |
2. 邏輯閘:用開關做運算
2.1 從電晶體到邏輯閘
A ∧ B| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
A ∨ B| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
¬A| A | Output |
|---|---|
| 0 | 1 |
| 1 | 0 |
A ⊕ B| A | B | Output |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
2.2 基本邏輯閘介紹
- AND 閘(與閘):只有當所有輸入都為 1 時,輸出才為 1。如同開啟銀行金庫,必須經理和主管同時插入各自的鑰匙。
- OR 閘(或閘):只要有一個輸入為 1,輸出就為 1。
- NOT 閘(非閘 / 反相器):輸入 1 必定輸出 0,輸入 0 必定輸出 1。
- XOR 閘(互斥或閘):當兩個輸入不相同時,輸出恰好為 1。
2.3 用邏輯閘實作加法
Because 7 + 5 = 12, the result is larger than the largest single digit (9). We split 12 into "one full 10" and "the remaining 2":
- 2 The remaining 2 stays in the current column. This is the sum bit.
- The full 10 carries a 1 into the tens column. This is the carry.
0 + 0 = 0. Write 0 in this column, with no carry.
把一個 XOR 閘(負責算本位)和一個 AND 閘(負責算進位)組合起來,就得到了半加器(Half Adder)。
Look closely at the table and two patterns appear:
- The sum column is 1 only when A and B are different. This is XOR.
- The carry column is 1 only when A and B are both 1. This is AND.
0
0
半加器有個致命缺陷:它只有兩個輸入埠(A 和 B)。為了解決這個問題,我們需要能接收三個訊號的全加器(Full Adder):
把多個全加器級聯起來,就能完成多位數的加法:
3. 功能單元:邏輯閘的組合
| 模組名稱 | 承擔的核心使命 | 現實生活中的絕佳隱喻 |
|---|---|---|
| 加法器 | 處理算術運算引擎 | 不知疲倦的算盤 |
| 多工器(MUX) | 控制資料流向 | 鐵路線上的精密道岔 |
| 解碼器 | 翻譯二進位指令 | 破獲密電的翻譯員 |
| 正反器 | 記錄歷史狀態 | 會保持狀態的蹺蹺板 |
The select signal is 0, so the output equals data 0 (D0): 0
| Feature | Register | Memory (RAM) |
|---|---|---|
| Location | Inside the CPU | Outside the CPU |
| Access speed | Fastest (< 1ns) | Slower (50-100ns) |
| Capacity | Tiny (bytes) | Large (GB) |
| Role | Hold instructions, operands, and results | Store programs and data |
3.2 暫存器:資料的儲存單元
深入理解:記憶本質上是一種循環
要產生持續的「記憶」,早期的先驅者想到了一個絕妙的設計:將輸出的電波重新回饋到輸入端。
當我們將 32 個或 64 個正反器整齊地編排成一列,施加同一種強勁的時脈頻率訊號來號令它們統一行動時,暫存器(Register) 便應運而生。
4. CPU 架構:從功能單元到處理器
4.1 CPU 的核心組件
- 算術邏輯單元 (ALU):負責「幹活」的運算單元
- 暫存器組 (Register File):工作台上的臨時抽屜
- 內部匯流排 (Internal Bus):系統裡的傳送帶
- 控制單元 (Control Unit):總指揮
Control Unit
Register File
Arithmetic Logic Unit (ALU)
Click a module in the CPU diagram to explore its circuit-level implementation.
4.2 CPU 是如何執行指令的?
- 取指 (Fetch):按照程式計數器的位址,從快取中取出下一條指令
- 解碼 (Decode):分析這道命令具體要做什麼
- 執行 (Execute):指令到達 ALU 等運算單元執行
- 寫回 (Write Back):將結果寫至特定的暫存器或記憶體
追求效率的極致:流水線(Pipeline)
晶片工程師引入了指令流水線技術。當第一部分電路在對指令 A 進行「執行」時,之前的電路並沒有閒著,而是去對指令 B 進行「解碼」,甚至是把指令 C 提前「取指」拿出來。
5. 總結:跨越抽象層級
- 巨觀物理:沙子(二氧化矽晶體)
- 微觀物理:海量的電晶體開關
- 數位代數:AND / OR / NOT 邏輯閘體系
- 微架構模組:功能單元積木集
- 複雜體系架構:CPU 聯合陣列
- 萬千應用王國:演算法、系統軟體以及網際網路
電腦科學中最令人著迷的部分在於,每一層封裝都完美地隱藏了下一層的複雜細節。
終極思考
歸根究底,所謂的算力,不過是有限的密閉空間內海量開關重組的變幻;伴隨著時脈的節拍,在這片小小的矽片上完成了複雜的運算。
延伸閱讀
- 經典教材:《電腦組成與設計(軟硬體介面)》
- 數位邏輯模擬:嘗試使用邏輯模擬軟體搭建一個簡單的 8 位元加法器
- 底層與組合語言:嘗試學習一些基礎組合語言