特定應用積體電路(ASIC)已是行之有年的統包設計(Turnkey Design)方案。如今人工智慧(AI)應用普及,ASIC似乎將在其中發揮其優勢並扮演重要角色。
特定應用積體電路(Application Specific Integrated Circuit, ASIC)已是行之有年的統包設計(Turnkey Design)方案。如今隨著人工智慧(AI)應用的普及,與其他超大型積體電路(Very Large Scale Integration, VLSI)技術相比,ASIC的優勢似乎更加明顯。
ASIC優缺點分析
CPU的通用型指令集(Instruction Set)可以支援各種應用所需的運算,但電路設計的複雜度高且耗電;與之相對,ASIC的指令集被限制只支援特定的運算,因此十分適合深度學習使用,能針對特定指令集執行大量的分散式平行運算,較不耗電。
圖1 按照應用屬性區分CPU、GPU、FPGA、ASIC
圖1按照晶片的應用屬性(通用型或專用型)來區分CPU、GPU、FPGA、ASIC。與其他類型的晶片相比較,ASIC具有下列優勢:
- 為特定應用量身定做:只針對特定應用提供最佳化功能,對AI應用而言,能對類神經網路(Artificial Neural Network, ANN)進行微調,例如大型矩陣(Matrix)的乘法運算、卷積(Convolutipn)作業。在這些方面,ASIC比通用型處理器更有效率。
- 省電:對於需要大量運算力的AI應用而言,省電是非常重要的事。電源管理和散熱對資料中心(Data Center)和邊緣裝置(Edge Device)尤其重要。
- 高速處理:由於可以將ASIC設計成直接在硬體上執行特定的AI演算法,省去了必須透過中間層處理的過程,與通用型處理器(如CPU和GPU)相比,ASIC的處理速度更快、延遲時間更短。
- 布建成本不高:ASIC設計完成後,可以用較低的成本生產,在這方面,其他VLSI無法與其相比。因此,ASIC適合大型AI應用的布建或部署,雖然初期投入的設計成本通常比較高。
- 易與其他系統整合:由於ASIC體積小,很容易和行動式、嵌入式裝置整合在一起。因此,ASIC適合應用於空間較狹小的自駕車、無人機、物聯網(IoT)裝置上。
- 通訊保密:ASIC是特製的積體電路,因此能視需求結合不同的特殊編碼技術、安全的開機機制,來保護AI的應用資料。
- 擴展性高:ASIC可以支援高功率、高效能的資料運算,例如雲端資料中心。同時,ASIC也能支援低功率、較小型的邊緣裝置的運算。
不過,ASIC也具有下列缺點:
- 初期投入的研發成本高:這包含設計用工具、工程資源、導入製造等費用。
- 開發時程長:從設計、測試到生產,所花費的時間較長,可能會影響產品上市的預定時間。
- 設計的靈活性低:ASIC一旦交付生產,電路就固定了,無法使用程式重新設計或修改設計。在靈活設計方面,ASIC無法和FPGA相比。因此,ASIC無法支援需要經常修改或更新設計的應用領域。
- 高風險:若設計有誤,修正和重新製造所需的成本和時間可能十分可觀。
- 仰賴規模經濟:ASIC只有在大量生產時,才具有成本效益。對於較少的生產量,高昂的一次性工程(Non-recurring Engineering, NRE)費用可能使成本過高。
- 設計的複雜度高:設計ASIC需要專業知識和技能,使其開發流程更加複雜且具有挑戰性。
目前,業界已有張量處理單元(Tensor Processing Unit, TPU)、深度學習加速器(Deep Learning Accelerator, DLA)上市,這兩者都屬於ASIC,是為了加速機器學習或針對特定應用而設計。TPU分為兩種,一種是供雲端伺服器使用的TPU,專門出租給客戶使用,讓客戶不需要另外購買硬體設備,即能充分利用TPU的機器學習能力;另一種是供邊緣裝置使用的TPU,以模組化設計,藉助應用開發工具即可將TPU模組整合至客戶自己設計的硬體裝置內。DLA同樣分為兩種,一種是在通用型或半通用型處理器中即內建DLA核心,如此可加快機器學習的速度;另一種是將DLA核心整合至客戶自己設計的ASIC或系統單晶片(SoC)中,但這種整合技術需要事先獲得授權。
電子設計自動化
晶片從設計到交付製造(或稱之投片(Tape-out))都需要電子設計自動化(EDA)軟體。因此,在討論ASIC的開發流程之前,須了解EDA的開發流程。使用EDA工具開發晶片是非常繁複的過程,大致上,EDA的開發流程可區分為下列八個循環設計階段:
- 規格和設計描述(Design Entry):定義功能和限制條件,接著使用硬體描述語言(HDL)設計和描述電路,例如VHDL或Verilog。
- 暫存器傳輸級(RTL)設計和模擬(Simulation):設計高階的暫存器電路,並透過模擬驗證功能。
- 合成(Synthesis):將RTL設計轉成閘級(Gate-level)的網表(Netlist)。
- 可測性設計(DFT):將具有測試功能的特殊結構和電路結合,例如掃描鏈(Scan Chain)和內建自我測試(BIST)機制,以便製造後進行測試。
- 布線(Place)與繞線(Route):決定邏輯閘(Logic Gate)的最佳位置,並將它們連接起來。
- 時序分析(Timing Analysis)和最佳化:確保設計的電路符合時序規格的要求,並進行最佳化。
- 實體驗證(Physical Verification):檢查是否違反設計規則,並確保布局(Layout)與電路圖(Schematic)相符。
- 交付矽晶圓廠製造:設計完成,產出製造用資料。
通常,EDA的開發流程遵循從第一階段到第八階段的順序,例如在進行布線與繞線之前,必須先合成網表。不過,依規格需求和使用的EDA工具的不同,能夠彈性調整這個順序,例如在進行合成階段之前,需要重覆執行RTL設計和模擬,不斷對所設計的電路進行微調;又例如在布線與繞線階段,若發現時序或布局問題,可能需要回到合成階段進行調整。若在時序分析階段發現時序問題,就需要回到合成階段或布線與繞線階段,進行必要的調整。在實體驗證階段,若發現違反設計規則、布局和電路圖不符,就需要回到布線與繞線階段。
此外,EDA也包括功能驗證(Functional Verification)。狹義的功能驗證在RTL設計與模擬階段執行,是為了檢驗VHDL或Verilog程式碼的邏輯,並符合規格需求。廣義的功能驗證則擴展至其他階段,例如在規格和設計描述階段,能對設計規格進行初步的驗證;在合成階段,能確保合成的網表具有規格所需的功能;在DFT階段,能檢驗出測試用的特殊結構是否會改變原電路的設計功能;在時序分析和最佳化階段,能檢查時序限制(Timing Constraint)是否會造成電路功能錯誤;在實體驗證階段,能確保更改實體設計不會產生電路功能的錯誤。EDA的功能驗證是連續的作業流程,幾乎存在於EDA開發流程中的每一個設計階段,以確保整體開發流程的設計正確性。
矽晶圓廠的晶片製造流程大致可分為:半導體元件製造(Device Fabrication)、晶圓測試(Wafer Test)、封裝(Packaging)、半導體元件測試(Device Test)。這裡所謂的半導體元件包含廣泛,小至電子零組件,例如二極體、一般用途的雙極性電晶體(BJT)、電源管理用的MOSFET或IGBT電晶體等,大至如CPU、SoC等微處理器(Microprocessor),還包含DRAM、SDRAM、FLASH等記憶體、ADC或DAC類比裝置、射頻放大器、射頻開關、感測器、ASIC、FPGA等。圖2為VLSI從EDA開發到交付矽晶圓廠製造的流程。
圖2 VLSI的開發和製造流程
ASIC開發流程
ASIC的開發流程也包含上述的八個循環設計階段,此外,在規格定義階段和RTL設計和功能驗證階段之間,增加了架構設計(Architecture Design)階段,如圖3所示。
圖3 ASIC的開發流程
以下列出ASIC開發流程和EDA開發流程最大的不同:
- 規格定義和市場分析:開發ASIC之前,需要定義更詳細的技術規格並完成市場分析,以確保設計出來的ASIC能夠符合未來趨勢和客戶需求。
- 架構設計:此為開發ASIC的關鍵階段。架構設計和功能區塊的劃分,攸關ASIC的性能和成本。
- 功能驗證:由於ASIC針對特定應用而設計,且此類應用通常十分複雜、特殊,因此開發ASIC需要更廣泛的功能驗證。
- 最佳化:ASIC開發流程特別注重功率、性能和面積(Power, Performance, and Area, PPA)的最佳化。
- 簽核檢查(Sign-off Check):ASIC開發包含了嚴謹的簽核檢查作業,以確保所設計的電路可製造且符合所有規格需求。
以ASIC開發DLA
RISC-V是精簡指令集電腦(Reduced Instruction Set Computer, RISC)的縮寫,相對於開源軟體,它是一種開源硬體。目前看來,使用RISC-V核心的開放原始碼和ASIC來開發DLA,似乎是未來的趨勢。
圖4為採用脈動陣列(Systolic Array)的DLA內部架構。在這個虛擬的DLA內部雖然包含控制器(Controller),但此控制器是連接至外部的RISC-V核心,接受RISC-V指令的控制。圖4中也包含了分頁表查找(Page Table Walk, PTW)訊號,當DLA擷取記憶體時,可能需要將虛擬位址轉換成實體位址,這需要透過分頁表來完成,因此,當PTW訊號產生時,代表DLA正在進行位址轉換。
圖4 採用脈動陣列的DLA內部架構
圖5是脈動陣列的工作範例,其可執行兩個3*3矩陣的相乘。從使用者介面輸入的矩陣相乘程式被轉換成RISC-V指令,並傳送至脈動陣列, 它能立刻完成計算。每個處理單元(Processing Element, PE)內部具有緩衝器,可以儲存前幾次運算的結果。例如,3*3矩陣的a、b相乘等於矩陣c,在T=7時,最後一個PE的前兩次計算累加的值是a2,0*b0,2+a2,1*b1,2,加上這次計算的值a2,2*b2,2,這個PE最後運算的結果就等於a2,0*b0,2+a2,1*b1,2+a2,2*b2,2,這正是c2,2的值。


