芯片設計被譽為人類歷史上最細微也是最宏大的工程,芯片研發工作者需要把上千億顆晶體管集成在面積最小至指甲大小的芯片上。如此復雜的工程,從設計階段開始就錯綜復雜,很多環節相串聯,形成一個長流程,需要專業細分、領域不同的研發人員、專業人士和科學家集團隊力量協作而成并且保證每個環節的高正確度。這樣精密的研發和跨領域協作是完全不可能靠手工完成的,研究人員所仰賴的是一種名叫EDA的工具。其全稱為電子設計自動化(Electronics Design Automation)工具。正是這一工具在1983年問世,釋放了芯片研發者的創造力,把手工設計完全升級為電子自動化的設計,從而促成芯片技術發展進入大爆炸時期。
芯片設計流程
一般來說,芯片設計分為以下幾個步驟:
芯片設計環節
- 功能定義和實現:通過采用類似編程語言的硬件描述語言(Verilog)來“描述”芯片的電路寄存器傳輸級(RTL, Register Transfer Level)最終設計達成的性能目標——編寫出代碼來實現芯片的功能。
- 驗證(Verification):芯片電路是否達到預期行為和目標性能
- 邏輯綜合 (Synthesis) :把抽象的電路行為描述(硬件描述語言)自動翻譯為電路級描述(邏輯電路圖)
- 物理實現:把邏輯電路轉換成為有物理連接的電路圖,將上百億或千億元器件和電路合理的布局布線并使其互不干擾。
以上幾個步驟都完成了,芯片設計才能正式進行制造、測試和封裝。
最新的數據報告顯示,當前單個最先進工藝的芯片設計環節成本已經高于4億美金。如此高昂的成本讓芯片研發的容錯率降至冰點,也因此芯片設計幾大環節中的“驗證”,變得日益重要。
SoC芯片設計及流片成本
驗證的重要性
一、芯片進入SoC時代,驗證工具變的必不可缺
系統級芯片(SoC, System on Chip)將微處理器、模擬IP核、數字IP核和存儲器(或片外存儲控制接口)集成在單一芯片上, 是當前芯片里的主流。SoC這一概念在20世紀90年代出現,經過近30年的發展,SoC可集成的內容越來越多,晶體管數量越來越大、功能越來越多元化,使得設計原理變的異常復雜。毫不夸張的說,一款SoC設計對于一個配置齊全的、有經驗的研發團隊來說,也需要3-5年的時間才能完成全部研發工作。
高昂至上億美金的流片(Tapeout)成本,不可逆的研發時間成本,導致芯片設計的每個環節都不容許出現一點點錯誤;而且隨著SoC所集成的內容和復雜程度日益提高,驗證需要探索的空間和范圍越來越大,每一次驗證都像是一次“大海撈針”,因此驗證所需要的時間亦越來越長。EDA里的驗證工具已然必不可缺,驗證越充分,芯片的成功率就越高。
當前的驗證幾乎必須貫穿芯片設計的每個步驟,以便芯片研發團隊及時發現錯誤,保證所投入的巨大研發成本不會覆水東流或錯過最佳上市時間。據悉,在現在的SoC研發項目中,仿真和驗證的時間占了整個項目70%以上的時間,而仿真和驗證工程師也占了整個團隊的70%以上。因為只有經過充分的仿真和驗證,找出足夠多的bug,才能放心拿去流片。
二、反復驗證—驗證貫穿整個芯片設計流程
芯片在設計啟動伊始就會設定非常嚴格的設計周期和面市時間,環節一環扣一環,驗證是一個反復和交叉作業的工作內容,貫穿整個芯片研發周期,環節繁復但時間不能有任何延誤,從而造成在單位時間內的驗證任務成指數增長。并且,驗證不僅僅是在芯片設計階段,即使一款芯片已經量產出貨,驗證的工作可能依然沒有結束。
這張圖按照芯片研發的時間進程,示意了驗證的每個環節:
1、產品規劃
在研發初期首先要啟動的是驗證規劃,這是為了在產品規劃的同時即確定驗證方案和技術路線,并且保證驗證結果有一定量的調試時間并有可行的調試方案。
SoC研發時非常依賴選用一部分可復用的成熟IP核,以加快其本身的研發速度。但在選擇合適的IP核時要同時考慮的因素有很多, 功耗、性能、安全以及成本,還有IP核與IP核,IP核與其他模塊之間通訊和數據交互的界面接口,等。因此,在初期,還要為某些標準的模塊需要提前準備好驗證IP核(Verification IP,VIP)并規劃好不同的檢測點,并具體落實在各個研發階段和模塊中。
2、架構定義
SoC設計首先要定義系統的架構,其中包括但不限于定義功能、明確各IP和模塊之間的通訊協議、功耗與性能的妥協關系等等。架構定義要基于該芯片使用后所面臨經典工作場景進行假設和模擬,所以在架構定義階段,需完成兩個非常重要的驗證:
一個是不同通訊協議下的功能驗證 (Functional Verification),該驗證允許設計工程師在設計階段發現高階的協議性錯誤(bug),在設計早期以非常低的成本進行修復。而如果進入到產品階段才發現,修復的成本將會非常高。
另一個同步進行的是原型驗證(Prototyping),就是把硬件原型模擬化,提前對軟件和硬件的配合表現進行驗證。這樣提前驗證的好處是,在芯片制造前,便可以開展軟硬件協同設計,提前發現問題、檢測問題并解決問題,確保芯片在真正可使用時,研發團隊已經擁有一個成熟的軟硬件整體方案,芯片能切實支持軟件的應用,大大將研發時間提前,提升整體研發效率。
3、流片前驗證
前文提到,SoC設計為了縮短研發周期會采用可復用IP核和新IP。每一個IP核驗證都在各自單獨的環境中完成,以確保單獨IP功能正確;但在復雜的SoC驗證鏈中,不僅需要單點驗證,更需要有多種驗證手段進行系統性驗證,確保各種IP核以及其他模塊能協同工作。
IP驗證中慣用動態仿真(Dynamic Simulation)和形式化驗證(Formal Verification)。二者在使用時都需要基于單獨的驗證基礎環境,前者需要模擬出基礎環境;后者要通過數學建模,在數字世界里搭建出環境假設和目標斷言。驗證工程師通過比較結果、仿真波形比對最終來判定測試用例是否通過。
流片前驗證是SoC研發過程中耗費時間和資源最大的驗證環節,而且是一個增量的連續過程,隨著設計成熟度和設計復雜性的提高而提高。
4、硬件加速
嚴格意義上來說,硬件加速(Emulation)的使用是在流片前,屬于流片前驗證的一部分,但參與過芯片設計的研發者都知道,這個環節是流片前驗證和流片后驗證的橋梁,它將還處于RTL級別的設計放到一個可重構的虛擬硬件環境中,讓驗證速度得到成千上萬倍提升,同時也讓軟硬協同成為可能。利用這種技術,我們可以在數小時之內,將操作系統在RTL模塊上啟動起來。
驗證速度的提升,讓驗證的效率大幅提升,對驗證成本的貢獻是無可比擬的。俗話說,有得必有失,有失必有得。驗證工程師發現,驗證速度的提升的同時,能夠觀察的信號將會急劇減少,并且那些需要被觀測的信號,必須在產生FPGA比特流之前就要定義好,一旦沒有定義,重新編譯可能又需要耗費好幾個小時。
為了解決上述問題,現在EDA公司已經推出了硬件加速器(Emulator),硬件加速器在仿真速度和可觀測性之間進行權衡和取舍,速度上向原型驗證靠攏,而可觀測性向仿真器靠攏,在仿真器和原型驗證之間增加一個驗證產品,但是因為硬件加速器結構特殊,價格昂貴,只有芯片利潤相對豐厚的大企業才用得起。
5、流片后驗證
流片后驗證一般發生在芯片實際生產結束以后,在芯片進行量產之前,將測試批芯片在實驗室進行各種測試,確保功能、時序、性能、功耗、物理應力得都符合設計預期,在完成所有的驗證以后,再進行批量生產。如果在這個階段發現錯誤,其修復的成本將會非常高昂,甚至成為不可能。如果一個錯誤被確認為功能錯誤,設計團隊就必須對進行修復,修復錯誤的方法有多種,包括利用系統微碼來避免失效的條件。但如果錯誤必須在硬件層面進行,那就需要重新流片了。
驗證技術的挑戰
隨著晶體管的數量和設計的復雜度在不斷提高,模塊增多,要找到它們中間最佳的互動可能性必須通過更充分地驗證才能找到最優方案。芯片設計的各階段,需要不同的驗證方法和多種驗證工具相互配合,解決不同的問題。
以5G、大數據、智能駕駛、物聯網為代表的新興市場讓芯片的類型和數量都有了指數式的增長。但增長的背后,是對SoC研發周期的更高要求。如何在更少的研發時間里完成更多的驗證工作?一是提升驗證工具的可擴展性,讓驗證成為一個“交鑰匙”一樣的工程;二是讓設計自身具有可配置性,針對不同的應用場景,可以通過升級底軟或固件、或者是通過硬件重構來解決出現的問題。
1、工具可擴展性
工具的擴展性是解決繁重驗證的一個重要手段,可是工具的擴展性本身就有很大的技術問題。以形式化驗證為例,盡管自動化技術已經一再升級,然而與SoC系統復雜性的提升速度相比,還是有很大的差距。因為這種技術推進的差距,讓驗證技術開始越來越向解決特定問題演進。如形式化驗證越來越集中用來解決安全和死鎖的問題,而不是用其作為一個通用的驗證技術。這就變相增加了驗證的工作量,因為需要使用不同的驗證技術來配套使用,與提高工具可擴展性的目標完全背道而馳。
2、驗證標準的缺失
驗證標準也是一個關鍵的挑戰。驗證標準就是到底要驗證什么,為什么要這樣驗證。傳統的驗證標準主要依賴需求,將SoC應具備的表現、或者是某些場景下期望的行為規范定義好,甚至將一些不清晰的行為模糊定義,或者是干脆不定義,留下灰色地帶;然而這些有意為之的模糊定義在當前芯片設計中缺成了一個大問題。
微處理器(MPU)設計公司,都有一個專門的仿真器來仿真指令系統結構(ISA),并將此作為驗證標準。可是SoC設計因為牽扯到設計不同的功能模塊,標準也需要跨模塊,單純的指令仿真不足以驗證這類芯片設計的正確性,從而讓驗證標準無從定義和參考。
3、低功耗的廣泛使用
隨著物聯網時代的開啟,所有的SoC都要必須在設計中考慮低功耗問題,使得電子產品的待機時間更長。在Soc設計中采用門控功耗和門控時鐘技術成為使用最廣和效率最高的功耗節省方式。門控功耗依靠關閉那些不用的模塊節省功耗,而門控時鐘則是通過關閉那些不需要激活的模塊和寄存器來縮減功耗。
目前產業界已經開發了標準語言用以支持RTL仿真中的功耗行為,但是卻大幅提升發驗證工作復雜性。
對一個低功耗設計而言,設置數十個電壓域和數千種功耗模式是非常常見的行為,驗證規劃需要確保在所有功耗模式下電路的行為皆正確,其復雜程度和驗證負荷可想而知。
4、芯片安全要求的提高
現今社會對信息安全的要求提升到了一個從來未有的級別。萬物互聯的背面是我們往往對電子產品鏈接了那些設備都無從而知,如冰箱、電飯煲甚至燈泡等,導致無法定義危險是什么,如何去驗證更是無從談起。
另一種安全的維度是功能安全。系統的突然失效不能傷害到芯片,而這種失效在汽車和航天產業尤為突出。即使芯片經歷了突發事件,也要確保這些芯片不受損壞。
這種種高安全要求都對驗證提出了新挑戰。
5、軟硬件協同驗證的挑戰
在傳統的PC世界,硬件和軟件總是非常容易區分清楚,因此軟件驗證和硬件驗證也在各自獨立的流程中進行,楚河漢界異常明確。
然而科技進步使得這種界線變得越來越模糊,甚至在許多的情形下,硬件和軟件已經密不可分,比如智能手機和智能汽車。沒有相應的固件和軟件運行,有些芯片模塊根本無法得到期望的電路行為,這會從不同的層面改變驗證的方法學。
如今軟硬件的無縫連接,直接決定了軟件的開發節點需要配合RTL的進程。反過來,驗證軟件的時候,亦需要硬件模型足夠穩定、成熟且快速。如何一并對硬件和軟件的系統功能進行驗證,除了驗證所必須的環境外,確認設計錯誤發生的地方和機理已經成為一個必須要面對的課題。
國產空白之優
盡管近十年來,國產EDA工具取得了一些成績,但我們也要正視存在的差距。差距主要體現在四個方面:
- 缺乏數字芯片設計核心工具模塊,無法支撐數字芯片全流程設計。
- 對先進工藝支撐還不夠,除了個別兩三個工具能支持14納米、7納米、5納米之外,其它很多工具都做不到。
- 缺乏制造及封測EDA系統,無法支撐芯片制造和封測廠商的應用需求
- 核心驗證工具和驗證平臺缺失,沒有完整的EDA工具鏈
根據最新的調研數據,國產EDA工具在國內市場的占有率可謂慘不忍睹,還不到1%,只有約0.8%。概倫執行副總載兼博達微總經理李嚴峰在《再談本土EDA競爭力順便聊聊DTCO在中國落地》一文中指出,EDA中國市場份額全球占比并不高,市場容量也不大,國際競爭對手環繞,掙錢并不容易,沒有市場和利潤的支撐,光靠政策面支持不能持久。同時指出,在EDA的用戶群中,最好的設計和制造公司都在海外,真正卡脖子的工具需要與先進工藝和設計一同迭代,這個不是靠錢能解決的。不管戰略還是要解決卡脖子問題,EDA還是集成電路的一環,集成電路的競爭力離不開市場,EDA的重點還是圍繞市場做有競爭力的產品和技術。
回到驗證工具這個正題。通過數十年的發展,驗證工具一直伴隨市場的需求在向前發展。目前主要的驗證方式非常繁復,包括前文所提到的動態仿真(Dynamic Simulation)、原型驗證/硬件加速(Prototyping and Emulation)和形式化驗證(Formal Verification)之外,還有很多其他方式方法。在實際工作中,如何選擇驗證方式,是否能有一個可反復使用的驗證平臺,實現這些不同驗證方法的跨越,是當前芯片研發者最關心的話題。
目前國際EDA巨頭基本上都在動態仿真、硬件加速、原型驗證和形式化驗證上能夠提供完整的解決方案,并且還在通過方法學和旁類技術的應用來提升驗證的效率。
和大多數EDA工具一樣,中國在驗證工具的技術儲備幾乎為“零”,近年國內EDA公司在驗證上有所探索,但是產品主要還是集中在后端實現和芯片測試階段,SoC設計過程中驗證負擔最重、使用頻度最高的數字集成電路驗證EDA工具套件,國產技術依然是“零”,國內芯片設計公司在研發SoC時,依然100%使用國際EDA巨頭的相關驗證工具。
小結
驗證(Verification)的重要性是證實(Validation)我們永遠不會“不可能出錯”,這也是驗證之痛,因此我們只能決定何時是“足夠接近沒機會出錯”,然后開始主觀標準和實用主義之間的權衡。
不同類型的SoC設計可能需要不同的驗證策略、工具和測試環境,大型SoC設計需要復雜的流程,多種工具包括虛擬原型、模擬器、仿真器和原型驗證等理想化地集成在一起并可擴展,并且可以在不同的驗證階段重復使用測試。
盡管國產驗證工具起步階段,發展任重道遠。但隨者芯片設計的日益復雜化,驗證工具更趨于多樣化。是否也給國產驗證工具帶來新機遇呢?
評論
查看更多