返回题库首页 · 接口与测试平台连接笔记

先独立作答,再展开参考答案。八股原题沿用原笔记编号;扩展练习为本站根据对应考点编写。

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 是引用,不会创建新的硬件接口实例。