news 2026/5/5 15:29:56

2.uvm_base_AI

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2.uvm_base_AI

UVM 核心知识点详解

**

1. uvm_component 与 uvm_object

uvm_component 和 uvm_object 是 UVM 验证平台的两大核心基类,前者侧重「结构化组件」,后者侧重「数据 / 配置载体」,二者构成了 UVM 框架的基础。

1.2 uvm_object 常用派生类

uvm_object 是 UVM 中所有数据类、配置类的基类,核心用于数据存储、传递与自动化管理,常用派生类如下:

类名父类核心作用
transactionuvm_sequence_item事务类,封装 DUT 输入 / 输出数据(如地址、数据、控制信号),是数据传输的基本单元
sequenceuvm_sequence序列类,组织管理 sequence_item,按场景产生测试激励(如单次读写、突发传输)
configuvm_object配置类,集中存储验证平台参数(如时钟频率、DUT 模式),通过 config_db 传递
uvm_reg_itemuvm_sequence_item寄存器事务类,封装寄存器读写操作的相关信息(地址、数据、操作类型)
uvm_reg_mapuvm_object寄存器映射类,管理寄存器地址映射关系,提供寄存器访问接口
uvm_memuvm_object存储类,模拟 DUT 中的内存模块,支持读写操作
uvm_reg_fielduvm_object寄存器字段类,封装寄存器中的单个字段(如控制位、状态位)
uvm_reguvm_object寄存器类,由多个 uvm_reg_field 组成,描述单个寄存器的属性与行为
uvm_reg_fileuvm_object寄存器文件类,分组管理多个寄存器,简化寄存器集合的访问
uvm_reg_blockuvm_object寄存器块类,顶层寄存器容器,包含多个 uvm_reg_map 和 uvm_reg_file
uvm_phaseuvm_object阶段控制类,定义验证平台的运行阶段(如 build_phase、run_phase),控制组件行为时序

1.3 uvm_component 常用派生类

uvm_component 是 UVM 中所有「结构化组件」的基类,具有生命周期管理、树形层次结构,核心用于实现验证平台的功能模块,常用派生类如下:

1.3.1 uvm_driver 类
  • 核心作用:向 sequencer 索要 sequence_item(事务),将激励数据转换为 DUT 可识别的物理信号并发送给 DUT;部分场景下接收 DUT 响应。

  • 关键成员(扩展自 uvm_component):

uvm_seq_item_pull_port #(REQ, RSP) seq_item_port; // 向 sequencer 拉取事务的端口 uvm_seq_item_pull_port #(REQ, RSP) seq_item_prod_if; // 生产端接口(兼容老版本) uvm_analysis_port #(RSP) rsp_port; // 发送响应的端口 REQ req; // 接收的请求事务(模板参数,需指定具体 transaction 类型) RSP rsp; // 发送的响应事务(模板参数)
1.3.2 uvm_monitor 类
  • 核心作用:监听 DUT 的接口信号,采集数据并转换为 transaction 级别的 sequence_item,发送给 scoreboard、reference_model 等组件用于校验。

  • 类定义(无额外扩展成员,仅继承 uvm_component 基础功能):

class uvm_monitor extends uvm_component; function new(string name, uvm_component parent); super.new(name, parent); endfunction const static string type_name = "uvm_monitor"; // 修正原笔误:uvm_monirot → uvm_monitor virtual function string get_type_name(); return type_name; endfunction endclass
1.3.3 uvm_sequencer 类
  • 核心作用:组织管理 sequence,维护 sequence 的优先级与执行顺序;当 driver 索要数据时,将 sequence 产生的 sequence_item 转发给 driver,是 sequence 与 driver 之间的桥梁。

  • 扩展说明:支持事务仲裁、锁定、中断等高级功能,默认提供 uvm_sequencer #(REQ, RSP) 模板类,需指定事务类型。

1.3.4 uvm_scoreboard 类
  • 核心作用:接收 monitor 采集的 DUT 实际输出,与 reference_model 输出的预期结果进行对比,判断测试用例是否通过(Pass/Fail)。

  • 扩展说明:无额外扩展成员,用户需自定义对比逻辑(如数组对比、时序对齐对比)。

1.3.5 reference_model 类
  • 核心作用:行为级模型,模仿 DUT 的功能逻辑,接收 monitor 采集的输入事务,计算出预期输出结果并发送给 scoreboard。

  • 扩展说明:UVM 无专门定义的基类,需用户手动继承 uvm_component 实现,确保接口与 monitor、scoreboard 兼容。

