FPGA是什麼?做好之後還能改寫電路的晶片原理

約 10 分鐘 · 更新:2026年10月23日

FPGA是在工廠製造完成後,還能一再重組內部邏輯電路的晶片。裡面排滿了寫著答案的小表格(LUT),以及可以切換連接方式的繞線。載入設定資料後,它們就會當成目標電路運作。它比專用晶片(ASIC)慢,也比較耗電。但它的強項是不必花重做晶片的費用和時間。

這篇文章可以了解

  • 「電路可以事後改寫」是什麼意思,和改寫程式的CPU有什麼不同
  • FPGA內部3種元件(LUT、正反器、繞線)的原理,以AND和XOR為例
  • FPGA電路的製作方式,以及和專用晶片(ASIC)的分工
  • FPGA用在哪裡,以及主要廠商的歷史

先備知識:如果知道AND、XOR等邏輯閘和真值表,會比較容易閱讀。這在「電腦怎麼用0和1計算?」中說明。

生活中的例子

在手機或家電裡,不太常見到FPGA。常用到它的是行動通訊基地台、量測儀器、資料中心的伺服器、人造衛星等。這些都是生產數量偏少,或出貨後還想改變功能的機器。

對開發新晶片的公司來說,FPGA也不可或缺。因為在工廠製造晶片之前,會先把設計好的電路放進FPGA,確認它真的能動。

FPGA是什麼:電路可以事後決定的晶片

一般的晶片,會在工廠把設計好的電路做進去。電晶體的連接方式在完成時就固定,之後不能更改(「積體電路(IC)是什麼?」)。CPU的電路本身也是固定的。CPU能改的,是交給電路執行的指令順序,也就是程式(「CPU是什麼?」)。

相對地,FPGA是買來之後,才決定電路本身的晶片。裡面有能變成任何功能的小元件,以及連接它們的繞線,像棋盤格一樣排列。設定好每個元件做什麼、怎麼連接,晶片就會當成那個電路運作。

FPGA是英文Field-Programmable Gate Array的縮寫,中文稱為現場可程式化邏輯閘陣列。意思是「在現場(field)就能設定(programmable)的邏輯閘排列(gate array)」。

原理1:LUT——寫著答案的小表格

邏輯電路的功能,可以用真值表寫出來。這是列出所有輸入組合,以及各組合輸出的表。例如2輸入的AND,輸入組合有4種,所以是4列的表。

FPGA不用邏輯閘組裝,而是把這張表直接寫進小小的記憶體。用輸入的0和1選出「表的第幾列」,再輸出那一列寫的值。因為是查表得出答案,這個元件稱為查找表(LUT)。

2輸入的LUT,由4個記憶格和選出其中1格的電路組成。要做成AND時,從上到下在4格裡寫入0、0、0、1。輸入A=1、B=1時,選中第4格,輸出1。其他輸入都輸出0,所以和AND的功能相同。

2輸入的LUT:用輸入A和B從4個格子中選出1個,輸出它的值 AB AND的情況 00 01 10 11 0 0 0 1 選擇 輸出 1 1 1 A B 輸入
左邊的00~11是A和B的值的組合。因為A=1、B=1,所以選中「11」的格子,輸出裡面的1。圖中省略:選格子的電路內部、把值寫進格子的電路。

把同一個LUT的格子,從上到下改寫成0、1、1、0看看。這樣它就只在兩個輸入不同時輸出1。這正是XOR的功能。不必更換邏輯閘,只要改寫格子裡的內容,就變成另一個電路。

ABAND的格子內容XOR的格子內容
0000
0101
1001
1110

4個格子填入0和1的方式共有16種。2輸入的邏輯功能,總共也是16種。2輸入的LUT,可以變成其中任何一種。

實際FPGA的LUT,輸入更多。例如超微(AMD)的7系列FPGA,使用6輸入的LUT。格子數是2連乘6次的64個,任何6輸入的邏輯,都能用1個LUT做出來。

原理2:正反器——記住結果

LUT的輸出,只由當下的輸入決定。光靠它,無法記住「剛才是什麼值」。計數的電路,或把計算分成幾段依序傳下去的電路,都需要能記住值的元件。

因此FPGA在LUT旁邊,放了正反器。正反器是記住0或1這1個位元的元件。它只在固定的訊號到來的瞬間讀入輸入,並持續輸出同一個值,直到下一個訊號。

這個訊號以固定間隔重複0和1,稱為時脈。和CPU的「3 GHz」是同一種訊號。本文把幾組LUT和正反器合在一起的單位,稱為「邏輯區塊」。

只由輸入決定輸出的電路,和也會用到記住的值的電路,兩者的差異整理在「組合邏輯電路與循序邏輯電路的差異」的表中。

原理3:可以切換連接方式的繞線

邏輯區塊之間,縱橫交錯著許多繞線。繞線交會的地方,有能選擇接通或切斷的開關。開關其實是電晶體,開或關由旁邊記憶格裡的0和1決定。