圖5 脈動陣列的工作範例:3*3矩陣相乘,從T=0至T=7的計算變化(但T=2至T=6並未在此列出)
脈動陣列具有平行運算的特性,適合DLA應用。圖5所舉的脈動陣列範例是簡單的構造,複雜的脈動陣列可由許多拼塊(Tile)構成。拼塊由許多PE構成,如圖6所示。由於此DLA是和RISC-V核心結合,脈動陣列的大小和複雜度可以按照規格需求進行調整。
圖6 脈動陣列由拼塊構成,而拼塊則是由PE構成
圖7顯示以另一種RISC-V虛擬平台開發或模擬DLA,其同樣為虛擬DLA,可允許設計人員在投入昂貴且耗時的實體ASIC製造流程之前,先對DLA的架構和功能進行建模、模擬和驗證。設計人員還能在這個平台上面,開發驅動程式和應用軟體,檢驗軟硬體的相容性和系統效能。
圖7 以RISC-V虛擬平台開發DLA
不過,上述的兩個RISC-V虛擬平台都只能產出虛擬的DLA,皆是過渡產品,通常在模擬環境完成驗證後,會先使用FPGA實現DLA,進一步驗證和微調,最後仍須按照圖2和圖3所列出的開發流程,直到完成量產、封裝、測試和布建。