1.3.6 uvm_agent 类
  • 核心作用:封装 driver、monitor 和 sequencer(可选),形成独立的接口代理模块,提高验证平台的可重用性(如 UART agent、SPI agent)。

  • 关键成员与方法

virtual class uvm_agent extends uvm_component; uvm_active_passive_enum is_active = UVM_ACTIVE; // 模式:ACTIVE(含 driver+sequencer)/ PASSIVE(仅 monitor) function void build_phase(uvm_phase phase); int active; super.build_phase(phase); // 修正原笔误:build_active → build_phase if(get_config_int("is_active", active)) // 从 config_db 获取模式配置 is_active = uvm_active_passive_enum'(active); endfunction endclass
1.3.7 uvm_env 类
  • 核心作用:顶层组件容器,封装验证平台中所有固定不变的 uvm_component(如 agent、scoreboard、reference_model),统一管理组件的实例化与连接,简化测试用例的编写。

  • 类定义

virtual class uvm_env extends uvm_component; function new(string name = "env", uvm_component parent = null); super.new(name, parent); endfunction const static string type_name = "uvm_env"; virtual function string get_type_name(); return type_name; endfunction endclass
1.3.8 uvm_test 类
  • 核心作用:测试用例的顶层入口,负责实例化 uvm_env,配置验证平台参数(通过 config_db),启动 sequence,控制测试流程(如终止条件)。

  • 类定义

class uvm_test extends uvm_component; // 修正原笔误:extend → extends function new(string name, uvm_component parent); super.new(name, parent); endfunction const static string type_name = "uvm_test"; virtual function string get_type_name(); return type_name; endfunction endclass

1.4 uvm_object 相关注册宏

uvm_object 及其派生类需通过以下宏注册到 UVM Factory 机制,支持动态创建、类型覆盖等功能:

