news 2026/2/19 3:36:47

【验证技能树】UVM 源码解读04 -- `uvm_component` 源码解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【验证技能树】UVM 源码解读04 -- `uvm_component` 源码解读

—— IoC、Hierarchy 与 Phase 如何构成 UVM 的运行内核

如果说uvm_object定义了 UVM 的“数据模型”,
那么uvm_component定义的,就是UVM 如何运行

UVM 中所有真正“活着”的东西:
driver、monitor、env、agent、test ——
最终都继承自uvm_component

理解uvm_component,不是理解某个类,
而是理解UVM 如何调度一个验证系统


一、一个结论开始

**uvm_component=

  • 被 Factory 创建、
  • 被 Hierarchy 组织、
  • 被 Phase 调度的

验证运行单元。**

这三点,决定了它的全部源码结构。


二、源码入口与整体骨架

你会在这里看到它:

src/base/uvm_component.svh

高度概括后的类骨架是这样的:

class uvm_component extends uvm_report_object; // hierarchy uvm_component m_parent; uvm_component m_children[string]; // identity string m_name; string m_full_name; // phase virtual function void build_phase(uvm_phase phase); virtual function void connect_phase(uvm_phase phase); virtual task run_phase(uvm_phase phase); // factory virtual function uvm_component create(string name, uvm_component parent); endclass

所以这里可以看到:

uvm_component的源码,不是围绕“功能”,
而是围绕“组织与调度”。


三、Hierarchy:UVM 不是一堆组件,而是一棵树

1️⃣ component 为什么一定要有 parent?

看构造函数:

function new(string name, uvm_component parent); this.m_name = name; this.m_parent = parent; parent.add_child(this); endfunction

这不是“语法要求”,而是架构要求

在 UVM 里:

  • 没有 parent,就没有 hierarchy

  • 没有 hierarchy,就没有:

    • config 作用域
    • report 命名空间
    • phase 调度路径

component 天生就是“树上的节点”。


2️⃣get_full_name()为什么如此重要?

env.agent.driver

这个 full name 同时是:

  • config_db 查找路径
  • report 的作用域
  • phase 调度的定位依据

换句话说:

Hierarchy 是 UVM 的“坐标系统”。


四、IoC:为什么 component 必须走 Factory?

1️⃣ 表面问题:为什么不用new

因为 UVM 要解决的不是“能不能创建”,而是:

“我能不能在不改上层代码的前提下,替换任意一个 component?”

这就是 现代框架设计中的控制反转(IoC)


2️⃣ component 的 create 语义

driver = my_driver::type_id::create("driver", this);

这行代码意味着:

  • test 不依赖具体 driver 类型
  • override 可以在 test 层完成
  • env / agent 不需要修改

这是 UVM 能规模化复用 VIP 的根本原因。


3️⃣ 一个非常关键的认知

Factory + Hierarchy =
“验证系统的装配线”

  • factory 决定“用什么”
  • hierarchy 决定“放在哪”

五、Phase:UVM 的真正“调度器”

这是uvm_component最容易被误解、
但也是最核心的部分。

1️⃣ Phase 不是函数调用

很多人以为:

build_phase(); connect_phase(); run_phase();

是顺序函数。

这是错的。

Phase 是一个“分布式调度系统”。


2️⃣ build / connect / end_of_elaboration

这些 phase 的特点是:

  • 按 hierarchy自上而下遍历
  • 每个 component 都会被调度一次
  • 不并行、不需要同步

它们解决的是:

“结构是否完整”


3️⃣ run_phase:唯一的异类

virtual task run_phase(uvm_phase phase);

run_phase 的本质是:

  • 所有 component并行启动
  • 没有自然结束点
  • 必须依赖 objection 才能收敛

这就是为什么:

UVM 不能用 return 结束仿真。


六、Objection:分布式同步机制

uvm_component的 run_phase 中,你一定会看到:

phase.raise_objection(this); ... phase.drop_objection(this);

objection 解决的不是“结束”,而是:

“谁说了算?”

在一个复杂验证环境中:

  • driver 还在发包
  • monitor 还在收包
  • scoreboard 还没比完

没有任何一个 component 有资格单方面结束仿真。

Objection 的语义是:

“只要还有人没说完,就不能停。”

这是一个非常成熟的并行系统设计。


七、为什么说uvm_component是 UVM 的“内核”?

现在可以回头看看前文提到的这三个维度:

1️⃣ IoC

  • Factory 控制实例化
  • Test 控制替换策略

2️⃣ Hierarchy

  • Component 树组织系统
  • Config / report / phase 的基础

3️⃣ Phase

  • 生命周期调度
  • 并行运行 + 同步收敛

三者合在一起,构成了:

一个验证专用的“运行时系统”

这已经不是“写 testbench”,
而是在搭建一个验证操作系统


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/15 16:27:24

B树入门:5分钟理解这个神奇的数据结构

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 生成一个B树教学演示程序,要求有逐步构建B树的动画演示,支持交互式插入/删除节点。包含通俗易懂的概念解释和分步操作指引,适合完全没有B树基础…

作者头像 李华
网站建设 2026/2/15 17:20:50

Linly-Talker能否接入AR眼镜实现现场指导?

Linly-Talker能否接入AR眼镜实现现场指导? 在电力巡检人员攀爬铁塔时,头戴AR眼镜的他轻声问道:“这个接线盒温度异常,可能是什么原因?”几乎瞬间,一个面容沉稳的虚拟专家形象浮现在视野角落,同步…

作者头像 李华
网站建设 2026/2/12 3:22:24

1小时搭建2025Java面试模拟器:快马平台实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用快马平台快速开发Java面试模拟器原型,要求:1) 输入技术栈自动生成定制化试卷 2) 语音识别模拟真实问答 3) 代码题自动检测运行结果 4) 实时生成面试评价…

作者头像 李华
网站建设 2026/2/15 5:49:19

Open-AutoGLM隐私保护技术演进(从加密到可信执行环境全揭秘)

第一章:Open-AutoGLM隐私保护技术演进概述Open-AutoGLM作为新一代开源自动推理语言模型,其核心设计理念之一便是对用户数据隐私的深度保护。随着模型在多场景下的广泛应用,隐私泄露风险逐渐成为制约其发展的关键因素。为此,Open-A…

作者头像 李华
网站建设 2026/2/12 4:46:17

5分钟搭建Oracle数据更新原型系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个快速Oracle更新原型系统,要求:1)基于Web界面 2)支持选择表和字段 3)可视化构建WHERE条件 4)预览生成的SQL 5)执行并显示结果。系统应自动连接示例O…

作者头像 李华
网站建设 2026/2/8 10:19:35

Open-AutoGLM生态建设提速(三大未公开合作项目首次披露)

第一章:Open-AutoGLM生态建设提速(三大未公开合作项目首次披露)Open-AutoGLM作为新一代开源自动化生成语言模型框架,近期在生态布局上取得关键突破。多个此前未公开的战略合作项目浮出水面,涵盖金融、教育与智能制造三…

作者头像 李华