# 數位電路基礎：從電晶體到 CPU

::: tip 前言
**電腦是怎麼「思考」的？** 你可能知道 CPU 是電腦的「大腦」，但這個大腦到底是怎麼運作的？本章帶你從最基層的電晶體開始，一步步理解 CPU 的建構原理。
:::

**這篇文章會帶你學什麼？**

學完這章後，你將獲得：

- **術語理解能力**：聽到「CPU 主頻」、「多核」、「指令集」不再一頭霧水
- **程式碼執行視角**：看到一行程式碼如何經過取指、解碼、執行、寫回
- **抽象層次思維**：理解每一層如何向上層提供服務
- **後續學習基礎**：為電腦體系結構、嵌入式開發打下基礎

| 章节 | 內容 | 核心概念 |
|-----|------|---------|
| **第 1 章** | 電晶體 | 數位世界的開關 |
| **第 2 章** | 邏輯閘 | 布林運算的物理實作 |
| **第 3 章** | 功能單元 | 加法器、暫存器、多工器 |
| **第 4 章** | CPU 核心 | 取指、解碼、執行、寫回 |

---

## 0. 全景圖：從沙子到智慧

在探索電腦底層的過程中，常常會遇到一個最根本的問題：**現代電腦的「思考」能力，究竟從何而來？**

答案是一個再簡單不過的物理抽象：**開關**。

想象你面前有一個控制燈泡的開關。按下燈亮，表示為「1」；斷開燈滅，表示為「0」。如果我們擁有幾十億個這樣的開關，並且能夠讓**一個開關的輸出去控制另一個開關**，從而組合無比複雜的邏輯網路，會發生什麼？

答案是一台能執行任意邏輯的通用運算平台。

::: tip 逐層解構：從沙子到智慧
- **第一層：電晶體（數百億級）** — 最底層的「開關」
- **第二層：邏輯閘（數十億級）** — 電路變成了數學
- **第三層：功能單元（數百級）** — 有特定用途的運算模組
- **第四層：CPU 核心（1-128核）** — 整個微架構的控制中心
:::

---

## 1. 電晶體：數位世界的開關

<TransistorDemo />

### 1.1 電晶體概述

::: tip 概念引入
**電晶體（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 從電晶體到邏輯閘

<LogicGateDemo />

### 2.2 基本邏輯閘介紹

- **AND 閘（與閘）**：只有當所有輸入都為 1 時，輸出才為 1。如同開啟銀行金庫，必須經理和主管同時插入各自的鑰匙。
- **OR 閘（或閘）**：只要有一個輸入為 1，輸出就為 1。
- **NOT 閘（非閘 / 反相器）**：輸入 1 必定輸出 0，輸入 0 必定輸出 1。
- **XOR 閘（互斥或閘）**：當兩個輸入**不相同**時，輸出恰好為 1。

### 2.3 用邏輯閘實作加法

<BinaryAdditionRulesDemo />

把一個 XOR 閘（負責算本位）和一個 AND 閘（負責算進位）組合起來，就得到了**半加器（Half Adder）**。

<HalfAdderDemo />

半加器有個致命缺陷：它**只有兩個輸入埠（A 和 B）**。為了解決這個問題，我們需要能接收三個訊號的**全加器（Full Adder）**：

<FullAdderDemo />

把多個全加器級聯起來，就能完成多位數的加法：

<AdderChainDemo />

<CompleteAdderDemo />

---

## 3. 功能單元：邏輯閘的組合

| 模組名稱 | 承擔的核心使命 | 現實生活中的絕佳隱喻 |
| -------- | -------------- | -------------------- |
| **加法器** | 處理算術運算引擎 | 不知疲倦的算盤 |
| **多工器(MUX)** | 控制資料流向 | 鐵路線上的精密道岔 |
| **解碼器** | 翻譯二進位指令 | 破獲密電的翻譯員 |
| **正反器** | 記錄歷史狀態 | 會保持狀態的蹺蹺板 |

<FunctionalUnitDemo />

<RegisterDemo />

### 3.2 暫存器：資料的儲存單元

::: tip 深入理解：記憶本質上是一種循環
要產生持續的「記憶」，早期的先驅者想到了一個絕妙的設計：將輸出的電波重新回饋到輸入端。

當我們將 32 個或 64 個正反器整齊地編排成一列，施加同一種強勁的時脈頻率訊號來號令它們統一行動時，**暫存器（Register）** 便應運而生。
:::

<FlipFlopDemo />

---

## 4. CPU 架構：從功能單元到處理器

### 4.1 CPU 的核心組件

- **算術邏輯單元 (ALU)**：負責「幹活」的運算單元
- **暫存器組 (Register File)**：工作台上的臨時抽屜
- **內部匯流排 (Internal Bus)**：系統裡的傳送帶
- **控制單元 (Control Unit)**：總指揮

<MinCpuDemo />

### 4.2 CPU 執行指令的原理

1. **取指 (Fetch)**：按照程式計數器的位址，從快取中取出下一條指令
2. **解碼 (Decode)**：分析這道命令具體要做什麼
3. **執行 (Execute)**：指令到達 ALU 等運算單元執行
4. **寫回 (Write Back)**：將結果寫至特定的暫存器或記憶體

<CpuArchitectureDemo />

::: tip 追求效率的極致：流水線（Pipeline）
晶片工程師引入了**指令流水線技術**。當第一部分電路在對指令 A 進行「執行」時，之前的電路並沒有閒著，而是去對指令 B 進行「解碼」，甚至是把指令 C 提前「取指」拿出來。
:::

---

## 5. 總結：跨越抽象層級

1. **巨觀物理：沙子（二氧化矽晶體）**
2. **微觀物理：海量的電晶體開關**
3. **數位代數：AND / OR / NOT 邏輯閘體系**
4. **微架構模組：功能單元積木集**
5. **複雜體系架構：CPU 聯合陣列**
6. **萬千應用王國：演算法、系統軟體以及網際網路**

電腦科學中最令人著迷的部分在於，**每一層封裝都完美地隱藏了下一層的複雜細節**。

::: tip 終極思考
**歸根究底，所謂的算力，不過是有限的密閉空間內海量開關重組的變幻；伴隨著時脈的節拍，在這片小小的矽片上完成了複雜的運算。**
:::

---

## 延伸閱讀

- **經典教材**：《電腦組成與設計（軟硬體介面）》
- **數位邏輯模擬**：嘗試使用邏輯模擬軟體搭建一個簡單的 8 位元加法器
- **底層與組合語言**：嘗試學習一些基礎組合語言
