【UVM_Introduction & Factory_2024.02.28】

Introduction

通用验证方法学UVM(2014年1.2版本延续至今)
作用:
降低验证工程复杂度,保证验证可靠性,提升验证效率
提供一套标准的类库,减轻环境构建的负担,更多的投入制定验证计划和创建测试场景
提供一套完善的运行机制,从复用性、完备性等方面提升了验证效率:

  • Factory机制/ConfigDatabase机制/Phase机制
  • Objection机制/Sequence机制Reporting机制
  • 寄存器抽象层(RAL, Register Abstraction Layer)
  • 事务级建模(TLM, Transaction Level Modeling )

蓝色不用加this,蓝色橙色用create,绿色用new
在这里插入图片描述

验证平台
在这里插入图片描述
启动UVM:

Tb:import uvm_pkg::*;
`include "uvm_macross.svh"
initial begin
run_test();//一个run_test语句会创建一个my_driver的实例,并且会自动调用my_driver的main_phase
end
脚本:+ntb_random_seed +UVM_TESTNAME=case_name

在这里插入图片描述
object生命周期短,component则贯穿整个测试流程
约束里用soft表示软约束,若有冲突就失效

看uvm源码的方法

elab.log看编译文件路径
在这里插入图片描述
进入uvm路径
在这里插入图片描述
base中有源码,uvm_pkg.sv包含的组件
看include文件的具体内容,光标在该行gf进入该文件,ctrl+o退出

run case 和打印UVM拓扑结构

改Makefile case_name,base_test加入代码
在这里插入图片描述

可在run.log中查看
在这里插入图片描述

Factory

封装,继承,多态:重写/覆盖override——子类重新定义父类的虚函数的做法
重载overload——允许存在多个同名函数,而这些函数的参数表不同
工厂机制产生原因:产品迭代/环境复用/验证效率
工厂机制优势:使得一个子类的指针以父类的类型传递时,其表现出的行为依然是子类的行为(function/task必须是virtual类型)

运用factory的步骤

将类注册到工厂

Object
`uvm_object_utils()//把一个直接或间接派生自uvm_object的class注册到factory
`uvm_object_param_utils//把一个直接或间接派生自uvm_object的参数化的class注册到factory
参数化的类有利于提高代码的可移植性
Component
`uvm_component_utils()
`uvm_component_param_utils

创建对象

创建uvm_component对象:
comp_type::type_id::create(string name, uvm_component parent);
创建uvm_object对象:
object_type::type_id::create(string name);

override

在例化前设置覆盖对象和类型

set_type_override_by_type//类型覆盖:UVM所有层次结构下的原有类型都被新类型所覆盖掉
set_inst_override_by_type//实例覆盖:在某些位置中的原有类型会被新类型所覆盖掉

父类含有virtual的虚方法可以被子类覆盖
采用overide方法,会用新子类创建对象,old_class和new_class要注册和create
set_type_override_by_type(old_class::get_type(),new_class::get_type());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iKUNqa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值