IC設計職位詳解之「數字驗證工程師」就業必學課程

2021-10-10 18:28:12 字數 3663 閱讀 4271

數字驗證處於數字ic設計流程的前端,屬於數字ic設計類崗位的一種。在ic設計中,數字驗證所佔的人數比重是非常多的,很多大公司,數字前端設計工程師與驗證工程師的比例已經達到1:3。

數字驗證主要分成幾種層次的驗證:ip level, unitlevel,fullchip/soc level, gatelevellevel,硬體加速**等。

1. 閱讀各種spec

最重要的乙份spec是design spec,就是和你一起合作的好**設計工程師寫的設計文件,比如下面這種:uart ip core specification

其中需要重點了解的是:

fetures:這個模組需要支援的效能列表。

io ports:這個模組對外的io埠。

operation mode:這個模組的主要工作模式。

除了這份詳細的設計文件之外,如果這個ip需要用到很多協議,那你自然還要去閱讀一些協議文件咯,比如amba匯流排協議,mipi協議,ddr協議等。

2. 撰寫verification spec

公司裡面,工程師做事情之前都需要出乙份詳細的文件,驗證工程師也不例外,你要出的文件叫做verification spec,其中主要的內容包括:

驗證平台架構:以uvm驗證平台為例。

現在ic行業內,很多公司的驗證環境都不盡相同,比如有純c/c++的環境,有純uvm的環境,有uvm+c++的環境,甚至還有systemc的環境。總的來說,現在的趨勢都是在往uvm的驗證環境上轉。

測試用例(test plan)

test plan的出爐是乙個高質量的工作,因為它決定了你驗證的工作量,最重要是它決定了你驗證的完整度。驗證工程師的終極目標就是:覆蓋所有的情況,不放過任何乙個bug。

這份東西需要你和designer反覆的詳細討論,在後面的過程中,還需要進一步的優化補充這份文件。

3. 碼**,搭建驗證環境

verification spec完成之後,接下來就要開始碼**了,使用各種驗證語言去搭建驗證環境,常用的驗證語言有c/c++,systemc,systemverilog。

4. 建立test cases

根據前面完成的詳細test plan去建立驗證需要用的test cases,每家公司對test cases的命名有一定規則,比如長這樣的:

有些公司就直接用數字來給test cases命名。

還有些公司,直接用指令碼來生成test cases,只要把關鍵的一些設定調好,用指令碼一刷,case就全部生成了。

當然每種建立cases的方法各有優缺點,你進去公司之後,也只能入鄉隨俗。

5. debug

驗證環境和測試用例都搭建好了,下一步重點就是**和debug了。前面搭環境的時間其實大概只佔20%,debug才是最花時間的。

**所用到的工具主要有:

mentor:questasim

cadence:nc-sim

synopsys:vcs

幾款工具乙個比乙個好,當然**也是乙個比乙個貴。工欲善其事必先利其器,要想提高你的**和debug效率,工具裡面好的功能也要好好研究下的。

debug主要目的是尋找rtl的bug,當然前面搭建的驗證平台也會存在很多bug,最終的目標就是所有的test cases都能完全**通過。

最主要的debug手段有:

檢視log檔案:**結束會生成很多結果檔案。

看波形:最常用工具就是verdi了。

每家公司對於驗證工程師debug的要求不盡相同,比如amd,就要求驗證工程師能找到最終的root cause,而大多數公司只要求驗證工程師能基本定位,然後designer去詳細debug。

6. regression和coverage

到了專案的後期,所有的case都pass過了,並且比較穩定了,下一步就要開始跑regression和coverage了。

所謂regression就是把所有的case同時跑一遍,因為大多數case裡面會有很多random的機制,所以在不斷重跑的過程中,會隨機性的出現case fail。這也是regression的主要目的,就是抓出那些極端情況下出現的debug。

coverage主要包括code coverage和function coverage等,每家公司的要求都不盡相同。

每家公司跑regression和coverage都會使用指令碼來完成,怎麼高效順利跑完,是最關鍵的問題,最終的結果一般會以網頁的形式呈現,直觀明了。

7. support

