數位驗證工程師

一言以蔽之:設計與驗證分離,可以避免球員兼裁判。

IC

前文提到digital designer負責寫RTL code,那怎麼確定DD寫的RTL是對的呢?就是需要跑模擬驗證,不過如果DD自己設計、自己驗證,就是球員兼裁判,很容易有疏漏。我想大家都有過這樣的經驗:寫完考卷後還檢查了三次,覺得都沒有錯,考卷發下來後發現自己粗心大意寫了「13+21=35」。

為什麼在考場人們總是檢查不出「題目說要對的打勾、我卻把錯的打叉」這種很明顯的錯?這是因為『在考試壓力下作答、人就容易慌』,『題目太長、專注力不足而讀到分神』。類似的道理,當DD在專案壓力下設計、就容易寫錯,而且datasheet厚厚一大本、讀了後面就忘了前面。

還記得同學一眼就看到自己犯的白痴錯「13+21=35」嗎?要避免錯誤發生的最簡單方法,就是找另外一批人來看,因此就有了另外一個職缺——數位驗證工程師(Digital Verification engineer、簡稱DV)。

DV做的事包括:

  • 研讀spec,撰寫驗證計劃
  • 建立驗證環境,例如test bench、VIP(Verification IP)
  • 提高驗證coverage
  • 和DD co-work來debug

因此,DV需要的技能有:

  • 認識protocol(例如UART、I2C、SPI)
  • 對規格要很了解,所以要讀spec和datasheet
  • 理解設計,例如用Verilog
  • 會跑模擬,例如用VCS
  • 會寫script跑大量模擬,例如用shell scipt、Python、Tcl
  • 會debug,例如用Verdi
  • 會系統端語言,例如用SystemVerilog、UVM

有些公司人力不足,就會DD兼任DV。兼差verification的DD常常會有漏球的問題,就是所謂的verification coverage不夠全。舉例來說,DD想要做一個y=a&b&c的電路,DD做完設計後,就隨便跑了二個模擬,看起來二個都對,就放這電路過關了。

abcy
1111
0110

但其實DD把RTL寫錯了,DD寫成y=a&b,此時如果有DV進場跑個完整的模擬,發現結果如下,錯誤就被DV抓到了。

abcy
0000
0010
0100
0110
1000
1010
1101(與預期不合)
1111

當然電路不會這麼簡單,我們不可能總是掃完全部input組合(因為模擬時間會超過幾十年),所以DV必須設計在少數的模擬,就能toggle最多的電路,制定一個驗證計劃,在有限的模擬下增加驗證的包覆性,來提高設計的正確性。

如果到了更上層的系統,常常發生單一IP的電路A和B都是正確的,但A+B接起來就是不正確的,因而系統整合的驗證就是一門更難的課題了。