November_FPGA Topics|FPGA History and Product Positioning
What is Field Programmable Gate Array (FPGA)? Before we talk about this, we need to talk about the classification of logic devices and what is an ASIC Application Specific IC. Logic components can be roughly categorized into standard products and customized products according to the design type, and I believe you have probably heard of standard products ranging from microcontrollers (MCUs) to central processing units (CPUs). Customized products are designed to meet specific needs and therefore have stronger computing performance. However, because of the smaller production quantities, the one-time engineering (NRE) costs associated with design and manufacturing are higher and the lead time from order to shipment is longer. Customized products can be divided into two categories: fully customized and semi-customized. FPGAs are semi-customized Programmable Logic Devices (PLDs), and their production costs and lead times are lower than those of fully customized logic devices. What is an ASIC? Simply put, it is a chip whose application is set before it is shipped from the factory, such as the early GPU graphics processor, which is a set of chips dedicated to graphics. In contrast to an ASIC, an FPGA is a logic gateway that can be reconfigured after shipment to adjust the tasks it is suited to perform through programming language resets, which is made possible by the use of reconfigurable, resetable logic gates and integrated circuit layout planning that ensures the flexible reuse of computing resources.
回顧FPGA的歷史,在1970年代可程式邏輯元件發明之前,複雜和高性能的電子系統都是使用特殊應用標準產品(ASSP)或特殊應用IC(ASIC),但兩者不僅設計、製造費時與昂貴,而且功能固定,若設計出問題只能廢棄不用,因此需要開發可程式邏輯元件以減少設計風險。第一個可程式邏輯元件是Signetics公司於1975年推出的現場可程式邏輯陣列(FPLA),與隨後問世的可程式陣列邏輯(PAL)、通用型可程式陣列邏輯(GAL)、可抹除型可程式邏輯元件(EPLD)都是採用AND和OR的陣列,因此稱為簡易型可程式邏輯元件(SPLD),其優點是程式設計簡便,但陣列式結構會因輸入增加而使得邏輯資源浪費情況越嚴重。於是1980年代初期Altera開發出複雜型可程式邏輯元件(CPLD),用中央陣列連接多個簡易型可程式邏輯元件以節省空間,但由於同樣是基於乘積項(Product-Term)架構而較難顯著提高集成度。隨後在1985年Xilinx創始人Rose Freeman發明FPGA,其容量和擴充性遠勝CPLD。1990年代後FPGA的集成度和處理速度顯著提升,且性能和ASIC差距逐漸縮小,自此快速取代其他可程式邏輯元件而成為市場主流產品,2000年後FPGA朝向大規模集成化發展,目前可容納邏輯單元已高達數千萬個。就設計理念而言,FPGA即便使用與標準品同樣的電路模塊,只要電流走不一樣的路徑,這個電路所做的事情就會不一樣,因此就會產生不同的輸出。而我們只要連接更多這樣的區塊成為一個規模龐大的邏輯陣列(Logic Array),並且能透過指令來控制電流的走向,我們就能利用這個集成電路來做各式各樣的運算,如下圖以簡單的邏輯電路區塊(Cell)說明。在此區塊中,如果電流走上面的全加器路徑,兩個3-LUTs(Look up table)的輸出會被相加,加上carry-in之後就成了一組完整的全加器電路。而如果電流走下面的mux路徑,就不會做加法運算,而是執行二選一的多工運算,因此會在兩個LUTs的結果當中,選擇一個作為輸出。
圖1. 邏輯電路區塊示意圖

在電腦科學與程式語言的觀點,不同於標準品像是MCU、CPU等,FPGA比較偏向用「純硬體」的方式來執行運算。能夠用純硬體解決的事情,效能都會比還要使用高階語言的軟體指令還快上非常多,因為軟體還要透過轉譯成組合語言,組合語言又還要再轉譯成機械語言才能讓機器執行,而透過硬體直接操控機器當然省事不少,更加直接而快速。只不過在電腦科學領域,對人類來說,愈接近硬體的東西就愈複雜,例如機械語言的難度高於組合語言,組合語言又比高階語言困難,所以FPGA是比較難學的。以程式開發者觀點,標準品開發板所使用程式語言較高階,如C語言、C++、Java、Python是多數人比較熟悉的方式。而FPGA則因為硬體結構完全不同,因此FPGA看不懂這些大家熟知的高階語言,它看的是「硬體描述語言」,例如Verilog、VHDL之類的語言。「硬體描述語言」在一些地方和軟體高階程式語言類似,最大的區別是,硬體描述語言能夠對於硬體電路的「時序特性」進行描述,小到簡單的正反器,大到複雜的超大型積體電路,都可以利用硬體描述語言來控制,而這是軟體高階語言所做不到的。也由於FPGA比標準品如MCU強大的地方就在於執行效能更快,以及它能更好的與「特殊應用積體電路」(Application Specific Integrated Circuit,縮寫:ASIC)做銜接,在商業上能更快地推出新產品,所以在商業的潛力比MCU強(也就是說賺錢比較快),因此近幾年來FPGA成為全球商業電子公司主力的開發手段。






