• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

UVM验证环境的启动过程

1)在导入uvm_pkg文件时,会自动创建UVM_root所例化的对象UVM_top,UVM顶层的类会提供run_test()方法充当UVM世界的核心角色,通过UVM_top调用run_test()方法。
2)在环境中输入run_test来启动UVM验证平台,run_test语句会创建一个my_case0的实例,得到正确的test_name。
3)依次执行uvm_test容器中的各个component组件中的phase机制,按照顺序, 1.build-phase(子顶向下构建UVM 树) 2.connet_phase(子低向上连接各个组件) 3.end_of_elaboration_phase 4.start_of_simulation_phase 5.run_phase()
objection机制仿真挂起,通过start启动sequence(每个sequence都有一个body任务。当一个sequence启动后,会自动执行sequence的body任务),等到sequence发送完毕则关闭objection,结束run_phase()(UVM_objection提供component和sequence共享的计数器,当所有参与到objection机制中的组件都落下objection时,计数器counter才会清零,才满足run_phase()退出的条件(UVM入门P45))
5)执行后面的phase。

结束仿真的机制只有利用objection挂起机制来控制仿真结束-uvm_objection类提供一种供所有component和sequence共享的计数器,若有组件挂起objection,还应记得落下objection;参与到objection机制的组件,可各自独立挂起objection仿真run_phase退出,只有这些组件都落下objection后,uvm_objection共享的counter才变为零,才可以退出run_phase.
uvm_objection类用来控制进程的方法包括:
raise_objection(uvm_object obj = null, string decscription = "", int count = 1)挂起objection;
drop_objection(uvm_object obj = null, string decscription = "", int count = 1)挂起objection;
set_drain_time(uvm_object obj = null, time drain)设置退出时间。

UVM中通过objection机制来控制验证平台的关闭。在每个phase中,UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真;如果没有,则马上结束当前phase。raise_objection语句必须在第一个消耗仿真时间的语句之前,如\(display语句是不消耗仿真时间的,这些语句可以放在raise_objection之前,但是类似@(posedge top.clk)等语句是要消耗仿真时间的。当所有的phase都执行完毕后,就会调用\)finish来将整个验证平台关掉。
采用run_test来启动UVM验证平台:

加参数run_test启动uvm验证平台
run_test语句会创建一个my_case0的实例,并会自动调用my_ case0的main_phase。仔细观察run_test语句,会发现传递给它的是一个字符串。UVM会根据这个字符串创建了其所代表类的一个实例(前提是这个类进行宏注册过了)。在UVM验证平台中,只要一个类使用uvm_component_utils注册且此类被实例化了,那么这个类的main_phase就会被自动调用,所以在driver中,最重要的就是实现main_phase。
UVM也提供对不加参数的run_test的支持:

在这种情况下,UVM会利用UVM_TESTNAME从命令行中寻找测试用例的名字,创建它的实例并运行,如下所示的代码也可以启动my_case0:

整个UVM验证平台启动及执行的流程如图所示:

测试用例启动及执行流程
启动后,整棵UVM树的结构如图所示。

完整的UVM树
uvm_top是一个全局变量,它是uvm_root的一个实例(而且也是唯一的一个实例),而uvm_root派生自uvm_component,所以uvm_top本质上是一个uvm_component,它是树的根。uvm_test_top的parent是uvm_top,而uvm_top的parent则是null。uvm_root的存在可以保证整个验证平台中只有一棵树,所有结点都是uvm_top的子节点。

posted on 2022-12-23 16:55  SOC验证工程师  阅读(2467)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3