天天看點

幹貨|降低晶片流片失敗風險的“七種武器”

随着SOC晶片的規模和功能的不斷急劇膨脹,SOC驗證一般可以占到整個項目的60%以上,驗證已成為了整個SOC晶片開發的瓶頸。晶片驗證不充分,輕則重新投片,時間資本上損失慘重,重則資金耗盡,公司歇業。晶片江湖的也有“七種武器”,這七種武器合理運用,可以最大限度確定晶片驗證充分,降低晶片流片失敗的風險。

一:UVM

UVM不是一種程式設計語言,UVM(Universal Verification Methodology)而是驗證方法學;

UVM雖然不是一種語言,但是UVM是以systemverilog類和庫的驗證平台架構呈現的,因為在晶片驗證領域非常流行,成為了一個事實上的驗證平台标準;

正所謂:驗證不識UVM,便稱英雄也枉然;

賈老闆成立一個AI晶片公司,研發一款AI晶片,于是請UVM大師指點如何保證晶片正确;

UVM大師說,我對你的晶片一無所知,不能告訴你晶片正确與否,但是,我可以驗證A=B;通過衆多驗證向量驗證晶片A和參考模型B,比較兩者輸出結果是否一緻,如果一緻,是以A=B;是以驗證結論是:晶片A和參考模型B功能一緻,晶片A是滿足設計要求的,進而保證晶片正确;

賈老闆直接就懵圈了,怎麼還多出來一個B的事情;

(注釋:A和B功能是一樣,并不代表A和B相等,本文采用A=B,用公式來簡化這個意思);

賈老闆說:像軟體測試一樣,有測試大綱,根據測試項一項一項測試看看功能對不對,UVM不是這樣嗎?

UVM大師:非也,引入了一個變量B,A和B的功能在各種激勵下輸出一緻,來推斷A=B;這個就是驗證的方法學精髓之一;

A就是待測試晶片,也叫DUT(design under test),也就是設計工程師,絞盡腦汁,頭發掉光,設計出來的晶片(或IP);

B的就是參考模型,RM(reference model),參考模型,小名狗剩(Golden);

看到這裡,賈老闆就有了第一個問題:參考模型B從何而來;

UVM大師說:賈老闆問了這個問題,當然從賈老闆而來;因果循環,皆有定數;

賈老闆成立一個AI晶片公司,請了一個AI領域的大師,AI大師苦思冥想,悟道新算法,有效提升性能,降低存儲代價,發表了CVPR(計算機視覺與模式識别的頂級會議),然後AI大師用python實作了這個算法;然後賈老闆招了一批 IC設計工程師;把這個算法實作成了晶片(IP);

UVM大師說,看,這個晶片(IP)就是 DUT,是A,而原來的AI大師的算法 python描述,就是reference model,是B;

UVM的工作就是來驗證A=B;如果二者功能不一樣,那說明A晶片設計錯了,如果驗證A=B,那麼UVM大師就功德圓滿了,那麼晶片可以流片了;

現在這個流程是不是清晰多了;

算法大師設計了算法,設計工程師設計了晶片,UVM大師通過驗證方法學(UVM)推斷了兩者一緻,完美,可以流片了;

且慢,第二個問題:怎麼來驗證A=B

UVM提供了一種可移植的現成的架構可以同時将測試向量發給A和B,通過構造測試向量,同時發給A和B,然後收集A和B的輸出,比較輸出結果是否一緻。如果比較結果一緻,則驗證成功;否則,驗證失敗;

如果是僅僅對于一個測試向量CASE1,A和B的輸出結果一緻,是沒有辦法說明A=B,隻能說明:

IF (CASE1) A=B

是以,驗證大師就需要設計N個測試向量,CASE1到CASE N

IF(CASE1->CASE N) A=B

這些測試向量(激勵)的發送過程,就類似一個加特林機關槍,然後發送不同類型的彈藥給A(DUT)和B(RM),這些彈藥可以是普通子彈,也可以是榴彈,炮彈,飛彈;

設計各種彈藥,然後賦予了這些彈藥各種特性,比如大小,火力,距離等等,每個都不同,但是這些彈藥繼承原來的彈藥的特性,不用從頭開發,簡單,省事;

一方面這些彈藥可以設定成為随機彈藥,就是同一個彈藥,但每次發射都不一樣,彈藥自身具有随機性,例如一個彈藥可對随機任意初速度,每次發射,可以檢查目标裝置在任意初速度下,是不是都表現正常,同理也可以設定其他随機性;

