初识UVM

UVMlab1



前言

参考文章:路科验证MCDF_uvmlab1


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

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

覆盖类最好是原始类的子类,相关方法virtual。如有需要请记得$cast。
get_full_name可以完整地得到当前component的路径。
set_type_override_by_type()和set_type_override()的区别,前者函数内部通过xx::get_type()传递类名,后者通过字符串传递,更方便。

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

1.域的自动化

目的:通过将成员变量在下方代码中进行注册,可以直接赋予变量常用的操作,比如通过::config_db配置、复制、克隆、打印、比较等

2.uvm_object常用方法

在.compare()时如果不定义自己的uvm_comparer会使用uvm_default_comparer。可以通过uvm_default_comparer.show_max配置comparer来更改错误输出信息的最大值。

三、让component引以为傲的phase机制

贯穿UVM的设计哲学:在不同时间做不同的事情,在同一时间做不同的事情。

芯片验证漫游指南

四、config机制

如果说SV对于package的配置是白盒验证,那么拥有config机制的UVM可以说是黑盒验证,直接开创了验证IP的新时代!

在哪里set,哪里get:在顶层tb去set,在底层的build_phase中去get(传递变量和对象也一样)。

1.传递virtual interface到环境中。

由于vif是硬件属性,接口set要发生在run_test之前。

uvm_config_db#(virtual uvm_config_if)::set(uvm_root::get(),"uvm_test_top.*","vif",if0);
uvm_config_db#(virtual uvm_config_if)::get(this,"","vif",vif)

2.设置单一变量值

在各个test中,可以在build_phase里对底层组件的变量set,在底层组件例化前get,既实现了变量值的修改,又无需重新编译。

uvm_config_db#(int)::set(this,"c1.c2","var2",20)
uvm_config_db#(int)::get(this,"","var2",var2)

3.传递配置对象

如果在test配置里,需要配置的参数多,而且还分属于不同的组件,那么对多层次的变量还采用变量设置的方法,就需要更多的代码,容易出错,还不易于复用。甚至底层组件的变量被删除后,也无法通过uvm_config_db::set()得知配置是否成功。

将每个组件中的变量加以整合,放置到一个uvm_object中,再把这个对象进行传递,会更有利于整理环境的维护。

uvm_config_db#(config_obj)::set(this,"c1.c2","cfg",cfg)
uvm_config_db#(config_obj)::get(this,"","cfg",cfg)

4.tips

《UVM实战》:对于build_phase来说,
uvm_component对其做的最重要的事情就是自动获取通过config_db::set设置的参数。

满足以下要求get可以省略
使用uvm_field_*对成员变量进行注册
build_phase中包含super.build_phase语句
笔者所接触的代码中大部分情况下都满足。
原因在于super.build_phase,执行完super.build_phase这一句后,变量的值就已经config。

五、消息管理

验证后期,验证环境较为稳定,减少不必要的消息打印可以提高仿真速度。

对于本类的消息管理

set_report_verbosity_level_hier(UVM_NONE)
set_report_id_verbosity_hier("id",UVM_NONE)

对于全局的消息管理

uvm_root::get().set_report_verbosity_level_hier(UVM_NONE)
uvm_root::get().set_report_id_verbosity_hier("id",UVM_NONE)

结语

念去去,千里烟波,暮霭沉沉楚天阔 ------《雨霖铃》
2023.5.11于西军电

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值