華為海思晶片驗證工程師面試經歷:UVM+SystemVerilog+驗證方法學全考察
3年晶片驗證經驗,詳細復盤華為海思三輪技術面試全過程,涵蓋SystemVerilog基礎、UVM機制、驗證方法學、覆蓋率模型、SoC驗證等核心考點,附真題彙總與備考建議。
背景介紹
先說下我的情況吧,本科微電子專業,研究生方向是數位IC設計,畢業後在一家中型晶片公司做了3年驗證工程師。主要用UVM+SystemVerilog做模組級和系統級驗證,也參與過SoC驗證專案。說實話,海思一直是我心目中的天花板,所以看到海思晶片驗證工程師的崗位開放,我毫不猶豫就投了。
投遞之後大概等了兩週,HR打電話過來約面試,說一共三輪技術面+一輪HR面。當時心裡既興奮又緊張,畢竟海思的面試難度在圈子裡是出了名的。我花了一週時間系統複習了SystemVerilog、UVM、驗證方法學這些核心內容,還把之前專案中的關鍵點整理了一遍。
面試流程復盤
一面:SystemVerilog+UVM基礎(約1小時)
一面是兩位面試官,應該是組裡的資深工程師。上來先讓我自我介紹,然後就開始問基礎問題了。
SystemVerilog部分:
第一個問題就讓我心裡一緊——「請詳細說說SystemVerilog中class和struct的區別,以及在驗證中各自的適用場景」。這個我答得還行,class支援繼承和多型,適合搭建驗證框架;struct更輕量,適合資料打包傳遞。面試官追問了virtual class和parameterized class的使用場景,這個我舉了UVM中uvm_object的例子來說明。
接著問到了OOP的幾個核心概念——封裝、繼承、多型在驗證中的具體體現。我說了UVM中component和object的繼承體系,以及factory機制如何實現多型。面試官似乎比較滿意,點了點頭。
然後是約束和隨機化的問題。「randomize with和randomize的區別是什麼?pre_randomize和post_randomize的執行順序?」這個我答得比較流暢,還舉了個例子說明如何用pre_randomize做權重控制。
還問了coverage相關的——function coverage和assertion coverage的區別,covergroup和coverpoint的關係,cross coverage怎麼用。這些我都有實際使用經驗,答起來比較自然。
UVM部分:
面試官問的第一個UVM問題是「UVM的phase機制是怎樣的?哪些phase是top-down,哪些是bottom-up?」我畫了個phase的執行順序圖,從build_phase到report_phase一個個說。面試官追問了run_phase和task phase的關係,我說run_phase和dynamic phase是並行執行的,這個回答面試官說「基本正確」。
然後是factory機制——「UVM factory的作用是什麼?override的幾種方式?」我詳細說了type_override和instance_override,以及create方法如何通過factory建立物件。面試官還問了factory除錯的方法,我說了factory.print()和+UVM_VERBOSITY選項。
sequence和sequencer的關係也是必考題。「sequence如何向sequencer傳送transaction?sequencer如何向driver分發transaction?」我從sequence的start任務講到sequencer的arb機制,再到driver的get_next_item/item_done握手,整個流程串了一遍。
最後問了個TLM通訊——「uvm_analysis_port和uvm_blocking_transport_port的區別?」我說明了one-to-many和one-to-one的區別,以及TLM的幾種通訊模式。
一面結束的時候,面試官說「基礎還不錯」,讓我等二面通知。整體感覺一面側重廣度,問得很細但不會特別深入。
二面:驗證方法學+覆蓋率(約1.5小時)
二面是一位看起來更資深的技術leader,問題明顯更有深度了。
開場就問了一個開放性問題——「你覺得一個完整的驗證方案應該包含哪些內容?」我從驗證計畫、測試用例規劃、覆蓋率模型、check機制、回歸策略幾個維度展開說了。面試官在每個點都會追問細節,比如驗證計畫怎麼寫、覆蓋率目標怎麼定、check機制有哪些層次。
然後深入聊了覆蓋率——「function coverage和code coverage的區別?如果code coverage很高但function coverage很低,說明什麼問題?」我說code coverage高只說明代碼被執行了,但不代表功能被正確驗證了;function coverage低說明很多功能場景還沒覆蓋到。面試官追問了「如果反過來呢?function coverage高但code coverage低?」這個我想了想說,可能說明有些代碼路徑是死代碼或者冗餘邏輯,面試官說「可以這麼理解」。
接著問到了斷言——「SVA中sequence和property的區別?|->和|=>的區別?」這個我答得比較快,sequence是條件序列,property是屬性描述;|->是同一時鐘週期匹配,|=>是下一時鐘週期匹配。面試官又問了disable iff和assume的用法,assume我答得不太好,只說了和assert的區別,面試官補充了assume用於約束輸入的行為。
驗證方法學方面,面試官問「VMM、UVM、OVM這幾種方法學的演進關係和各自特點?」我從OVM說起,講到UVM如何統一了VMM和OVM的優勢,以及UVM 1.2相比1.1的改進。面試官還問了「你覺得UVM有什麼不足?」這個我結合實際專案經驗說了幾點:學習曲線陡峭、除錯困難、模擬效率有時不如C++驗證環境。面試官似乎比較認可這些觀點。
還問了一個很實際的問題——「如果你的驗證環境跑一次回歸需要8小時,你會怎麼優化?」我從減少冗餘測試、優化隨機種子、並行模擬、增量編譯幾個角度說了。面試官追問了「怎麼判斷哪些測試是冗餘的?」我說可以通過覆蓋率資料來分析,找出對覆蓋率貢獻低的測試用例。
二面結束的時候,面試官說「思考問題的角度不錯」,讓我感覺有戲。
三面:專案深挖+SoC驗證(約1.5小時)
三面應該是部門經理級別的面試官,問題更偏專案實戰和系統思維。
首先讓我詳細介紹一個做過的驗證專案。我選了之前做的一個PCIe Controller的驗證專案,從驗證架構設計、測試計畫制定、覆蓋率模型搭建、bug發現過程一路講下來。面試官在每個環節都會打斷追問——「你的驗證架構為什麼這樣設計?有沒有考慮過其他方案?這個bug是怎麼發現的?為什麼之前的測試沒覆蓋到?」
然後是SoC驗證的問題——「SoC級驗證和模組級驗證的最大區別是什麼?」我說SoC驗證更關注模組間的互動、匯流排協議的正確性、中斷處理、時鐘域交叉等系統級問題。面試官追問了「跨時鐘域怎麼驗證?」我說了CDC檢查工具的使用,以及非同步FIFO的驗證方法。
還問到了形式驗證——「formal verification和simulation-based verification各自的適用場景?」我說formal適合數學上可證明的小模組,simulation適合大規模系統級驗證。面試官追問了「你用過哪些formal工具?」我實話實說只用過Jasper做簡單的斷言證明,經驗不多。
最後是幾個開放性問題——「你覺得AI對晶片驗證行業會有什麼影響?」「你怎麼看待RISC-V對驗證工作的變化?」這些我結合行業趨勢說了自己的看法,面試官沒有評判對錯,但一直在追問細節,感覺是在考察思維深度。
三面結束後大概三天,HR打電話說通過了,安排HR面。HR面就是常規的薪資期望、職業規劃這些問題,沒什麼特別的。
真題彙總
SystemVerilog:
1. class和struct的區別及適用場景
2. virtual class和parameterized class的使用場景
3. OOP三大特性在驗證中的體現
4. randomize with和randomize的區別
5. pre_randomize和post_randomize的執行順序
6. function coverage和assertion coverage的區別
7. covergroup、coverpoint、cross coverage的使用
UVM:
8. phase機制及執行順序
9. run_phase和task phase的關係
10. factory機制及override方式
11. sequence-sequencer-driver的互動流程
12. TLM通訊模式及port型別
13. callback機制的使用場景
驗證方法學:
14. 完整驗證方案的組成部分
15. function coverage和code coverage的關係
16. SVA中sequence、property、|->、|=>的區別
17. VMM/UVM/OVM的演進關係
18. 回歸優化策略
SoC驗證:
19. SoC級驗證和模組級驗證的區別
20. 跨時鐘域驗證方法
21. formal verification和simulation的適用場景
心得建議
1. 基礎一定要扎實。海思的面試非常看重基礎,SystemVerilog和UVM的每個細節都可能被問到。建議把IEEE 1800標準和UVM Class Reference認真過一遍,不要只看培訓資料。
2. 專案經驗要能講清楚。面試官會從你的專案描述中挖掘問題,所以每個專案的設計思路、遇到的難點、解決方案都要提前梳理好。最好能畫出架構圖,面試的時候直接在白板上畫。
3. 要有系統思維。三輪面試的側重點不同,一面看廣度,二面看深度,三面看高度。到三面的時候,面試官更關注你能不能從系統角度思考問題,而不僅僅是寫testbench。
4. 誠實很重要。不會的就說不會,不要硬編。我在formal verification方面經驗不多,直接說了,面試官反而覺得態度好。
5. 關注行業動態。三面會問一些開放性問題,如果你對行業趨勢有自己的思考,會加分不少。
FAQ
Q:海思面試對英語有要求嗎?
A:技術面基本不考英語,但文件和規範都是英文的,所以閱讀能力還是要有的。HR面可能會簡單聊幾句英語。
Q:面試週期大概多久?
A:從投遞到拿到offer大概一個半月。每輪面試間隔1-2週,整體節奏不算太快。
Q:沒有UVM專案經驗能過嗎?
A:比較難。海思驗證崗位基本都要求UVM實戰經驗,如果只有SystemVerilog經驗,建議先做個UVM小專案練手。
Q:面試會問手撕程式碼嗎?
A:會。一面讓我手寫了一個簡單的sequence和scoreboard,二面讓寫了一個SVA斷言。建議提前練一下白板編程。
Q:薪資待遇怎麼樣?
A:海思的薪資在晶片行業屬於中上水準,具體要看級別和談的情況。另外海思有簽字費和股票,整體package還是很有競爭力的。