另一方面也不能完全随機,畢竟完全随機的目的性太差,需要限制(constraint)這個彈藥的随機性,例如打蚊子,就不需要炮彈;打航母,用手榴彈也不靠譜;不能是完全随機,通過限制随機性,可以增加彈藥的目的性;

構造各種的彈藥,看看A和B的反應是不是一緻;如果一緻,萬事大吉;如果不一緻,那就是有bug,則需要debug,看看究竟為什麼A和B為什麼不一緻,回報給設計者來修改原來的設計(DUT),直到兩者一緻;

現在,第三個問題來了,到底構造多少CASE才能說明A=B;

子曰:驗證時間也有涯,而驗證case也無涯,以有涯随無涯,殆已;

但是賈老闆不管,他會直接問,大師雖然構造了這麼多驗證用例,但是這些驗證用例就能說明A=B了嗎,驗證是沒有盡頭的;

UVM驗證大師說:賈老闆請看,AI算法大師已經描述了100個功能點,我已經按照這100個功能點設計了100個驗證用例,全部比對都成功了,說明功能全覆寫;另外,晶片設計的每一行,每個狀态機狀态,每個分支,每個條件全都覆寫到了,說明再無補充測試CASE的必要了;

見賈老闆似懂非懂,UVM大師解釋道:UVM大師已經用加特林機槍,已經對這個待測對象的上上下下,左左右右都攻擊過一遍,炮彈,榴彈,手槍彈,機槍彈全部都用上了;現在A和B在這些攻擊之下,表現都一樣,則證明了A=B;

賈老闆說,明白了,估計A和B都能死的透透的,沒有補槍的必要了;

(注: 功能覆寫率和代碼覆寫率100%,并不是驗證的終點;因為有些功能點不能被功能覆寫率所保證,例如也要考慮邊界,異常,特殊檢查等,本文不再展開;代碼覆寫率的意義更多的是指導驗證工程師在哪些方面增加case;)

有參考模型要比,沒有參考子產品就制造參考模型來比,沒有檢查比較的驗證項就是一個啞彈(無效的case),不能起到作用,還有反作用,就是以為驗證覆寫到了,實際上沒有,實為UVM的大忌;

了解了UVM的思想,其實不局限于使用systemverilog來驗證,隻不過UVM的平台架構,各種庫已經非常完善,通過移植這個架構,可以快速搭建符合每個晶片要求的驗證平台;另外通過UVM平台也可以作為一個驗證平台通路,外部可以通過其他的語言例如(python,C,C++)等等來設計彈藥,然後UVM平台将A(待測對象)和B(參考模型)輸出也可以通過UVM平台傳遞給其他的驗證語言來比較,這樣就UVM平台完全就是通路的角色,彈藥(測試向量産生)和比對都可以用其他語言完成(如python等)。兵無常勢,水無常形,得道思想,随心而用;

二:VIP

聽了UVM大師的教導,賈老闆公司的晶片驗證工作,似乎走上了正軌,但是,在內建多個IP之後,這些高速的IP的驗證面臨很大的問題;

例如買的DDR,PCIe,MIPI,UFS,AXI接口或者AMBA總線等,這些設計不論是驗證case還是參考模型,都非常複雜。遠超一個初級設計公司所能接受從頭開始驗證工作量,一句話,按照現有的項目計劃,根本搞不定。現在賈老闆有兩個選擇,一個是團隊慢慢摸索,逐漸熟悉,那産品上市時間就不可控;另一個是掏錢再買VIP;

這個VIP可不是賈老闆的在機場或者KTV的身份象征,而是專門用于驗證的IP;做SOC不但需要買IP,還需要買VIP;賈老闆真是覺得上了一條賊船,做晶片幹什麼都要花錢;

這些VIP直接都是原生的system verilog/UVM,内置了驗證計劃和覆寫率,以及一些測試套件,并且符合這些協定規範;所有的晶片标準外設,例如DDR、HBM、eMMC、UFS、AMBA、MIPI、SDIO,SAS、SATA,PCIe,USB。隻有你想不到,沒有VIP提供商做不到;

這個就類似于,賈老闆在想進階為俠客,買了一把屠龍刀(接口IP),同時還要買一本刀法十八式(VIP);否則自己摸索熟悉這口寶刀的成本太高了;隻要按照這個刀法十八式(VIP)全部跑下來,說明屠龍刀(IP)沒有問題,可以去江湖上曆練一番了;

VIP的錢不是白花的,可以起到事半功倍的效果,每個高速IP內建到整個SOC後,按照VIP的提供所有case跑一遍,說明兩個事情,一,這個IP沒有問題,二,IP的內建沒有問題;快速高效,加快驗證和收斂的速度;

