UVM测试结束机制指南

news/2025/3/3 21:45:01/文章来源:https://www.cnblogs.com/LeslieQ/p/18748364

如何正确结束UVM测试

1. UVM测试结束机制概述

传统定向测试平台通过调用$finish系统任务结束测试,而UVM采用基于异议机制(Objection Mechanism)的协同式结束策略。主要方法包括:

  • 异议机制(Raise/Drop Objection)
  • phase_ready_to_end方法
  • set_drain_time设置
graph TDA[测试结束机制] --> B[异议机制]A --> C[phase_ready_to_end]A --> D[set_drain_time]

2. 异议机制详解

2.1 核心原理

  • 使用uvm_objection类实现组件间计数器共享
  • raise_objection()增加计数器
  • drop_objection()减少计数器
  • 计数器归零触发"all dropped"状态

2.2 典型应用示例

class my_test extends uvm_test;`uvm_component_utils(my_test)task main_phase(uvm_phase phase);phase.raise_objection(this);read_after_write_seq.start(Env.Agnt.Sqnr);phase.drop_objection(this);endtask
endclass

3. 阶段执行流程

3.1 UVM阶段分组

阶段组 包含阶段 时间消耗
构建阶段 build_phase, connect_phase等 零时间
运行阶段 12个子阶段(reset/main/shutdown等) 实时
清理阶段 extract_phase, check_phase等 零时间

3.2 运行阶段执行时序

%%{init: {"theme": "neutral"}}%% sequenceDiagramparticipant Testparticipant Envparticipant ScoreboardTest ->> Env: reset_phaseEnv -->> Test: drop objectionTest ->> Env: main_phaseactivate Env #FFBBBB #lightred颜色可自定义(可选)Env ->> Scoreboard: 数据比对 Scoreboard -->> Test: drop objectionTest ->> Env: shutdown_phaseEnv -->> Test: drop objection

4. phase_ready_to_end方法

4.1 应用场景

  • 延迟阶段结束(如Scoreboard最终校验)
  • 处理耗时后处理任务

4.2 实现示例

class scoreboard extends uvm_scoreboard;bit check_state = 0;function void phase_ready_to_end(uvm_phase phase);if(phase.is(uvm_run_phase::get)) beginif (!check_state) beginphase.raise_objection(this, "Test Not Ready");fork wait_for_ok_to_finish();phase.drop_objection(this, "Test Ready");join_noneendendendfunctiontask wait_for_ok_to_finish();#50; // 实际场景替换为校验逻辑check_state = 1;endtask
endclass

5. set_drain_time方法

5.1 排水时间设置

class my_test extends uvm_test;task run_phase(uvm_phase phase);phase.raise_objection(this);my_seq.start(m_sequencer);phase.phase_done.set_drain_time(this, 20ns);phase.drop_objection(this);endtask
endclass

5.2 设置策略

场景类型 推荐排水时间 注意事项
常规数据包处理 1-5个时钟周期 覆盖最后数据包传输延迟
复杂协议校验 10-20个时钟周期 考虑最坏情况下的校验时间
多组件协同处理 双重校验机制 结合phase_ready_to_end使用

6. 最佳实践

  1. 异议操作应集中在Test层
  2. 为Scoreboard等校验组件保留phase_ready_to_end
  3. 排水时间设置应考虑最坏情况
  4. 使用uvm_info添加调试信息:
`uvm_info("PHASE_END", $sformatf("Drain time set to %0tns", drain_time), UVM_MEDIUM)

7. 常见问题处理

graph LRA[测试无法正常结束] --> B{检查点}B --> C[异议未正确drop]B --> D[phase_ready_to_end死锁]B --> E[排水时间不足]C --> F[添加调试打印]D --> G[检查fork/join_none]E --> H[增加排水时间]

关键总结

  1. 异议机制是UVM测试结束的基础
  2. phase_ready_to_end处理延迟结束场景
  3. 合理设置排水时间确保环境稳定
  4. 调试阶段应启用UVM调试信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893157.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kettle插件-git/svn版本管理插件

