1985-XC2064 首款 FPGA#
案件摘要#
(1985 年,Xilinx 推出世界首款 FPGA——XC2064:64 個 CLB 構成 8×8 陣列、2 輸入 LUT、NMOS-on-CMOS 製程(約 850nm)。本案追查 LUT 實作布林函數的數學、CLB 與可程式路由的架構、規格驗證,以及 Verilog 範例如何映射到硬體——一顆晶片如何讓「流片即賭博」的 ASIC 世界變成「軟體般可重寫」。)
前因 -- 為什麼會會有這個案子#
1984 年 Xilinx 創立時,ASIC 的困境已經清晰:一片全客戶化 ASIC 的 NRE 費用(光罩、設計、驗證)動輒數萬美元起跳,設計週期以季計;更致命的是交期——從送出 GDSII 到拿到晶片要數個月,而一旦流片後發現邏輯錯誤(哪怕一條線接反),整批晶片報廢、只能重跑一輪光罩。對於原型開發、中小量產品、以及需求多變的系統商,這是無法承受的賭博。
閘陣列(gate array)雖然降低了 NRE(只做金屬層光罩),但仍需數週交期與費用;PAL/GAL 即時可用卻只有數十閘的規模。市場需要的是一種「交付即時、可反覆修改、規模可達數千閘」的邏輯晶片。Ross Freeman 的洞察(SRAM 開關開銷隨摩爾定律遞減)+ LUT 邏輯思想,在此刻變成產品。
1985 年,Xilinx 推出 XC2064——史上第一款商用 FPGA。它以 64 個可組態邏輯塊(CLB)排成 8×8 陣列,四周環繞可程式 I/O 塊(IOB),CLB 之間由可程式路由通道與開關矩陣連接,所有組態存於片上 SRAM,上電時從外部串列 PROM 自動載入。製程採 NMOS-on-CMOS(約 850 nm 世代),速度約 33 MHz 級、等效閘數約 1,200 閘。「Field Programmable Gate Array」這個名字正式立案:把「閘陣列」的規則陣列搬到「現場(field)」——使用者自己就是晶圓廠的最後一道光罩。
線索與推理 -- 數學式、程式、理論(本體,最詳細)#
線索一:LUT 實作布林函數的數學——真值表就是電路#
LUT(Look-Up Table)實作布林函數的數學基礎極其優雅。一個布林函數是映射:
任何這樣的函數都由它的完整真值表唯一決定—— \(2^n\) 個位元。而一個 \(2^n \times 1\) 的記憶體恰好能存 \(2^n\) 個位元。所以:
輸入 \(x_1 \ldots x_n\) 接到 SRAM 的位址線,SRAM 的資料輸出就是 \(f\) 。不需要任何化簡、不需要任何兩級結構——真值表本身就是電路。這與 PLA 的根本差異在:
| 特性 | PLA(AND-OR 平面) | LUT(SRAM) |
|---|---|---|
| 實作原理 | 化簡後的 SOP,乘積項之和 | 完整真值表直接查表 |
| 需要化簡? | 必須(乘積項配額有限) | 不需要( \(2^n\) 個位元全存) |
| 面積 vs \(n\) | \(O(p \cdot n)\) , \(p\) 為乘積項數 | \(O(2^n)\) ,指數 |
| 延遲 | 隨函數複雜度變化 | 常數(與函數無關,只看位址線數) |
| 適合的 \(n\) | 大 \(n\) (多輸入單函數) | 小 \(n\) (3~6 輸入,多個串接) |
關鍵推理:LUT 的 \(O(2^n)\) 看似指數爆炸,但 XC2064 的架構把 \(n\) 壓在 2(2 輸入 LUT,每個 LUT 僅 4 個 SRAM 位元),大函數用多個 LUT 樹狀串接實作。例如 4 輸入函數 \(f(x_1,x_2,x_3,x_4)\) 可用 Shannon 展開拆成兩個 3 輸入子函數、再用 MUX 合併——LUT 的常數延遲特性(與函數內容無關)還帶來一個意外的工程優勢:時序模擬在佈局前就能精確估算,這是 PLA/隨機邏輯做不到的。
線索二:CLB 的架構——LUT + 正反器 + MUX#
XC2064 的可組態邏輯塊(CLB,Configurable Logic Block)由三部分組成:
- 組合邏輯:2 輸入 LUT(4 個 SRAM 組態位元)+ 可選的第三輸入路徑,可實作任意 \(f = f(x_1, x_2)\) 或含 \(\overline{f}\) 的組合。
- 正反器(D-FF):可組態為邊緣觸發或電平觸發、帶同步/非同步復位,實作時序邏輯。
- 多工器(MUX):選擇輸出是「LUT 直接輸出」還是「正反器輸出」,即組合邏輯與時序邏輯的組態開關。
CLB 的行為數學:
一個 CLB 因此能實作:任意 3 輸入組合函數、一個位元的狀態暫存、或小型狀態機。這個「邏輯 + 暫存器 + 選擇器」的三件套結構,成為此後所有 FPGA 架構的標準範式——後來的 LUT 從 2 輸入長到 4 輸入(XC4000)、6 輸入(Xilinx 7 系列),但 CLB/LEC 的骨架不變。
線索三:可程式路由——通道、開關矩陣與組態位元#
CLB 之間的連接靠可程式互連架構:
- 路由通道(routing channels):CLB 陣列的行與列之間有水平與垂直的金屬線段(segment)。
- 開關矩陣(switch matrix):線段交叉點上的可程式開關盒,決定線段如何轉彎、連接。
- 可程式互連點(PIP, Programmable Interconnect Point):由 SRAM 位元控制的傳輸閘,接通或斷開兩條線段。
XC2064 的互連層級:
| 層級 | 資源 | 作用 |
|---|---|---|
| 局部互連 | CLB 直接相鄰連線 | 快速連接相鄰 CLB |
| 一般互連 | 水平/垂直線段 + 開關矩陣 | CLB 間的任意連接 |
| 長線(long lines) | 貫穿整列/整行的長金屬線 | 時脈、全域控制訊號 |
所有 PIP 的狀態組成組態位元流(configuration bitstream)。組態總位元數包括:所有 LUT 的真值表位元 + 所有 MUX 選擇位元 + 所有 PIP 開關位元 + IOB 組態位元。上電時,片上組態邏輯從外部串列 PROM(如 XC1736)以串列方式把位元流載入片上 SRAM——FPGA 的「程式」就是這個位元流,載入過程就是「把自己程式化」。揮發性的代價(斷電即失)以「每次上電自動重載」換取,帶來附贈的好處:遠端更新——改版只需換一片 PROM 或透過介面重載,不必動硬體。
線索四:XC2064 規格表驗證#
1985 年的 XC2064 作為實物證據:
| 項目 | 規格 |
|---|---|
| CLB 數量 | 64 個,8×8 陣列 |
| LUT 輸入數 | 2 輸入(4 個組態位元/LUT) |
| 每個 CLB | 1 個 LUT + 1 個 D-FF + MUX |
| IOB(可程式 I/O) | 58 個(可組態輸入/輸出/雙向) |
| 等效閘數 | 約 1,200 閘 |
| 觸發器數 | 64 個(每 CLB 一個) |
| 製程 | NMOS-on-CMOS,約 850 nm 世代 |
| 組態儲存 | 片上 SRAM,上電自外部 PROM 載入 |
| 最高時脈 | 約 33 MHz 級(toggle 級) |
| 封裝 | 44/48 腳 PLCC/DIP 等 |
驗證推理:64 個 CLB、每個含 1 個 D-FF,故總共 64 個正反器——足以實作 64 狀態的 FSM 或多位元計數器;等效 1,200 閘遠超 PAL 的 20 閘級,直逼小型閘陣列的規模,而交期是「買一顆 + 燒一片 PROM」的當天完成。
線索五:Verilog 範例與合成映射#
以現代視角回看:一個 4 位元計數器如何映射到 FPGA。Verilog 描述:
module counter4 (
input wire clk,
input wire rst_n,
output reg [3:0] count
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
count <= 4'b0000;
else
count <= count + 4'b0001;
end
endmodule
合成映射的推理過程:
- 暫存器推斷:
count是 4 位元暫存器 → 映射到 4 個 CLB 的 D-FF(4 個 CLB 各出一個正反器)。 - 下一狀態邏輯:
count + 1是 4 輸入函數 \(Q_i^{+} = g(x_1,x_2,x_3,x_4)\) (含進位鏈)→ 每 1 個位元的下一狀態函數用 Shannon 展開拆成 2 輸入 LUT 樹:一個 4 輸入函數 ≈ 3 個 2 輸入 LUT + 2 個 MUX(或 XC2064 架構下由 CLB 的第三輸入路徑部分吸收)。 - 復位邏輯:
rst_n併入 D-FF 的非同步復位腳 → 不耗 LUT,直接用 CLB 的復位組態。 - 路由:4 個 CLB 之間的進位/回饋訊號由開關矩陣的 PIP 連接;
clk與rst_n走長線(全域訊號)。
若以「3 輸入 LUT 實作布林函數」直接示範——實作全加器 \(S = a \oplus b \oplus c\) :
module full_adder (
input wire a, b, cin,
output wire sum, cout
);
assign sum = a ^ b ^ cin;
assign cout = (a & b) | (a & cin) | (b & cin);
endmodule
映射推理:sum 是 3 輸入函數,真值表 8 個位元 10100101( \(a,b,c\) 由高到低排列,1 的個數為奇數時為 1)→ 一個 3 輸入 LUT(8 個 SRAM 位元)直接裝下;cout 也是 3 輸入函數(多數決)→ 再一個 LUT。一個 3-LUT 的全加器,零化簡、零兩級結構——真值表即電路。這條推理徹底驗證了線索一的數學。
線索六:FPGA vs ASIC 對照表#
| 比較項 | ASIC(全客戶化) | FPGA(XC2064 世代) |
|---|---|---|
| NRE 費用 | 數萬~數十萬美元 | ≈ 0(開發板 + 軟體) |
| 交期 | 數月(流片) | 當天(買晶片 + 燒錄) |
| 修改成本 | 重流片一輪 | 重新下載位元流,數秒 |
| 單位成本(量產) | 低 | 高(開關 overhead) |
| 單位成本(小量) | 高(攤提 NRE) | 低 |
| 速度/功耗 | 最優 | 較差(RC 延遲 + overhead) |
| 適合場景 | 大量、穩定規格 | 原型、小量、需改版 |
經濟推理:設計量為 \(N\) 顆、ASIC 單顆成本 \(c_{\mathrm{ASIC}}\) 、NRE 為 \(F\) ;FPGA 單顆成本 \(c_{\mathrm{FPGA}} > c_{\mathrm{ASIC}}\) 、NRE \(\approx 0\) 。總成本:
兩者交叉的損益平衡點為:
\(N < N^*\) 時 FPGA 便宜, \(N > N^*\) 時 ASIC 便宜。1985 年時 \(N^*\) 大約在數千顆級;而隨 FPGA 製程微縮( \(c_{\mathrm{FPGA}}\) 下降)與 ASIC NRE 持續上升(設計複雜度上升), \(N^*\) 不斷右移——這條損益線的右移,正是 FPGA 市場三十年成長的數學本質。
結案 -- 後果與影響#
XC2064 的問世,把「流片即賭博」的邏輯設計變成「軟體般可重寫」的工程實務。雖然第一代產品的速度與密度都遠遜 ASIC,但 Freeman 的損益平衡論證在市場上全面應驗:FPGA 市場從 1985 年的零成長至今日數百億美元規模,並在原型驗證、通訊、軍工、資料中心、AI 推論中扮演無可替代的角色。
- 確立「SRAM 組態 + LUT + CLB + 可程式路由」的 FPGA 架構範式,LUT 從 2 輸入演化到 6 輸入而骨架不變。
- 確立「位元流 + 開發工具鏈」的產品形態,成為 EDA 產業的新支柱。
- \(N^* = F/(c_{\mathrm{FPGA}} - c_{\mathrm{ASIC}})\) 的損益平衡點右移,是 FPGA 市場成長的數學引擎。
- Ross Freeman(FPGA 之父)於 1989 年過世,2009 年入選美國發明家名人堂,其 LUT 專利成為 FPGA 產業的法理基石。
- Xilinx 從 XC2064 起家,歷經 XC4000、Virtex、7 系列、UltraScale,至 2020 年被 AMD 併購,FPGA 與 CPU/GPU 走向融合(如 Versal ACAP)。
關鍵人物與文獻#
- Ross Freeman(Xilinx 共同創辦人):FPGA 構想與 LUT 架構的原創者,美國專利 4,642,487《Configurable electrical interconnect system》等;1989 年過世,2009 年入選美國發明家名人堂(National Inventors Hall of Fame),被尊為 FPGA 之父。
- Bernard Vonderschmitt(Xilinx 共同創辦人):商業模式與 fabless 代工策略的主導者。
- James Barnett(Xilinx 共同創辦人):早期工程與團隊建構的關鍵角色。
- Xilinx:XC2064 資料手冊(1985)與《The Programmable Logic Data Book》——CLB/IOB/組態架構的原始文獻。
- Steve Trimberger:《Three Generations of FPGA Evolution》(ICCAD/回顧性論文)與《Field-Programmable Gate Array Technology》(1994,編著)——FPGA 架構三世代演化的經典文獻。
- S. Brown 與 J. Rose:《Architecture of FPGAs and CPLDs: A Tutorial》(IEEE Design & Test of Computers, 1996)——FPGA/CPLD 架構的標準教學文獻。
- S. Brown、R. Francis、J. Rose、Z. Vranesic:《Field-Programmable Gate Arrays》(1992)——LUT 架構與合成映射的學術專書。
- 教科書:Wayne Wolf《FPGA-Based System Design》、Brown & Vranesic《Fundamentals of Digital Logic with Verilog Design》。