先独立作答,再展开参考答案。八股原题沿用原笔记编号;扩展练习为本站根据对应考点编写。
Q9 · interface 的作用是什么?
八股原题 · Q9 · 题型:问答
考点
- 信号封装与连接复用
- interface 中可包含的内容
- 与 class testbench 的桥接
展开参考答案 · Q9
题目来源(原笔记记录)
- 泰凌微 · 数字IC验证 · 校招 · 一面(interface 的作用与使用场景)
- 乐鑫科技 · 数字IC验证 · 校招 · 一面(interface 和 DUT 连接)
- 乐鑫科技 · 数字IC验证 · 校招 · 笔试(interface 接口基础用法)
- 面试书《Cracking Digital VLSI Verification Interview》· 第4章 Q41(对应题目:接口 interface)
interface 把一组相关信号和时序规则封装成一个接口实例,减少模块端口数量和重复连接。
第一,封装信号。 一组信号集中定义,DUT 和 testbench 共用一个 interface 实例连接。
第二,还能装更多。 除了信号,interface 里还能放 clocking block、modport、task/function、断言和覆盖率。
interface bus_if(input logic clk);
logic valid, ready;
logic [31:0] data;
endinterface第三,与 class 的桥接。 interface 是静态结构,仿真开始前(elaboration 阶段)就创建好;class 是运行时才创建的对象,不能直接持有 interface 实例,所以类环境用 virtual interface 句柄访问它。
一句话:interface 把协议的信号、方向和时序集中封装,是 DUT 静态端口与类化验证平台之间的边界。
E9 · 两个 interface 实例是否互通?
扩展练习 · E9 · 题型:场景分析 · 对应原题:Q9
考点
- 信号封装与连接复用
- interface 中可包含的内容
- 与 class testbench 的桥接
DUT 连接 bus_if dut_bus(clk);,driver 却拿到另一个 bus_if tb_bus(clk);。两者成员名字完全相同,driver 写 tb_bus.valid 后 DUT 能收到吗?如何修复?
展开参考答案 · E9
不能。两个实例各自保存信号,同名不构成连接。应把连接 DUT 的 dut_bus 实例通过 virtual interface 传给 driver;实例类型相同只是赋值兼容条件,不能代替实例身份和实际连线。
Q10 · modport 与 clocking block 分别解决什么问题?
八股原题 · Q10 · 题型:问答
考点
- 访问方向与时序语义的区别
- driver 和 monitor 视角
展开参考答案 · Q10
题目来源(原笔记记录)
- 某TPU公司 · 数字IC验证 · 校招(clocking block 的作用与意义)
- 面试书《Cracking Digital VLSI Verification Interview》· 第4章 Q42、Q44(对应题目:modport 构造;clocking block 时钟块)
modport 管”谁能以什么方向访问”,clocking block 管”什么时候采、什么时候驱”——一个管权限方向,一个管时序语义。
第一,modport。 给 interface 的不同使用方规定哪些成员可见、信号方向是什么,DUT、driver、monitor 各看各的视角。
第二,clocking block。 规定在哪个时钟事件采样或驱动,以及输入输出 skew 是多少。
interface bus_if(input logic clk);
logic valid, ready;
logic [31:0] data;
clocking drv_cb @(posedge clk);
output valid, data;
input ready;
endclocking
modport DUT(input clk, valid, data, output ready);
endinterface注意:modport 不解决竞争冒险,clocking block 也不是权限系统;两者各管各的,可以组合使用。
一句话:modport 管”谁能以什么方向访问”,clocking block 管”什么时候采、什么时候驱”。
E10 · modport 能否独自消除竞争?
扩展练习 · E10 · 题型:判断说明 · 对应原题:Q10
考点
- 访问方向与时序语义的区别
- driver 和 monitor 视角
“加上 driver modport 后,在 posedge 直接读写接口成员就一定没有竞争。”判断并给出更稳妥的访问方式。
展开参考答案 · E10
错误。modport 约束方向和可见接口,不安排采样时序。可定义 clocking block,明确输入采样与输出驱动 skew,driver 通过 @(vif.drv_cb) 和 vif.drv_cb 成员访问。具体 skew 应根据协议与 DUT 时序选择,不能只增加声明却仍绕过 clocking block 访问裸信号。
Q11 · virtual interface 为什么需要 virtual?
八股原题 · Q11 · 题型:问答
考点
- 静态 interface 与动态 class 的连接
- 句柄绑定
展开参考答案 · Q11
题目来源(原笔记记录)
- 字节跳动 · 数字IC验证 · 实习 · 高频题(virtual interface 的作用,相关差异,没有 virtual interface 能否实现对应功能)
- 蔚来 · AI计算芯片验证 · 校招 · 一面(interface 传递至组件的方式、传递层级以及不能传递真实物理接口的原因)
- 字节跳动 · AI芯片研发 · 校招 · 一面(config_db 中 virtual 的用途)
- 面试书《Cracking Digital VLSI Verification Interview》· 第4章 Q81(对应题目:虚拟接口 virtual interface)
virtual interface 是类对象访问静态 interface 实例的句柄。
第一,为什么需要。 interface 是静态层次,仿真开始前就建好;class 对象是运行时才创建的,没法直接持有 interface 实例。没有 virtual interface,driver、monitor 这些类就读不到 DUT 信号。
第二,本质。 它是指向真实 interface 实例的句柄,本身不创建硬件接口;使用前必须绑定实际实例,句柄是 null 时访问成员会报错。
第三,还能带 modport。 virtual interface 可以带 modport 类型,限制 driver/monitor 的访问视角。
class driver;
virtual bus_if vif;
function new(virtual bus_if vif);
this.vif = vif;
endfunction
endclass一句话:virtual interface 是类对象访问静态 interface 实例的句柄,提供运行时绑定和解耦,本身不是新的接口实例。
E11 · 注入并检查 virtual interface
扩展练习 · E11 · 题型:简短编码 · 对应原题:Q11
考点
- 静态 interface 与动态 class 的连接
- 句柄绑定
已定义 bus_if,补全一个 driver:构造时接收接口句柄,空句柄时立即报错,保存后供 run 使用。
展开参考答案 · E11
class driver;
virtual bus_if vif;
function new(virtual bus_if vif);
if (vif == null) $fatal(1, "null interface");
this.vif = vif;
endfunction
endclass顶层应先实例化接口,再把该实例传给构造函数。virtual interface 是引用,不会创建新的硬件接口实例。