驗證——當前SoC芯片設計難以承受之“重”

芯片設計被譽為人類歷史上最細微也是最宏大的工程,芯片研發工作者需要把數百億顆晶體管集成在面積最小至指甲大小的芯片上。

如此複雜的工程,從設計階段開始就錯綜複雜,很多環節互相串聯,形成一個長流程,需要專業細分、領域不同的研發人員、專業人士和科學家集團隊力量協作而成並且保證每個環節的高正確度。這樣精密的研發和跨領域協作是完全不可能靠手工完成的,研究人員所仰賴的是一種名叫 EDA的工具。其全稱為電子設計自動化(Electronics Design Automation)工具。

正是這一工具在 1983 年問世,釋放了芯片研發者的創造力,把手工設計完全升級為電子自動化的設計,從而促成芯片技術發展進入大爆炸時期。

一般來說,芯片設計分為以下幾個步驟:

验证——当前SoC芯片设计难以承受之“重”

1. 功能定義和實現:通過採用類似編程語言的硬件描述語言(Verilog)來“描述”芯片的電路寄存器傳輸級(RTL, Register Transfer Level)最終設計達成的性能目標——編寫出代碼來實現芯片的功能。

2. 驗證(Verification):芯片電路是否達到預期行為和目標性能。

3. 邏輯綜合(Synthesis):把抽象的電路行為描述(硬件描述語言)自動翻譯為電路級描述(邏輯電路圖)。芯

4. 物理實現(Physical Implementation):把邏輯電路轉換成為有物理連接的電路圖,將上百億或千億元器件和電路合理的佈局佈線並使其互不干擾。

5. 設計籤核(Sign-off):在芯片完成物理實現以後,芯片在物理層級所表現的時序性能和功耗指標是否能滿足預期的目標,版圖上的線條尺寸是否符合製造工藝的的嚴格要求,都需要確認無誤以後才能正式流片生產。芯思想

以上幾個步驟都完成了,芯片才能正式進行製造、測試和封裝。

最新的數據報告顯示,當前單個最先進工藝的芯片設計環節成本已經高於 4 億美金(見下圖)。如此高昂的成本讓芯片研發的容錯率降至冰點,也因此芯片設計幾大環節中的“驗證”,變得日益重要。

验证——当前SoC芯片设计难以承受之“重”

本文就驗證的重要性進行一個淺述。

一、芯片進入 SoC 時代,驗證工具變的必不可缺芯思想

系統級芯片(SoC- System on Chip)將微處理器、模擬 IP 核、數字 IP 核和存儲器(或片外存儲控制接口)集成在單一芯片上, 是當前芯片裡的主流。SOC 這一概念在 20 世紀 90 年代出現,經過近 30 年的發展,SoC 可集成的內容越來越多,晶體管數量越來越大、功能越來越多元化,使得設計原理變的異常複雜。毫不誇張的說,一款 SoC 設計對於一個配置齊全的、有經驗的研發團隊來說,也需要 3-5 年的時間才能完成全部研發工作。

高昂至上億美金的流片(Tapeout)成本,不可逆的研發時間成本,導致芯片設計的每個環節都不容許出現一點點錯誤;而且隨著 SoC 所繼承的內容和複雜程度日益提高,驗證需要探索的空間和範圍越來越大,每一次驗證都像是一次“大海撈針”,因此驗證所需要的時間亦越來越長。EDA 裡的驗證工具已然必不可缺,驗證越充分,芯片的成功率就越高。

當前的驗證幾乎必須貫穿芯片設計的每個步驟,以便芯片研發團隊及時發現錯誤,保證所投入的巨大研發成本不會覆水東流或錯過最佳上市時間。據悉,在現在的 SoC 研發項目中,仿真和驗證的時間佔了整個項目 70%以上的時間,而仿真和驗證工程師也佔了整個團隊的 70%以上。因為只有經過充分的仿真和驗證,找出足夠多的 bug,才能放心拿去流片。

二、反覆驗證—驗證貫穿整個芯片設計流程

芯片在設計啟動伊始就會設定非常嚴格的設計週期和麵市時間,環節一環扣一環,驗證是一個反覆和交叉作業的工作內容,貫穿整個芯片研發週期,環節繁複但時間不能有任何延誤,從而造成在單位時間內的驗證任務成指數增長。並且,驗證不僅僅是在芯片設計階段,即使一款芯片已經量產出貨,驗證的工作可能依然沒有結束。芯思想

這張圖按照芯片研發的時間進程,示意了驗證的每個環節:

验证——当前SoC芯片设计难以承受之“重”

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 工具取得了一些成績,但我們也要正視存在的差距。差距主要體現在四個方面:芯思想

1. 缺乏數字芯片設計核心工具模塊,無法支撐數字芯片全流程設計。

2. 對先進工藝支撐還不夠,除了個別兩三個工具能支持 14 納米、7 納米、5 納米之外,其它很多工具都做不到。

3. 缺乏製造及封測 EDA 系統,無法支撐芯片製造和封測廠商的應用需求。

4. 核心驗證工具和驗證平臺缺失,沒有完整的 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 設計需要複雜的流程,多種工具包括虛擬原型、模擬器、仿真器和原型驗證等理想化地集成在一起並可擴展,並且可以在不同的驗證階段重複使用測試。

儘管國產驗證工具起步階段,發展任重道遠。但隨著芯片設計的日益複雜化,驗證工具更趨於多樣化。是否也給國產驗證工具帶來新機遇呢?

鳴謝

本文在成稿過程中得到電子科技大學電子科學與工程學院副教授黃樂天、西南交通大學信息學院電子工程系副系主任邸志雄的幫助。特此感謝!


分享到:


相關文章: