news 2026/7/7 18:50:49

9 UVM结束机制解析:uvm_test_done.raise/drop_objection(this) set_drain_time(this, 10)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
9 UVM结束机制解析:uvm_test_done.raise/drop_objection(this) set_drain_time(this, 10)

文章目录

  • 原始代码及log
  • UVM结束机制解析:uvm_test_done异议机制
    • 🧩 仿真结果验证
    • 🔍 UVM异议机制核心原理
      • ✅ UVM异议机制的本质
      • ✅ UVM异议计数器工作原理
    • 🧪 UVM异议机制工作流程
      • 1. 设置排空时间
      • 2. 启动并行任务
      • 3. 任务执行流程
      • 4. 异议回调函数
    • 💡 为什么测试在60ns结束而不是50ns?
    • ✅ UVM异议机制的三个关键组件
    • 💡 UVM异议机制的核心原则
    • ✅ UVM异议机制的典型用法
      • 1. 在组件中使用异议
      • 2. 使用异议回调
    • 💬 与UVM官方文档一致
    • ✅ 重要结论:UVM异议机制的正确使用
      • ✅ 正确使用步骤(100%准确)
      • ❌ 常见错误
    • 💡 为什么需要排空时间?
    • 💬 重要总结
  • 追更!
  • UVM 中 Phase 机制与 uvm_test_done:区别、联系与现代实践
    • 一、一句话总结
    • 二、核心区别与联系
    • 三、UVM Phase 机制详解
      • 1. Phase 机制的核心价值
      • 2. Phase 分类与执行顺序
        • ✅ Function Phase(不消耗仿真时间)
        • ✅ Task Phase(消耗仿真时间)
      • 3. 执行顺序图示
      • 4. 关键代码示例(现代 UVM 实践)
      • 5. 为什么 Phase 机制优于 uvm_test_done
        • uvm_test_done(已弃用)示例
        • UVM Phase(推荐)示例
    • 四、Phase 机制的三大优势
      • 1. 精细控制
      • 2. 自动化
      • 3. 与 UVM 设计哲学一致
    • 五、UVM Phase 机制执行流程图
    • 六、关键结论
    • 七、附录:UVM Phase 机制执行顺序速查表

原始代码及log

`timescale1ns/1ns module test;// 这个简单示例展示了如何使用 uvm_test_done 异议机制来协调测试结束活动。// 若想了解在完整环境中使用测试结束协调的示例,请参考 xbus 示例。//// 在本例中,组件设置了一个 10 时间单位的排空时间(drain time)。// 组件随后启动了 4 个进程,这些进程消耗不同的时间。// 当最后一个进程完成(时间为 50)时,排空时间开始生效。// 测试在时间 60 结束。//// 该示例还展示了组件异议回调的用法。// 本例中使用了 dropped 回调,但 raised 和 all_dropped 的工作方式类似,// 只是 all_dropped 是一个耗时的任务。import uvm_pkg::*;`include"uvm_macros.svh"classsimple_testextends uvm_test;functionnew(string name,uvm_component parent);super.new(name,parent);endfunction:new// Register with the factory.`uvm_component_utils(simple_test)virtualtaskrun_phase(uvm_phase phase);// Set a drain time on the objection if neededuvm_report_info("drain","Setting drain time of 10",UVM_NONE);uvm_test_done.set_drain_time(this,10);// Run a bunch of processes in parallelforkdoit(35);doit(25);doit(50);doit(15);join endtask// A simple task that consumes some time.taskdoit(time delay);staticints_inst=0;intinst=s_inst++;//Raise an objection before starting the activityuvm_test_done.raise_objection(this);uvm_report_info("doit",$sformatf("Starting doit (%0d) with delay %0t",inst,delay),UVM_NONE);#delay;uvm_report_info("doit",$sformatf("Ending doit (%0d)",inst),UVM_NONE);//Drop the objection when doneuvm_test_done.drop_objection(this);endtask// Use an objection callback do something when objections are raised or// dropped (or all dropped). This example prints some information on each// drop.virtualfunctionvoiddropped(uvm_objection objection,uvm_object source_obj,string description,intcount);uvm_report_info("dropped",$sformatf("%d objection(s) dropped from %s, total count is now %0d",count,source_obj.get_full_name,objection.get_objection_total(this)),UVM_NONE);endfunction endclass:simple_test// Run the testinitialrun_test("simple_test");endmodule 以下是实际仿真结果:--------------------------------------------------------
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 18:49:26

知网AIGC查重率太高?6个技巧快速把AI率降低50%!

知网AIGC率过高是当前很多学生和研究者在论文写作中遇到的普遍问题。别慌,只要掌握正确的方法,完全可以将AI生成痕迹有效降低,顺利通过检测。 一、知网AIGC检测原理是什么? 知网等平台通过以下方式判断内容是否由AI生成&#xf…

作者头像 李华
网站建设 2026/7/7 17:40:59

2025年12月最新降低知网AI率的攻略,2h手把AI率降低到3%!

知网AIGC率过高是当前很多学生和研究者在论文写作中遇到的普遍问题。别慌,只要掌握正确的方法,完全可以将AI生成痕迹有效降低,顺利通过检测。 一、知网AIGC检测原理是什么? 知网等平台通过以下方式判断内容是否由AI生成&#xf…

作者头像 李华
网站建设 2026/7/7 15:59:44

知网AIGC检测原理+降率实操:从100%降到5%

知网AIGC率过高是当前很多学生和研究者在论文写作中遇到的普遍问题。别慌,只要掌握正确的方法,完全可以将AI生成痕迹有效降低,顺利通过检测。 一、知网AIGC检测原理是什么? 知网等平台通过以下方式判断内容是否由AI生成&#xf…

作者头像 李华
网站建设 2026/7/6 22:22:45

16、Linux用户管理、权限设置与网络连接指南

Linux用户管理、权限设置与网络连接指南 1. 用户与权限管理基础 在Linux系统中,管理用户和权限是系统管理的重要部分。在使用 visudo 修改用户访问权限时需格外小心,若操作不当,可能会使整个系统对不期望的用户开放完全访问权限。作为公司管理员,通常会为用户分配完成工…

作者头像 李华
网站建设 2026/7/7 6:04:05

Kubernetes Job CronJob 全面解析与实战指南

Kubernetes Job & CronJob 全面解析与实战指南 在 Kubernetes 中,Pod 通常运行持续不断的服务(如 Web 服务器)。但有时你需要运行一些执行完毕就退出的任务。Job 和 CronJob 就是为这种场景而设计的。本文将从基本概念、关键区别、实战示例、运维技巧到高级配置全面解析…

作者头像 李华
网站建设 2026/7/7 9:41:27

SQL分析函数`ROW_NUMBER`的兼容性与深度解析

🔍 SQL分析函数 ROW_NUMBER() 深度解析 ROW_NUMBER() 是一个标准的 窗口函数 (Window Function),它为分区(partition)或结果集中的每一行分配一个唯一的、连续的序号,从1开始。 1. 语法结构 其基本语法与其他窗口函数类…

作者头像 李华