真实面经题目 · 原创解析

UVM config_db 机制是什么,能否把 interface 传到 sequence?

这题考配置数据库的层级匹配和虚接口传递边界,重点是 interface 通常传给 component 或 config object,不建议 sequence 直接持有底层接口。

出现于:芯动科技 · IC 验证

60 秒回答模板

uvm_config_db 是带类型和层级匹配的配置资源表,常由 test 或顶层把 virtual interface、参数、config object set 到 env/agent/driver 这类 component 路径下,再由 component 在 build_phase get。virtual interface 的常规做法是放进 agent config,由 driver/monitor 使用。sequence 不在 component 层级树中,不能像普通 component 一样自然按层级 get;虽然可以用 null 路径、m_sequencer/p_sequencer 上下文或 sequencer 持有的 config 间接拿配置,但不推荐让 sequence 直接拿 interface。sequence 应产生 transaction,pin-level 时序由 driver 通过 virtual interface 完成;环境参数通过 config object、sequencer API 或 item 字段传递。

考点 配置数据库是层级资源表
难度 真实面经题
回答目标 讲清 config_db 的层级配置机制、虚接口常规传递路径,以及为什么 sequence 不应直接持有接口。

深入解析

01

config_db 的基本机制

config_db 基于类型参数、实例路径和字段名进行 set/get。set 通常发生在 test 或顶层连接处,get 通常发生在 component 的 build_phase。路径匹配主要服务 UVM component 层级。

02

虚接口的常规传递

testbench 顶层把真实 interface 句柄以 virtual interface 形式放入配置数据库,agent 或 driver 获取后保存到配置对象或成员变量。driver 用它驱动信号,monitor 用它采样信号。

03

sequence 不是 component 层级

sequence 是 uvm_object,不挂在 component 树上。它技术上可以通过 null 路径、m_sequencer/p_sequencer 上下文或 sequencer 持有的 config 间接获得配置,但这不是常规层级 get,也不应让 sequence 直接依赖 pin-level interface。

04

sequence 直接拿接口的问题

sequence 是激励意图层,理想上只生成 transaction。若它直接访问 interface,就绕过 sequencer、driver 和协议抽象,降低复用性,也让随机激励和时序驱动耦合在一起。

05

更推荐的传递方式

把 virtual interface 放在 agent config 里,component 从 config_db 获取;sequence 若需要环境参数,传入轻量 config object、通过 sequencer 暴露只读信息,或把需要的控制字段放进 item。真正的 pin-level 行为仍由 driver 和 monitor 负责。

易错点

  • 把 config_db 当全局变量表,随意用通配路径覆盖所有层级。
  • sequence 直接驱动 interface,绕过 driver,破坏验证分层。
  • get 失败后不检查类型、路径、字段名和 build_phase 时序。
  • 把 virtual interface 放进 transaction,到处传递底层信号句柄。

面试官追问

config_db get 失败常见原因是什么?

类型不一致、字段名拼错、实例路径不匹配、set 时机晚于 get,或者通配路径覆盖范围不符合预期。

sequence 想知道环境参数怎么办?

可以在启动 sequence 前设置成员、传入 config object,或通过 p_sequencer 访问 sequencer 持有的只读配置,但不建议直接操作虚接口。

怎样证明这个验证写法真的覆盖到了目标场景?

要看断言、功能覆盖、代码覆盖、错误注入和回归日志是否对应题目里的关键路径;如果只是组件能跑起来,但没有覆盖目标状态和异常分支,验证价值是不够的。