【UVM】-- UVM调试

1、引入factory机制:

在要注册类开头配置:

`uvm_component_utils(className);注册类

在top中可以直接运行run_test("className");实例化这个类并且运行这个类的main_phase

2、引入objection机制

上面这样只配置factory后,main_phase中的内容得不到执行马上就结束了,需要添加objection

在main_phase中添加:

phase.raise_objection(this);

中间是main_phase中执行的代码。

phase.drop_objection(this);

这样就可以自动执行了。

3、灵活配置激励和待测设计之间的接口

摆脱激励类中直接操作顶层模块的信号时,使用模块层级信号。

(1)在激励类中添加虚接口:virtual 接口名 v接口句柄;

在main_phase中可以通过接口句柄操作接口。

(2)大同顶层模块中的接口实例和激励类中的虚接口

引入config_db机制,通过config_db的set和get方法传递接口。

在顶层top模块中设置set传入接口实例:

uvm_config_db #(virtual my_if) :: set(null, "uvm_test_top", "vif", input_if);//发送出去input_if接口实例,run_test创建的实例名uvm_test_top

在激励类中通过get接收接口实例:

在build_phase中接收:

virtual function build_phase(uvm_phase phase);

        super.build_phase(phase);

        uvm_config_db #(virtual my_if)::get(this, "", "vif",  vif);//获取接口实例给本类实例的vif

endfunction

4、在测试平台中加入其他模块

transaction:就是一个激励包(类似一个协议包)

(1)transaction继承自uvm_sequence_item

类的属性就是包中的字段

(2)transaction注册factory使用`uvm_object_utils(transaction类名)

原因是生命周期不贯穿整个测试平台周期,使用完毕后会结束生命周期。

(3)在激励类中使用transaction

在激励类中的main_phase中实例化transaction,然后将transaction中的数据字段分发到接口中去驱动。

5、引入容器类env

引入原因:在测试平台中有很多相对功能独立的模块,如果都像上面那样,通过run_test实例化driver,然后在driver中实例化,显得不合理,所以引入一个容器类,这个类里包含所有的组件,并且在top的run_test中实例化这个容器,通过这个容器来实例化所有组件。

(1)env继承自uvm_env

(2)注册该类是`uvm_component_utils(类名)

(3)该类的属性是其他组件

(4)在该类的build_phase中实例化其他组件,使用以下方式实例化:

如:drv = my_driver::type_id::create("drv", this);//两个参数分别对应new中的两个参数

组件类句柄 = 组件类名::type_id::create("实例名", this);<

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值