UVM入门实验1

零、一些补充回顾

  • 共有9个phase,其中run_phase是任务类型,run_phase中,可以细分出12个小phase,小phase是依次执行,但和run_phase又是并行执行的

  • raise_objection()、drop_objection()用于控制仿真的开始和结束,建议在已进入run_phase就拉起,保证objection counter能够及时增加,防止仿真退出

  • uvn_config_db可以传递virtual interface到环境中、设置单一变量、传递配置对象到环境

  • interface的set()、get()只能发生在组件中

  • 接口传递一定要发生在run_test()之前,确保进入build_phase的时候vif已经在uvm_config_db中了。set()、get()路径一直,类型也要一致,virtual

  • test是验证环境的唯一入口,所有测试实例的场景都必须继承于uvm_test

  • 关于配置,使用config_db是一种静态配置,只需要在build阶段配置一次,整个仿真中的模式就会被固化。动态配置可以用transaction,动态创建、动态传输、动态配置

一、工厂的注册、创建和覆盖机制

1.运行object_crearte

在这里插入图片描述

2.运行object_override

在这里插入图片描述

3.运行component_create

在这里插入图片描述

4.运行component_override

在这里插入图片描述

  • t1/t2/t3/t4、u1/u2/u3/u4都被创建了。
  • trans对象的name没有被修改,unit对象的name被修改了。
  • t1用new()直接创建,t2/t3/t4用工厂创建,所以后三个被覆盖(工厂提供的便利)。u同理。
  • 类型覆盖要发生在创建之间,否则覆盖无效。
  • 没有注册到工厂下,用工厂方法type_id::create()会报错。

二、域的自动化以及uvm_object的常用方法

在这里插入图片描述

  • 域的自动化后可以使用uvm_object提供的一些预定义方法,自动化声明要放在声明变量后。
  • do_compare()是compare()的回调函数,当do_compare()显示声明的时候,才会被执行。
  • 默认比较器为1,即当第一个比较错误发生的时候,就不会进行后续的比较。
    为了一直比较,有两种方法:
    1.修改全局uvm_comparer对象
    uvm_default_comparer.show_max = 10;
    2.创建一个uvm_comparer对象,自己修改变量值
    在这里插入图片描述

三、phase机制

在这里插入图片描述

  • 共有9个phase,其中run_phase是任务类型,run_phase中,可以细分出12个小phase,小phase是依次执行,但和run_phase又是并行执行的。reste_phase和main_phase与run_phase并行执行,所以只花了2us。
  • build_phase是自顶向下执行,其余都是自底向上。
  • raise_objection()、drop_objection()用于控制仿真的开始和结束,建议在已进入run_phase就拉起,保证objection counter能够及时增加,防止仿真退出。

四、config机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 接口在传递的时候,类型要加virtual。接口传递要早于run_test()、create()

五、消息管理

  • 设置在build_phase中的消息屏蔽,不影响创建时的消息打印
  • set_report_id_verbosity_level_hier(str, verb)可以选择控制某些ID的消息
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值