入行數位IC驗證後會做些什麼?

2022-06-29 06:01:30

半年前,公眾號寫了第一篇推文入行數位IC驗證的一些建議,介紹了IC小白可以如何一步一步地摸索入門數位IC驗證,同時也在知乎發了這篇入門貼,並且衍生出很多額外基礎的內容,收穫了不少的瀏覽量以及肯定。點選合集(數位IC合集(超級全面,持續更新)

 

在真實地工作一年後,對晶片驗證的理解也有了更深的認識,故在此回憶總結這一年所看到的數位IC驗證世界。

 

--------------------------------

 

我們知道晶片製造出來到使用者手中之後是沒辦法再次更改的,流片失敗的代價非常的昂貴,大公司還好有試錯成本,小公司可能直接拜拜了。因此需要確保晶片在流片前,把設計所定義的功能都檢驗正確無誤。

 

所以晶片驗證的開始是從spec的定義開始的,有了它之後就可以客製化相應的驗證計劃,隨後才是根據DUT搭建testbench,編寫定向和隨機的測試用例進行模擬,跑regression後收集覆蓋率,根據覆蓋率的情況再決定是否增補testcase。直到coverage達到驗收標準,功能驗證才算結束了。

 

--------------------------------

 

晶片驗證也會有很多分類,根據晶片型別的不同可以分為:CPU驗證、GPU驗證、TPU驗證、NPU驗證、SoC驗證等等;


據工具的不同可以分為EDA驗證、FPGA原型驗證、Emulator驗證

EDA驗證即功能驗證,根據開發的不同階段分為前仿驗證和後仿驗證。主要工具有VCS、Verdi、NC-Verilog、ModelSim等等。EDA驗證是通過軟體模擬來驗證電路設計的功能行為,是比較理想情況下的,沒有考慮電路內部邏輯與互連的延時。優點是波形直觀,能夠快速找出功能bug,價效比高,缺點是模擬速度慢,難以對整個晶片系統進行驗證。

 

FPGA原型驗證即編譯設計程式碼,並且綜合為真實的硬體電路對應FPGA板子上去,通過真實的硬體電路進行模擬(FPGA原型)。FPGA原型驗證,將RTL程式碼移植到FPGA來驗證IC系統的功能和效能。基本流程:將ASIC程式碼轉換成FPGA程式碼,編譯與對設計拆分,綜合,佈局佈線,生成位元流檔案bitfile。優點是降低了軟硬體協同驗證的成本,加速了硬體驗證和軟體開發;缺點是編譯較慢,設計拆分時易出錯,比較難定位bug。

 

通常認為Emulator驗證為介於simulator和FPGA prototyping間的產物,同時擁有二者的優點,如方便debug波形、可使用force/release命令、檢查覆蓋率、列印display資訊、同時執行速度快很多,最大的缺點就是太貴了,需要時間和人力去搭建環境和維護。Cadence的Palladium、Mentor Graphics的Veloce,以及Synopsys的ZeBu等平臺。

 

根據層次不同可以分為模組驗證、子系統驗證、系統驗證

模組驗證:側重點在模組本身功能的驗證,驗證計劃的重點是feature和驗證架構,然後列出testcase,模組能夠覆蓋的絕不到下一級驗證去覆蓋。主要內容有:檢查引數設定、暫存器讀寫、協定檢查、中斷和復位、狀態機跳轉、工作模式覆蓋、RAM的讀寫功能邊界等等。

 

子系統驗證:側重點在系統的互聯性,更加關注系統的工作模式和複雜場景應用。主要內容有:中斷的產生、DMA功能、IP的模式功能、Memory讀寫等等。

 

系統驗證:側重點在軟硬體協同模擬,關鍵系統路徑的覆蓋,晶片工作模式和測試模式以及資料通路和效能等。主要內容有:基本IP功能、CLK/RESET、IO MUX 、多個IP同時工作、程式的啟動、工作模式和應用場景測試。

 

根據可見度可分為黑盒驗證、灰盒驗證和白盒驗證等等。

黑盒驗證:驗證的輸入只有輸入訊號,輸出訊號和相應的功能。不需要關心內部訊號和架構,驗證程式碼對DUT內部的更改不太敏感。常用於大規模的系統級驗證。

 

白盒驗證:驗證的輸入有輸入訊號,輸出訊號,內部訊號,所有的訊號時序和相應的功能。需要了解實際的實現方式,能夠閱讀RTL設計程式碼。常用於模組級別驗證。

 

灰盒驗證:黑盒驗證和白盒驗證的結合體,這使得驗證環境的開發更加靈活。常用於子系統級別驗證。

 

--------------------------------

 


晶片驗證流程

1.晶片規格

  • 根據市場產品需求,規定晶片需要達到的功能和效能

  • 產品和架構師根據客戶提出的規格spec,商定出具體設計解決方案和實現的架構,

  • 劃分出各個模組的檔案。

 

2.測試點分解

  • 根據spec檔案,分解出具體的測試點

  • 可以分為場景類、功能類、效能類等等

  • 分解的顆粒度儘量細緻,直到完備無漏

  • 一個測試點被一個case覆蓋的原則分解

 

3.驗證方案

整個晶片的驗證方案一般由驗證負責人規劃,將設計分成多個子系統,再將子系統分成多個模組:

  • 具體驗證策略

  • EDA工具和IT資源

  • 專案進度安排

  • 未覆蓋的功能,風險評估

 

4.驗證計劃

客製化驗證策略,評估驗證計劃,細化testbench搭建、debug、case開發等時間,大概分為:

  • spec閱讀和測試點分解時間

  • 開發環境和偵錯冒煙測試時間

  • 開發case,完成全部case時間

  • 迴歸測試和驗證報告的時間

 

5.搭建驗證平臺

  • 一般由激勵生成器、驅動器、取樣器、參考模型和計分板組成

  • 從簡單的功能開始,測試可以通過驗證環境之後,再擴充套件其他功能

  • 經常遇到編譯報錯、語法錯誤、預期錯誤,需要逐一解決

  • 分析報錯是由驗證環境引起的,還是設計程式碼錯誤造成的

 

6.測試用例開發

  • 冒煙測試:基本的暫存器讀寫測試,確保資料流已通

  • 直接用例:根據spec中program流程設定的典型測試

  • 隨機用例:用於變數隨機,覆蓋更多邊界,注重約束條件的設定

  • 增補用例:以提高覆蓋測試點為目標,增補相應的測試用例

 

7.迴歸測試

  • 基本功能迴歸:基本功能與基本場景覆蓋

  • 高階功能迴歸:高階功能和邊界測試覆蓋

  • 覆蓋率收集迴歸:高階功能測試完成之後,開始收集覆蓋率

 

8.覆蓋率分析

  • 行覆蓋率

  • 條件覆蓋率

  • 跳轉覆蓋率

  • 分支覆蓋率

  • 斷言覆蓋率

  • 狀態機覆蓋率

  • 功能覆蓋率

 

9.驗證報告

  • 應用場景驗證

  • 模組複用說明

  • 覆蓋率分析

  • 風險評估

  • 待改進方案

 

10.後仿

慢慢跑著就行了,基本signoff了。

 


 

以上就是晶片驗證工程師一年內可能接觸的內容。

 

如果覺得有用,期待您的轉發分享和在看!也可以加個關注,第一時間看見我的推播!