场景:大家都知道我们平时使用spoon客户端的时候时无法直接使用git的,给我们团队协作带来了一些小问题,需要我们本机单独安装git客户端进行手动上传trans或者job。 我们团队成员倪老师开发了一款kettle的git插件,帮我们解决了这个大难题,大大方便了我们团队协作,今天一起来…

自我介绍,软工五问

作业相关信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13325这个作业的目标 学习博客的使用自我介绍 我是软工2班的彭颂华…

HTTPS,TLS原理分析

简单介绍 Tansport Layer Security TLS 已经逐渐取代 SSL 可以简单理解:HTTPS = HTTP + SSL/TLS TLS运行在TCP之上,HTTP之下,传输层协议,负责HTTP内容的安全传输 TLS流程在TCP三次握手建立连接后开始 TLS协议结构wireshark中TLS主要分为两层,底层的是TLS记录协议,主要负责…

训练ai生成代码效果展示

训练ai生成代码效果展示 在本次实验中试图使用命令的形式来训练ai,达到成功获取需要的web开发页码的效果 起初 本来我打算让ai生成一个整体的项目,但是ai不可以直接生成一整块的项目,他也没办法把得到的结果以文件的形式传给你,得到的还是文本,第一实验的结果并不理想 以下是训…

公交线路(迪杰斯特拉)

这道题就是一道迪杰斯特拉的板子,没想到的是我想到了重载小于符号,没想到要定义优先队列 #include<iostream> #include<vector> #include<queue> #include<cstring> using namespace std; const int N=1000+5; struct node{int id,dis; }; vector<…

HDFS中数据目录的挂载在根目录下至磁盘爆满问题解决

1、查看hdfs-size.xml文件 获取数据目录位置vim /opt/hadoop/etc/hadoop/hdfs-site.xml<property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop-data/data-node-data,/home/hadoop-data/data-node-data-2,/data-3</value> </pro…

下载及安装

进入官网https://www.docker.com/ 直接在浏览器下载会比较慢,我习惯复制下载链接后到迅雷去下载,更快一些 双击安装后会有个选项是add....什么什么,意思是添加桌面快捷方式 后有个选项是退出并重启,这个重启是重启电脑(所以截图没有了),记得保存好自己的文档 问卷调查 …

修理牛棚

思路: 有的牛棚住牛,有的是空的,从反过来的思路来想,先用一块木板盖住所有有猪住的猪棚,减去空牛棚数,最终得到最多被木板挡住门的牛棚的数量。 代码展示: #include<bits/stdc++.h> using namespace std; const int N=210; int m,s,c;int a[N],b[N];int main() {c…

写了个 CasaOS/ZimaOS 内网穿透的远程访问插件(不是 frp 或者 nps),欢迎大家测试使用

插件正在提交,应该过几天就会进入市场了。 插件访问效果大概如下: casaOS 远程界面 如果大家想先行测试可以手动下载 pr 的文件进行测试。使用 插件会提供一个二维码,使用OpenIoThub 开源 APP扫码添加插件网关,然后在客户端上添加要访问的主机,然后在主机下面添加端口,然…

20241904 2024-2025-2 《网络攻防实践》第一周作业

​ 一、知识点梳理与总结 1、 实验介绍 1) VM操作系统的三种网络连接方式的适用情况 (1)桥接(Bridged)模式 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一…

从cURL到GraphQL:不同API类型概述

从cURL到GraphQL:不同API类型概述 API(应用程序编程接口)是现代软件开发的支柱,能够使不同的应用程序进行通信、共享数据并无缝执行任务。了解各种API类型及其实际应用可以为开发人员提供宝贵的见解。本文将探讨不同的API类型、它们的重要性,并通过实际示例说明它们的应用…

【H2O】--【HybrIK】关于RGB2SMPL算法工程HybrIK的安装记录

1. 前言 主要记录关于RGB2SMPL算法工程HybrIK的安装记录。 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。 如有不对之处,欢迎评论区指出错误,你我共同进步学习! 2. 正文 2.0 torch_tricks model.train()的作用是启用 Batch Normalization 和 Dropout。 m…