前面屬於驗證工程師的常規任務差不多就完成了,support屬於高階版的。比如專案用的database出問題了,跑**用的flow碰到問題了,經常就會叫驗證工程師去support,幫忙解決問題。

當然搞不定也無所謂,但是如果你經常能幫同事搞定這些問題,那你在公司的地位就能與日俱增,公升職加薪就更有籌碼了。

8. meeting

作為驗證工程師,和其他工程師一樣,經常還有無窮無盡的會議要開,各種review,各種討論。

如果你作為會議組織者,請記得事先做好充分的準備噢,不然很容易被人鄙視的。

所以總結來說,最主要做的兩件重要的事情是:程式設計、debug

現階段由於數字驗證的平台有很多種,主要的平台有:

純verilog平台、systemc、純c/c++(cpu驗證)、純uvm平台、uvm+c/c++平台、其他語言混合平台(matlab等)

每種平台需要你掌握的技能不大一樣,但比較主流的平台是3、4、5三種。乙個初級工程師想全部掌握這些技能也很難,如果這些平台你都搭過,就變成老司機了。

由於驗證工程師需要程式設計,所以掌握程式語言也是必須的,比如掌握下面知識就顯得比較重要:

verilog、 c/c++、 systemverilog、 uvm

另外,驗證工程師經常需要流程的自動化,所以一些指令碼語言也是必須的:

shell、 makefile、 perl、 python

除了這些外,熟悉一些協議和架構,也是有很大幫助的,比如:

arm架構、 axi/ahb協議、 mipi協議、 ddr協議等等

所有的技術類崗位,主要看的兩點就是:專業技能(skills)和專案經驗(experience)。

所以除了上面列的這些技能,你能實際做過一兩個專案,哪怕是ip級別的驗證專案,也是很重要的,尤其是做專案過程中積攢的debug經驗。

如果你是在校學生,早幾年懂驗證的人極少,所以基本上你只要會verilog,可能就可以找到驗證工程師的職位了。現在在校學生通過各種渠道(比如:ic修真院)學習,掌握了上面的這些技能,甚至積累了一兩個專案經驗。

現階段,數字驗證工程師主要以招聘本科以上學歷,對專業的要求並不是很苛刻,非積體電路方向也可以,只要你掌握了上面的這些技能,哪怕不相關專業,比如材料、物理、自動化、機械等專業,也是可以成功應聘。

未來的發展,一些人會一直做技術,成為一名資深驗證工程師,有些人會成為驗證經理,做一些管理類的工作。好訊息是大部分人只要一直做下去都能成為一名資深工程師(staff級別)或者經理。

有少數人也可以轉,比如轉去做架構工程師,去eda公司做應用工程師(ae),要麼就索性創業。總的來說,絕大多數驗證工程師還是會一直做下去,畢竟這個崗位還算乙個天花板不低的崗位。

數字IC工程師的技能樹

數字 ic工程師的技能樹 今天與同事聊起了 icrtl 語言僅僅就是 diablo 裡面女巫的火球。是首個技能,但你公升到 20級也就是個火球。當然對別的技能是有加成的哦 其他主要技能是,演算法邏輯設計與 ip整合評估 設計的要求基本要看得懂演算法文件做實現,定點化和一些數學基礎。特定模組的整合要求...

數字IC工程師的技能樹

rtl語言是是首個技能,當然也需要其他的技能。設計的要求基本要看得懂演算法文件做實現,定點化和一些數學基礎。特定模組的整合要求一般有相應知識背景,遇到問題能夠 debug 進去。匯流排,dma 或者一些掛在匯流排上的內部裝置。ddr,hdmi tunner,afe,一些非數碼訊號或者 phy的介面 ...

華為晶元與器件設計工程師 數字晶元設計工程師

崗位職責 1 參與晶元需求討論,並按照晶元規格的要求,參與完成晶元總體方案 詳細設計方案的完成 邏輯 的編寫 2 嚴格遵循開發流程 模板 標準和規範,確保開發工作按時按質完成。崗位要求 1 具有soc開發經驗者 熟悉arm處理器 amba匯流排 外設介面 具備複雜電路設計 ut驗證經驗,深刻理解同步...