宏名适用场景
uvm_object_utils(T)非参数化的 uvm_object 派生类注册(如普通 config 类、transaction 类)
uvm_object_param_utils(T)参数化的 uvm_object 派生类注册(如 uvm_sequence #(REQ))
uvm_object_utils_begin(T)带成员变量自动化管理的非参数化类注册(配合 uvm_field_* 宏使用)
uvm_object_param_utils_begin(T)带成员变量自动化管理的参数化类注册(配合 uvm_field_* 宏使用)
uvm_object_utils_end结束 uvm_object_utils_begin 块的定义(必须与 begin 成对使用)

1.5 uvm_component 相关注册宏

uvm_component 及其派生类需通过以下宏注册到 UVM Factory 机制,支持组件实例化、配置传递等功能:

宏名适用场景
uvm_component_utils(T)非参数化的 uvm_component 派生类注册(如普通 agent、scoreboard)
uvm_component_param_utils(T)参数化的 uvm_component 派生类注册(如 uvm_driver #(REQ, RSP))
uvm_component_utils_begin(T)带成员变量自动化管理的非参数化组件注册(继承 uvm_object 的 compare/print 功能,支持 config_db 配置)
uvm_component_param_utils_begin(T)带成员变量自动化管理的参数化组件注册
uvm_component_utils_end结束 uvm_component_utils_begin 块的定义(必须与 begin 成对使用)

1.6 uvm_component 与 uvm_object 的核心差异(补充)

特性uvm_objectuvm_component
父类参数无 parent 参数必须指定 parent 参数(构建树形结构)
核心功能数据存储、传递、自动化(copy/compare)功能实现、组件管理、生命周期控制
关键方法clone()、copy()、compare()build_phase()、run_phase()
Factory 注册用 uvm_object_* 宏用 uvm_component_* 宏

重要限制

  • uvm_object 支持 clone() 方法:自动分配内存并复制对象内容。

  • uvm_component 不支持 clone() 方法(因需绑定 parent 构建树形结构),但可使用 copy() 方法(需提前分配内存)。

2. UVM 的树形结构

UVM 验证平台通过 uvm_component 的 parent 参数构建树形层次结构,实现组件的统一管理(如配置传递、生命周期控制)。

2.1 树形结构的核心:parent 参数

所有 uvm_component 实例化时,必须通过构造函数指定 parent 参数(类型为 uvm_component),用于明确组件在树形结构中的层级关系:

function new(string name = "component_name", uvm_component parent); super.new(name, parent); // 调用父类构造函数,绑定 parent endfunction
  • parent 为当前组件的父节点(如 agent 的 parent 是 env)。

  • 组件的完整路径由「父组件名 + 子组件名」构成(如 uvm_test_top.env.uart_agent.driver)。

2.2 树形结构的根:uvm_top

UVM 树形结构的根节点是uvm_top,其特性如下:

  • uvm_top 是 uvm_root 类的唯一实例,uvm_root 继承自 uvm_component。

  • uvm_top 的 parent 参数为 null(无父节点)。

  • 若实例化 uvm_component 时将 parent 设为 null,系统会自动将其 parent 绑定为 uvm_top。

  • uvm_top 确保整个验证平台只有一棵组件树,便于全局管理。

2.3 树形结构操作函数

UVM 提供以下函数用于遍历和操作组件树:

函数名功能描述
get_parent()获取当前组件的父节点
get_child(string name)根据名称获取指定子组件
get_children()获取当前组件的所有子组件(返回队列)
get_first_child()获取第一个子组件
get_next_child()获取下一个子组件(配合 get_first_child() 遍历)
get_num_children()获取当前组件的子组件数量

3. Field Automation(字段自动化)机制

Field Automation 机制是 UVM 提供的便捷功能,通过 uvm_field_* 系列宏,自动实现 uvm_object 派生类成员变量的 copy、compare、print、pack/unpack 等操作,无需手动编写冗余代码。

3.1 常用 uvm_field_* 宏

3.1.1 基础类型宏

用于单个基础类型成员变量的自动化管理:

宏名适用变量类型说明
uvm_field_int(ARG, FLAG)int/bit/logic 等整型自动化管理整型变量
uvm_field_real(ARG, FLAG)real 浮点型自动化管理浮点型变量
uvm_field_enum(T, ARG, FLAG)枚举类型(T 为枚举名)自动化管理枚举变量(需指定枚举类型 T)
uvm_field_object(ARG, FLAG)uvm_object 派生类对象自动化管理对象类型变量(需提前实例化)
uvm_field_event(ARG, FLAG)uvm_event 事件类型自动化管理事件变量
uvm_field_string(ARG, FLAG)string 字符串类型自动化管理字符串变量
3.1.2 数组 / 队列 / 联合数组宏

用于集合类型成员变量的自动化管理:

宏名适用变量类型说明
uvm_field_array_int(ARG, FLAG)int 数组(固定长度)自动化管理整型数组
uvm_field_array_enum(T, ARG, FLAG)枚举数组(固定长度)自动化管理枚举数组
uvm_field_array_object(ARG, FLAG)uvm_object 数组(固定长度)自动化管理对象数组
uvm_field_array_string(ARG, FLAG)string 数组(固定长度)自动化管理字符串数组
uvm_field_sarray_int(ARG, FLAG)动态数组(sarray)自动化管理动态整型数组
uvm_field_queue_int(ARG, FLAG)队列(queue)自动化管理整型队列
uvm_field_queue_enum(T, ARG, FLAG)枚举队列自动化管理枚举队列
uvm_field_queue_object(ARG, FLAG)对象队列自动化管理对象队列
uvm_field_queue_string(ARG, FLAG)字符串队列自动化管理字符串队列
uvm_field_aa_int_string(ARG, FLAG)联合数组(int→string)自动化管理整型到字符串的联合数组

3.2 Field Automation 核心函数

通过 uvm_field_* 宏注册后,uvm_object 派生类会自动获得以下函数(无需手动实现):

函数名功能描述用法示例
copy(uvm_object rhs)将 rhs 对象的成员变量值复制到当前对象obj1.copy(obj2);(obj1 是目标对象)
compare(uvm_object rhs, uvm_comparer comparer=null)对比当前对象与 rhs 的成员变量,返回是否一致(1 = 一致,0 = 不一致)if(obj1.compare(obj2)) $display(“一致”);
pack_bytes(ref byte unsigned bytestream[], input uvm_packer packer=null)将成员变量打包为字节流(byte 数组)byte unsigned stream[]; obj.pack_bytes(stream);
unpack_bytes(ref byte unsigned bytestream[], input uvm_packer packer=null)从字节流中解包,赋值给成员变量obj.unpack_bytes(stream);
pack(ref bit bitstream[], input uvm_packer packer=null)打包为比特流(bit 数组)bit stream[]; obj.pack(stream);
unpack(ref bit bitstream[], input uvm_packer packer=null)从比特流解包obj.unpack(stream);
pack_ints(ref int unsigned intstream[], input uvm_packer packer=null)打包为整型流(int 数组)int unsigned stream[]; obj.pack_ints(stream);
unpack_ints(ref int unsigned intstream[], input uvm_packer packer=null)从整型流解包obj.unpack_ints(stream);
print()打印所有注册的成员变量值(带层级)obj.print();
clone()分配内存并复制当前对象,返回新对象指针uvm_object obj2 = obj1.clone();

3.3 Field Automation 标志位(FLAG)

uvm_field_* 宏的 FLAG 参数用于控制自动化功能的开启 / 关闭,常用标志位如下:

标志位功能描述
UVM_ALL_ON开启所有自动化功能(copy/compare/print/pack)
UVM_PRINT仅开启打印功能
UVM_COPY仅开启拷贝功能
UVM_COMPARE仅开启比较功能
UVM_PACK仅开启打包 / 解包功能
UVM_NOPRINT关闭打印功能
UVM_NOCOPY关闭拷贝功能
UVM_NOCOMPARE关闭比较功能
UVM_NOPACK关闭打包 / 解包功能
标志位使用示例
class my_transaction extends uvm_sequence_item; int dmac; // 目的 MAC 地址 int smac; // 源 MAC 地址 int ether_type; // 以太网类型 int pload[]; // 负载数据(动态数组) int crc; // CRC 校验值 int crc_err; // CRC 错误标记 // 注册类并指定自动化功能(FLAG 组合) `uvm_object_utils_begin(my_transaction) `uvm_field_int(dmac, UVM_ALL_ON) // 开启所有功能 `uvm_field_int(smac, UVM_ALL_ON) // 开启所有功能 `uvm_field_int(ether_type, UVM_ALL_ON) // 开启所有功能 `uvm_field_array_int(pload, UVM_ALL_ON) // 数组类型,开启所有功能 `uvm_field_int(crc, UVM_ALL_ON) // 开启所有功能 `uvm_field_int(crc_err, UVM_ALL_ON | UVM_NOPACK) // 开启所有功能,但关闭打包 `uvm_object_utils_end function new(string name = "my_transaction"); super.new(name); endfunction endclass
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 15:26:34

RS-485转LoRaWAN:无线供电工业物联网革命

RS-485转LoRaWAN DTU:无线供电物联网部署的技术革新 传统工业物联网部署中,RS-485总线因稳定性和长距离传输优势被广泛应用,但布线复杂、供电限制成为痛点。RS-485转LoRaWAN DTU(数据终端单元)通过无线通信与能量采集…

作者头像 李华
网站建设 2026/5/5 15:26:09

taotoken多模型api助力matlab数据分析与报告生成自动化

Taotoken多模型API助力MATLAB数据分析与报告生成自动化 1. 科研数据分析的自动化挑战 科研人员与数据分析师在日常工作中面临大量数据处理与报告撰写任务。传统流程需要手动整理数据、编写分析结论并形成报告,耗时且容易出错。MATLAB作为科学计算领域的常用工具&a…

作者头像 李华
网站建设 2026/5/5 15:24:43

OpenCore黑苹果实战指南:从硬件避坑到系统优化的深度解析

OpenCore黑苹果实战指南:从硬件避坑到系统优化的深度解析 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 你是不是也遇到过这样的场景:看着别人…

作者头像 李华
网站建设 2026/5/5 15:18:44

英雄联盟Akari助手:5个高效智能功能让游戏体验更专业

英雄联盟Akari助手:5个高效智能功能让游戏体验更专业 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟中的繁琐操作和…

作者头像 李华
网站建设 2026/5/5 15:18:05

APKMirror开源客户端:安卓应用安全下载与管理的完整指南

APKMirror开源客户端:安卓应用安全下载与管理的完整指南 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror APKMirror是一款开源专业的安卓应用管理工具,专注于为用户提供安全高效的第三方应用下载体验。这款工…

作者头像 李华
网站建设 2026/5/5 15:17:45

如何用QrazyBox拯救损坏的二维码:免费专业级修复工具完全指南

如何用QrazyBox拯救损坏的二维码:免费专业级修复工具完全指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的情况:一张重要的二维码因为打印模…

作者头像 李华