1971 - Intel 4004:世界第一顆微處理器#
案件摘要#
1971 年 11 月,Intel 推出 4004——世界第一顆商用微處理器,2300 個電晶體把整顆 CPU 塞進一塊晶片。這本是日本計算機公司 Busicom 的一紙委託案,卻意外成為電腦史的分水嶺。
前因 -- 為什麼會有這個案子#
- 1969 年,日本 Busicom 委託 Intel 為其新式計算機設計 12 顆專用晶片。
- 原方案(Masatoshi Shima 草擬)是 12 顆固定功能晶片,每顆只做一件事。
- Intel 的 Ted Hoff 看了方案後提出反提案:與其做 12 顆專用晶片,不如做一顆通用處理器 + RAM + ROM,用軟體定義功能——這樣晶片數更少、成本更低。
- Federico Faggin 領導晶片設計,在矽閘(silicon-gate)製程上把 Hoff 的架構變成物理現實;Shima 後來加入 Intel 負責邏輯驗證與 ROM 微碼。
- 商業插曲:合約寫明 Intel 為 Busicom 獨家生產。1971 年 Busicom 財務困難,Intel 以 6 萬美元買回晶片的所有銷售權——史上最划算的交易之一。
線索與推理 -- 數學式、程式、理論#
1. 規格:2300 電晶體、740 kHz#
| 項目 | 數值 |
|---|---|
| 電晶體數 | 2,300(10 μm 製程) |
| 時脈 | 740 kHz(最慢版 500 kHz) |
| 字長 | 4 位元 |
| 指令集 | 46 條指令 |
| 定址 | 640 位元組 RAM 直接定址(4 KB 程式記憶體) |
| 封裝 | 16 腳 DIP |
計算機晶片組共四顆:4004(CPU)、4001(ROM)、4002(RAM)、4003(移位暫存器 I/O)。
2. 微處理器 = CPU on a chip 的架構革命#
1971 年前,CPU 是一整片機櫃(minicomputer)或數十顆 MSI 晶片。4004 的革命在於馮紐曼架構的單晶化:
它是一台真正的電腦:取指(fetch)→ 解碼(decode)→ 執行(execute)→ 寫回(writeback)的循環,用軟體定義行為。這意味著: - 功能由軟體決定:同一顆晶片,換程式就是計算機、控制箱或計數器。 - 規模經濟:單一晶片大量生產 → 摩爾定律的曲線從此有火車頭。 - 嵌入式的誕生:電腦第一次可以藏進任何機器裡。
3. 取指-解碼-執行週期(4-bit 觀點)#
4004 的一個機器週期含 8 個時相(A1–A3、M1–M2、X1–X3),4-bit 匯流排上一次傳半個位元組,所以 8-bit 位址要分兩次送。指令長度 1 或 2 位元組,基本指令 8 個週期完成。
4. 8008 / 8080 / x86 譜系#
4004 (1971, 4-bit, 2.3k) ──┐
8008 (1972, 8-bit, 3.5k) ──┤─ CTC 委託案衍生
8080 (1974, 8-bit, 6k) ─── Altair 8800 → 微軟/Apple 起點
8086 (1978, 16-bit, 29k) ── x86 誕生 → IBM PC (1981)
80386 (1985) → Pentium (1993) → Core → 現代 x86-64
5. 嵌入式的誕生#
4004 證明「通用處理器 + 軟體」比「專用邏輯」便宜後,嵌入式系統爆發:家電、汽車、工業控制、玩具。後織者如 Intel 8048、8051(1980)、Microchip PIC、ARM Cortex-M——今日全球每人平均擁有數十顆嵌入式處理器。
6. Python 模擬 4004 指令週期概念(簡單 CPU 模擬器)#
# 極簡 4-bit CPU 模擬器:展示 fetch-decode-execute 循環
REG = 16 # 16 個 4-bit 暫存器(含累加器)
class CPU4004Like:
def __init__(self, program, data):
self.rom = program # 程式(指令列表)
self.ram = data # 資料記憶體
self.reg = [0] * REG # R0..R15
self.pc = 0 # 程式計數器
self.acc = 0 # 累加器(R0)
self.halted = False
def fetch(self):
instr = self.rom[self.pc]
self.pc = (self.pc + 1) % len(self.rom)
return instr
def decode_execute(self, instr):
op, arg = instr[0], instr[1]
if op == "LD": self.acc = self.ram[arg] # 載入
elif op == "ST": self.ram[arg] = self.acc # 儲存
elif op == "ADD": self.acc = (self.acc + self.ram[arg]) & 0xF # 4-bit 加法
elif op == "SUB": self.acc = (self.acc - self.ram[arg]) & 0xF
elif op == "JNZ": # 條件跳躍
if self.acc != 0: self.pc = arg
elif op == "HLT": self.halted = True
def run(self, max_cycles=1000):
cycles = 0
while not self.halted and cycles < max_cycles:
instr = self.fetch() # 取指
self.decode_execute(instr) # 解碼 + 執行
cycles += 1
print(f"cycle {cycles:3d}: {instr} acc={self.acc:04b} pc={self.pc}")
return cycles
# 程式:把 RAM[10] 加 3 次,結果存回 RAM[11]
program = [("LD", 10), ("ST", 11), ("LD", 11), ("ADD", 10),
("ST", 11), ("LD", 11), ("ADD", 10), ("ST", 11), ("HLT", 0)]
data = [0]*16; data[10] = 2
cpu = CPU4004Like(program, data)
n = cpu.run()
print(f"halted in {n} cycles; RAM[11] = {cpu.ram[11]} (expect 6, mod 16)")
這個玩具模擬器展現了 4004 的核心概念:一個固定週期循環 + 可編程指令集 = 通用計算。真正的 4004 還有微碼 ROM、8 相時脈與 4-bit 匯流排名雙工等細節,但架構精神完全相同。
7. 頻率與效能的小算術#
4004 @ 740 kHz、每指令 8 週期 → 約 92.5 kIPS(千指令/秒)。對照現代 CPU(數十 GFLOPS):
五十年百萬倍——正是摩爾定律與架構進步的疊加。
結案 -- 後果與影響#
- 1972 年 8008、1974 年 8080、1978 年 8086(x86)、1981 年 IBM PC——個人電腦時代的物種起源都可追溯到 4004。
- Faggin 離開 Intel 創辦 Zilog(Z80);Shima 加入 Zilog 再戰;Intel 則靠 8080/8086 成為半導體霸主。
- Busicom 計算機本身在 1970 年代破產,但它點燃的火燒了半個世紀。
- 結案評語:這案的真相是——最好的產品來自被放棄的委託案。Hoff 的「不如做一顆通用的」這句話,把計算變成了像電力一樣隨手可得的商品。
關鍵人物與文獻#
- Federico Faggin:4004 晶片設計主導者,矽閘技術關鍵人物,後創辦 Zilog。
- Masatoshi Shima(嶋正利):Busicom 方案草擬者,後加入 Intel 完成 4004 邏輯與微碼。
- Ted Hoff(Marcian Hoff):提出「通用處理器」反提案的架構構想。
- F. Faggin, M. E. Hoff, S. Mazor, M. Shima, "The history of the 4004," IEEE Micro, 1996.
- Intel 4004 datasheet (1971); Original Busicom contract (1969–1971 buyback).