假設要把某個邏輯區塊的輸出,送到另一個區塊。只要打開途中的幾個開關,就能做出一條路徑。打開哪些開關,決定了電路的連接方式。這種能用設定改變連接的繞線,稱為可程式化繞線。

FPGA的內部:附開關的繞線,連接邏輯區塊和專用元件 邏輯 RAM 邏輯 邏輯 DSP 邏輯 邏輯 RAM 邏輯 打開的開關 關閉的開關
「邏輯」是邏輯區塊,「RAM」和「DSP」是後面會說明的專用元件。粗線是打開開關後做出的路徑。圖中省略:實際的區塊與繞線數量(數千~數百萬)、輸入輸出接腳、傳送時脈的專用繞線。

為了放進任何電路都不會不夠用,繞線和開關連可能用不到的路都事先準備好。因此需要多出來的電晶體和面積。這就是後面會看到「比專用晶片慢、也比較耗電」的原因之一。

也內建了專用元件

乘法這類大的計算,如果用LUT來做,需要很多LUT,速度也慢。因此現在的FPGA,一開始就做進了功能固定的電路。這些稱為硬體區塊。

  • DSP區塊:把乘法和加法合在一起快速執行的電路。DSP是「數位訊號處理」的英文縮寫,用於聲音和無線電波的處理,以及AI的計算
  • 區塊RAM:放置一定量資料的晶片內記憶體
  • 高速收發器:用很少的線,和其他晶片快速交換資料的電路(SerDes)
  • CPU核心:也有內建Arm等處理器的產品。靠程式運作的部分和組電路的部分,可以放在同一顆晶片上

設定資料,每次開機都要載入

LUT格子的內容,和繞線開關的開或關,全都是0和1的資料。把這些整合成一份,稱為位元流。所謂「把電路寫進FPGA」,就是把這份資料載入內部的記憶格。

多數FPGA的記憶格,使用斷電後內容就會消失的記憶體(SRAM)。所以每次開機,都要從同一塊電路板上的快閃記憶體等處載入位元流。載入完成之前,FPGA不會當成目標電路運作。

另一方面,也有斷電後設定不會消失的產品。例如Microchip公司的PolarFire系列,把設定存在一種快閃記憶體裡。不必在外面放設定用的記憶體,開機後馬上就能運作。

FPGA的電路怎麼做?

FPGA電路的做法,和專用晶片(ASIC)的設計很像。最大的不同在最後一步。不是把設計資料送到工廠,而是產生位元流,載入FPGA。

  1. 寫出功能:用硬體描述語言(HDL)寫出電路的動作。常用的是Verilog和VHDL。
  2. 轉成電路:軟體把寫好的動作,轉換成LUT、正反器、硬體區塊的組合。這個步驟稱為邏輯合成。
  3. 擺放並連接:由軟體決定使用哪些邏輯區塊、用哪些開關連接。這稱為佈局繞線。
  4. 寫入:把結果做成位元流,載入FPGA。
  5. 確認:實際運作來確認,要修改就回到第1步。

HDL看起來像程式語言,但寫的不是指令的順序,而是電路的形狀。兩種語言的差異,在「Verilog 與 VHDL 的差異」中比較。

最近也會用另一種方法:從C語言或C++寫的計算步驟,自動產生相當於HDL的電路描述。這稱為高階合成(HLS)。

CPU、FPGA、ASIC的差異

CPU用固定的電路,一次取出並執行一個指令。它什麼工作都能做,但每次都要花工夫取出並解讀指令。FPGA則是組出配合工作的電路來運作。例如「乘、加、比較」可以用各自的電路同時進行。

ASIC(特殊應用積體電路)是只為一種工作設計、在工廠製造的晶片。用同一世代的技術做出相同的功能,通常ASIC最快,也最省電。不過開始生產前,設計和電路的原版(光罩)要花很大的費用。必須大量生產,把這筆費用分攤到每一顆上,才能回本。

CPUFPGAASIC
事後能改的東西程式電路本身不能改
固定工作的效率(參考)偏低中等最高
製作晶片的費用不需要(現成品)不需要(現成品)非常高
適合的場合什麼都能做少量、規格會變大量、規格已定
生產數量少時FPGA比較便宜,數量多時ASIC每顆比較便宜 每顆的費用 ASIC FPGA 分界點 少 多 生產數量 →
每顆的費用,是開始生產的費用除以生產數量,再加上做1顆的費用。ASIC開始生產的費用很高,只做少量會很貴。大量生產時,超過某個數量就會比FPGA便宜。名稱左邊短線的顏色,表示是哪一條線。圖中省略:實際金額與刻度(未按比例)。分界點的數量,會因產品和世代而有很大差異。

三者的差異,以及和把整個系統整合成一顆晶片(SoC)的關係,也整理在「ASIC、FPGA、SoC 的差異」的表中。

為什麼比專用晶片慢,也比較耗電?

在FPGA中,訊號每次在邏輯區塊之間移動,都要經過好幾個開關和長長的繞線。ASIC可以用最短的繞線連接兩點,FPGA卻只能轉乘事先準備好的路。另外,就連AND這種小功能,有時也要用掉1個有64格的LUT。

