[面试]SoC验证工程师面试常见问题(三)
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