标準的東西都有标準的做法,标準的接口都有符合相應标準的VIP;自己從頭來驗證,即不明智,也會空耗費時間。最大限度利用已有經驗成果(IP和VIP),是晶片能夠越做越複雜的基石;什麼東西都從頭開始做,特别類似标準接口的設計和驗證,所有都是自研,陷入自我感動,偏離了晶片為了給客戶創造價值的初衷;

三:軟硬協同

賈老闆讓工程師開發一個當今世界上最牛的終端AI晶片,裡面cpu, ddr, 總線,AI處理器,mipi,wifi網絡全都有,處理性能要求達到世界第一,賈老闆可以出去吹牛。

自研的AI處理器的驗證是通過UVM證明了A=B,完美;

外設可以通過VIP,把VIP的流程跑一遍,沒有問題,完美;

但是,這就夠了嗎?

這個事情就面臨一個問題,這個大晶片SOC的參考模型在什麼地方?還記得UVM所需要的那個B嗎?誰又能來搞個參考模型B出來比對一下?不是任何情況下,都有一個完美的參考模型可以來比對;晶片核心應用場景是mipi采集來的圖像,緩存到ddr中,通過ai處理器識别成潛在犯罪分子,然後把犯罪分子圖像由cpu控制通過網絡上傳到背景。所有部件的都參與上了,這需要怎麼驗證?

所有這一切都需要軟體和硬體配合才能實作場景的驗證;

在複雜的SOC系統設計中,進行硬體設計驗證、軟體設計驗證的同時,實作軟硬體互動的設計與驗證成為縮短設計周期,盡早完成系統設計的關鍵。通過CPU的軟體以及AI處理器的軟體和UVM平台配合,将整個設計流程通過軟體實作,然後将軟體跑在整個驗證平台上;

軟硬協同仿真,聽起來起來非常高大上,實際的操作過程中,UVM平台就是搭建了一個軟體的測試平台,UVM所作工作不多,一種通常做法是把軟體的編譯檔案走後門下載下傳進去(UVM也要走後門,backdoor,這是UVM術語,不用增加驗證時間,直接将BIN檔案寫到RAM);剩下就開始軟體工程師的表演了;

這裡的軟體流程,可以是MCU一段程式設計,也可以是MPU的linux,甚至可以是andriod,不論複雜與否,這個軟硬協同,除了UVM的平台,更有大量的軟體程式設計工作;是以很多軟體工程師,也可以參與SOC的晶片驗證,就是這個道理;

軟硬協同目的就是讓軟體開發人員提前進場,好比新設計一棟房子,家具軟裝在設計的時候就要安排好,提前擺一擺,别房子建完了,發現沒有安裝家具軟裝的空間,業主不買單,那設計者的麻煩就大了;

除此之外,軟體開發人員的努力不是單單為驗證晶片所準備的;這些軟體,可以作為SDK提供給使用者使用,也是晶片整個産品的一部分;軟硬系統驗證是一個沖突的集合體,即是通過軟體驗證硬體,又是通過硬體驗證軟體;

1:通過軟體驗證硬體;

這個很好了解,軟體工程師把業務場景進行程式設計,實作了mipi采集來的圖像,緩存到ddr中,通過ai處理器識别成潛在犯罪分子,然後把犯罪分子圖像由cpu控制通過網絡上傳到背景這一整套流程;這個測試過程過程的實作,說明硬體各個子產品,在軟體的排程下,能夠正常按照預想的功能和性能在工作,這套流程正常工作,驗證了SOC內建的總線連接配接正确,功能正确,性能滿足,使用者場景可全覆寫;

2:通過硬體驗證軟體

還是上述流程,如果采集,識别,發送的流程出了問題,很有可能是晶片設計錯了,也有可能是軟體出錯了,如果軟體錯誤,就需要修改軟體達到最終的效果,軟體也在這個過程中逐漸修改,疊代,不斷成熟;那麼就是通過硬體驗證軟體的過程;

備注:

a:AI 處理器IP層級通過參考模型來證明A=B的方法,更多具有黑盒測試特性;

b:SOC上的軟硬協同驗證更多具有白盒測試的特性,軟體人員必須深刻了解各個子產品的作用,機理進而才能開展整個場景的測試。

四:FPGA

如果說晶片設計者,考慮面積,功耗,頻率等,那麼晶片驗證者其中一個重要點考慮就是驗證時間;沒有什麼比産品的上市的時間不要delay,更能考驗一個晶片設計公司能力了;