有研究實際量過這個差距。多倫多大學的Kuon和Rose在2007年的論文中,用FPGA和ASIC做出相同的電路來比較。兩者都是同一世代(90 nm)的技術。只用LUT和正反器時,FPGA的面積平均約35倍,訊號通過電路的時間約3~4倍。

功耗方面,比較的是0和1切換時用掉的部分(動態功耗),FPGA約14倍。另一方面,使用硬體區塊時,面積差距縮小到約18倍。這是將近20年前世代的量測,現在的產品數字不同。不過,能改寫就會降低效率的理由,現在也一樣。

用在哪裡?

  • 新晶片的試作:在工廠製造ASIC之前,把設計好的電路放進FPGA,執行實際的軟體來確認。也有專為這種用途做的超大型FPGA。
  • 通訊設備:通訊標準會不斷修訂。在基地台等設備使用FPGA,就保留了出貨後修改電路的空間。
  • 量測儀器與工業設備:這些產品生產數量少,做專用晶片不划算。
  • 資料中心:Microsoft在2014年的論文中,報告了用FPGA加速搜尋引擎Bing排序計算的試驗。在1,632台伺服器上各裝1片FPGA,每台的處理量增加了95%。
  • 太空:在人造衛星上,發射後還能從地面改寫電路是一大優點。太空中容易因輻射讓記憶的位元翻轉,發生軟錯誤,所以會使用有對策的太空用產品。

FPGA的歷史與廠商

想出FPGA的人,是美國工程師羅斯.弗里曼(Ross Freeman)。1984年,他為了把這個構想做成產品,和夥伴一起創立了Xilinx。接著在1985年,發表了被視為第一顆FPGA的XC2064。裡面的邏輯元件有64個。

長久以來,最知名的FPGA大廠是Xilinx和Altera這2家公司。

  • 2015年12月:英特爾(Intel)完成收購Altera
  • 2022年2月:超微(AMD)完成收購Xilinx。Xilinx的產品現在以AMD的產品販售
  • 2025年9月:投資公司Silver Lake取得Altera 51%的股份。Altera不再是英特爾的子公司(英特爾持有49%)

此外,Lattice和Microchip等公司也生產FPGA。這裡寫的公司關係,是2026年10月時的狀況。

常見的誤解

誤解:FPGA像CPU一樣在執行程式

實際上,位元流不是指令的排列。它是決定LUT內容和開關開或關的「電路設定」。寫入之後,是那個電路直接處理訊號,沒有取出指令的動作。不過,內建CPU核心的產品,那顆CPU會執行程式。同樣用「程式化」這個詞,是誤解的來源。

誤解:用FPGA,任何處理都會比CPU快

實際上,會變快的是能同時進行的計算多、步驟固定的處理。如前面所見,訊號通過FPGA電路要花時間,時脈通常也比CPU低。步驟會依條件大幅改變的處理,CPU反而常常比較快。大量的乘法運算,也常使用GPU(「AI為什麼要用GPU?」)。

誤解:寫入一次之後就不能再改

實際上,多數FPGA只要載入別的位元流,就能改寫任意次。使用SRAM的產品,甚至每次開機都會重新載入設定。不過,太空用等少數產品,採用只能寫入一次的方式(反熔絲)。

從數字來看

項目數字
第一顆FPGA XC2064(1985年)的邏輯元件64個
試作用的AMD Versal Premium VP1902(2023年發表)的規模1,850萬個邏輯單元
FPGA與ASIC的差距(Kuon、Rose,2007年,90 nm世代)面積約35倍、延遲約3~4倍、動態功耗約14倍

邏輯單元是廠商自訂的規模計算方式(AMD把1個6輸入LUT算作1.6個邏輯單元)。它和XC2064的「64個」算法不同,不能單純比較。即使如此,仍看得出約40年間規模大了好幾個數量級。

進一步學習

接著閱讀

系列「電腦的原理」的文章

  1. 電腦怎麼用0和1計算?二進位與加法電路
  2. CPU是什麼?它在電腦和手機裡做些什麼
  3. AI為什麼要用GPU?同時處理大量乘法的原理
  4. 作業系統(OS)是什麼?它在電腦和手機裡做些什麼
  5. CPU快取記憶體是什麼?讓CPU不必苦等記憶體的原理
  6. NPU是什麼?手機和電腦裡的AI專用電路原理
  7. FPGA是什麼?做好之後還能改寫電路的晶片原理
  8. ASIC是什麼?特定應用積體電路與CPU、FPGA的差異
  9. 編譯器是什麼?程式變成機器碼的過程
  10. 邏輯閘是什麼?用AND、OR、NOT計算的原理
  11. RISC-V是什麼?人人都能使用的開放指令集
  12. 演算法是什麼?靠步驟的巧思讓計算變快的原理
  13. 資料庫是什麼?表格、SQL與索引的運作原理
  14. Git是什麼?版本控制的原理與GitHub的差異

這個領域的題目: LSI設計流程與EDA

參考資料

入門解說一覽