SoC驗證工程師面試常見問題(三)
在 SoC 驗證工程師的面試中,面試官可能會要求候選人現場編寫 SystemVerilog、UVM (Universal Verification Methodology) 或 SystemC 代碼,以評估其編程能力、語言掌握程度以及解決實際驗證問題的能力。這種隨機抽題寫代碼的環節通常會涵蓋基礎語法、面向對象編程 (OOP)、約束隨機化、UVM 組件設計等核心概念。以下是可能會出現的題目類型、示例題目及其參考答案,覆蓋常見的主題如面向對象、約束、內存管理等。
1. SystemVerilog 相關代碼題目
SystemVerilog 是驗證工程師最常用的語言,面試中可能會要求寫代碼來驗證基本概念和驗證技巧。
主題 1:面向對象編程 (OOP)
題目 1:編寫一個簡單的類,包含屬性和方法,并展示繼承和多態性。
- 目的:考察 OOP 基礎知識,包括類定義、繼承、虛方法等。
- 題目描述:定義一個基類
Vehicle
,包含屬性speed
和虛方法drive()
。然后定義一個子類Car
,覆蓋drive()
方法并添加特有方法honk()
。在initial
塊中實例化并調用相關方法。 - 參考答案:
class Vehicle;int speed;function new(int s = 0);speed = s;endfunctionvirtual function void drive();$display("Vehicle is driving at speed %0d", speed);endfunction endclassclass Car extends Vehicle;function new(int s = 0);super.new(s);endfunctionfunction void drive();$display("Car is driving at speed %0d", speed);endfunctionfunction void honk();$display("Car is honking!");endfunction endclassprogram main;initial beginVehicle v;Car c = new(60);v = c; // 向上轉換v.drive(); // 輸出: Car is driving at speed 60if ($cast(c, v)) beginc.honk(); // 輸出: Car is honking!endend endprogram
- 關鍵點:展示
virtual
方法的多態性,$cast()
的向下轉換用法。
主題 2:約束隨機化
題目 2:編寫一個類,包含隨機變量和約束,用于生成特定范圍的地址。
- 目的:考察隨機化和約束的使用,驗證工程師常用于生成隨機激勵。
- 題目描述:定義一個類
MemoryAccess
,包含隨機變量addr
(32 位地址)和data
(32 位數據)。添加約束,使addr
限制在 0x1000 到 0x1FFF 范圍內,且對齊到 4 字節邊界。編寫測試代碼調用randomize()
。 - 參考答案:
class MemoryAccess;rand bit [31:0] addr;rand bit [31:0] data;constraint addr_range {addr >= 32'h1000;addr <= 32'h1FFF;addr % 4 == 0; // 4 字節對齊}function void displ