賈老闆做AI晶片,這個AI晶片每個每個驗證用例的時間30分鐘,可以算完一張圖檔,一天能計算圖檔庫中48張圖檔;待測試圖檔庫中還有十萬張圖檔,算了一下,全部驗證完畢需要2000多天;如果用10台伺服器并行,每台服務并行運作10個驗證用例,那麼還需要20天才能疊代一遍;

賈老闆就非常着急,有什麼辦法可以快速疊代,市場可不等人,錯過就被競品占領了;

通過FPGA測試是一個高效的解決辦法:将整個項目移植到FPGA上,然後在FPGA上模拟整個晶片運作狀态,進而達到快速測試效果;這種大容量的FPGA非常貴,一般在幾十萬到上百萬;規模也非常大,不過這麼好用的東西,一般晶片設計公司都會買幾塊;

FPGA的頻率根據關鍵路徑的長短能夠到實際運作頻率為幾十到上百Mhz;目前這個做驗證的FPGA都被XILINX的大容量的FPGA所壟斷;可以加速疊代,通過在FPGA運作,可以快速的發現問題,進行大資料量的測試;

賈老闆終于下定決定,購買了這個FPGA驗證平台之後,這十萬張照片,幾分鐘就可以出結果了,非常的快;賈老闆的晶片驗證的效率大大提高,加快了大資料量的疊代;另外,FPGA可以作為原型,直接給賈老闆示範,看到這個流片後的效果,賈老闆心裡覺得這個FPGA驗證原型闆卡沒有白買,雖然還是有點貴,一輛卡宴沒有了,但是錢沒有白花;

同時在FPGA上,軟體運作的效率會大大提高,也可以加速軟體/固件的疊代過程,可以發現很多大資料量在仿真驗證平台所不能發現的問題;

随之問題來了,FPGA驗證發現晶片設計有個BUG,例如大數量識别圖像時靈時不靈,到底是MIPI的問題,CPU的問題,AI處理器的問題,還是DDR存儲的問題;在UVM仿真可能發現的幾率較低,這麼大資料量後才出錯,仿真這麼大資料量要好幾天到幾周;

FPGA發現問題容易,有時定位問題卻很費勁,一個問題一周或者幾周也不是不可能,疊代一次按照天計算,提高定位問題速率,加速收斂,是FPGA調試的一個難點。

五:“加速器”

加速器:重劍無鋒,大巧不工;

FPGA就需要每次覺得哪些地方出問題,把信号加到嵌入式的邏輯分析儀來看波形。而加速器可以像仿真一樣直接看到所有波形,不需要FPGA需要個波形那裡重新編譯,疊代一次就耗費一天;

例如賈老闆遊泳時,在泳池掉了戒指,FPGA調試需要每次憋氣沉下一個地方,一個地方一個地方找,效率不高;但是加速器上就類似把泳池四周和底部全部裝了攝像頭,看看監控就能找到問題所在,可以提高問題收斂的速率;

加速器具備FPGA的速度,雖然稍微慢一點;又具備仿真的靈活性,可以看到所有信号的狀态; 加速器可以大大提升疊代的周期,如果晶片太大,仿真速度太慢,例如雲端的AI晶片,晶片規模很大,上百億個半導體,FPGA原型裝下也很難,全部仿真起來非常慢;如果在UVM仿真環境下,加載一下andorid,仿真跑上,過七天再看,也來得及;加速器的頻率大約是1Mhz-5Mhz左右,雖然速度比實際的FPGA要慢,但是在加速器裡面引導Android跑起來,過了幾十分鐘,就引導完畢;

賈老闆見狀,失望的說,這算是什麼加速器,慢的和蝸牛一樣,我手機開機也就是十幾秒而已;但是這個樣的加速器,已經比仿真速度快100萬倍了;仿真的機關都是us級别來仿真,仿真100us半個小時甚至更長時間過去了(根據晶片規模不同),現在可以算一下仿真的速度有多慢了;

目前加速器廠家隻有三家,分别是:

mentor的Veloce;

synopsys的Zebu;

cadence 的Palladium;

加速器都比較貴,根據配置license不同,一般在幾百萬左右,需要專人來維護,買不起還還可以租用,通過VPN連上,費用根據使用的機時來算;其實開發小晶片基本上用不到加速器;開發大晶片(一億門以上)的公司實力雄厚,也可以備一台;畢竟以賈老闆這麼雄厚的土豪,也不太舍得買一台。

六:形式驗證

如果項目進入後端設計後期,晶片前面驗證出現一個BUG,如果後端這個時候已經不允許重新綜合了,因為重新綜合就會使後端返工,比如DFT鍊都插完畢了,那麼再重新綜合網表,可能所有寄存器數量都不一緻了(每次綜合的網表基本上很難保持一緻),很多工作後端布局布線(PR)都已經差不多了,要是重新綜合網表,那麼後端PR工程師和DFT工程師就要瘋掉了,好多工作要重新再來,少則幾周,多則一個月;大晶片尤其是這樣,小規模的晶片還好一點,這個時候需要做網表的修改(ECO);

這個時候,如何保證網表的ECO修改是正确的,形式驗證就派上了用場;如果沒有形式驗證,這個時候要是重新把ECO網表作為DUT加到仿真平台中,那麼仿真就會奇慢無比,很難把ECO之後的網表驗證充分;

形式驗證(Formal Verification)主要來對比ECO之後的網表和修改後的RTL是不是等價,如果等價,那麼修改後的RTL直接回歸就可以了,雖然做了化簡,回歸也是非常的耗時;

形式驗證還有很多其他的作用,例如在綜合時,保證代碼和綜合後網表一緻;在ECO時,保證綜合網表,DFT網表,PR網表三個網表,和修改後的RTL都一緻;

形式驗證,如同乾坤大挪移,本來是A(網表)被修改了,需要驗證A,現在通過形式驗證A(網表)和B(代碼)等價,現在隻需要驗證B(代碼)就可以了;B(代碼)的驗證難度明顯降低了,提升了驗證的效率,比直接來做網表的仿真速度要快一個數量級;

七:流程規範

流浪地球的作者,中國科幻作家劉慈欣在所著《三體2:黑暗森林》中有兩種人,面壁者和破壁者;面壁者要打敗三體人對地球的圖謀,設計了一系列的反擊計劃;而破壁者調動一切資源利用智子監視面壁者的一舉一動,通過分析每一個面壁者公開和秘密的行為,破解他們真實的戰略意圖。每一位面壁者都有一位針對他的破壁人;面壁者和破壁者如同晶片的設計者和驗證者;三體中的破壁人是沒有什麼規範的,但是作為晶片的驗證還是要有很多規範來限制。

沒有驗證規範,驗證品質就會參差不齊,而晶片的品質取決于木桶的短闆;而驗證規範又依賴人的執行;一個完整的驗證規範不論是子產品驗證規範(子產品級),內建驗證規範(SOC級),FPGA的測試等等都包含下面幾類;

1:驗證計劃:功能點分解,包括場景,功能,性能,異常,邊界等等,每個點check的政策;

2: 驗證執行:構造驗證case, debug,問題疊代的流程等等;

3:驗證輸出:驗證報告輸出及評審等等;

4:驗證管理:驗證分割,buglist,bug review,回歸測試等等;

晶片越來越複雜,同時晶片的團隊越來越大,面臨的挑戰也是逐漸增大;由于産品有上市的時間視窗,驗證的進展都是在有限的資源下求解的過程,不是一個無線資源下瘋狂攻擊;

1:複雜度:晶片的規模越來越複雜度,億門/幾十億/上百億門的晶片也不罕見,晶片設計是人類這個物種最複雜的設計之一,例如蘋果的處理器M1内部有160億個半導體。這還僅僅是硬體的規模複雜度,還不包括上面所跑的軟體;上面所運作的軟體也是越來越複雜,CPU的軟體,GPU的軟體,NPU的軟體等等;可能需要多個軟體,多種程式設計語言系統才能整體運作起來;

2:溝通:設計人員和驗證人員之間的雖然可以通過文檔,電路圖,會議等各種方式交流;但是很難完全同步二者之間了解。如同三體中面壁人和破壁人一樣,找到面壁人的BUG難度不大,關鍵是如何找到所有的BUG,100%的BUG,因為即使留下一個,也可能對晶片造成很大的影響;晶片團隊變大,成員的溝通成本也非常的大,還會有很多管理上的問題,而溝通不暢就會導緻很多的資訊丢失。

“聽過很多大道理,卻依然過不好這一生”;

即使把這些“武器”都用上,晶片就能沒有問題了嗎?肯定是不夠;從産品定義,設計,驗證,後端,流片,封裝,測試,每個環節都可能引入風險;這些“武器”隻是能降低風險一些手段,但是遠不能100%消除;”陣而後戰,兵法之常,運用之妙,存乎一心“。晶片研發本身是一個實踐的科學,隻有把這些武器和實際中遇到的問題結合起來,疊代上升,在實踐中完善,梳理,沉澱這些“武器”運用和流程,才是最終才能是真正解決問題之道。

繼續閱讀