【学习记录丨UVM】1.2驱动器driver(2)—— 引入factory、objection机制和interface

《UVM白皮书》关于driver的介绍

一、加入factory机制

1. 加入factory机制的driver

引入factory机制后,能够实现自动实例化class,并能正常调用其中的task&function。

 下边是最简单driver的代码,只要在a_driver中加入红框中的内容就引入了factory机制。

引入factory机制:在声明一个新的class后,使用`uvm_component_utils()宏。

`uvm_component_utils()宏 能够把 新的class记录在uvm内的注册表上,方便后续使用。

2.  加入factory机制后top_tb实例化driver得到简化

上图右边使用一个run_test()语句替换掉了左侧原来的实例化和main_phase的显式调用。

根据类名创建其实例,这是`uvm_component_utils()宏带来的效果。

所有派生自uvm_component的类都应该使用`uvm_component_utils()注册宏!!!

UVM常用类及树形结构_uvm树-CSDN博客

  • 传递给run_test()语句的是一个字符串“a_driver”,UVM能够依据run_test(“a_driver”);创建该字符串类的一个实例,并调用其main_phase。
  • 在UVM中,只要一个类使用`uvm_component_utils()注册且被实例化,那么这个类的main_phase就会自动被调用。
  • 实现一个driver就是实现其main_phase。

二、加入objection机制

  • 问:为什么要加入objection机制?
  • 答:UVM通过objection机制来控制验证平台的关闭,保证任务按预期执行而不被意外结束。

 在每个phase中,UVM都会检查objection有没有被提起(raise_objection)如果有,那么等待objection被撤销(drop_objection)后停止仿真。 如果根本没有objection,那么立即结束当前phase。

task a_driver::main_phase(uvm_phase phase);
    phase.raise_objection(this);
    ...
    phase.drop_objection(this);
endtask

注意:raise_objection语句必须在phase的第一个消耗仿真时间的语句之前,否则无效。 

三、加入virtual interface

 【学习记录丨UVM】1.1接口interface-CSDN博客

较详细介绍可以看上边这个文章。

1.  定义interface

interface a_if(input clk, input rst_n)
    logic      vld ;
    logic[7:0] data;
endinterface

2.  在top_tb中声明interface

这里也可以通过force dut.xx = u_if.xxx;直接连接

module harness();
    …
    a_if  u_if(clk,rst_n);//module中interface的声明方式
    …
    dut my_dut(.clk(clk),
               .rst_n(rst_n),
               .DATA(u_if.data));
    …
endmodule

3.  在driver中声明interface

声明后就可以在driver中使用了.eg.. vif.xx = 1'b1;

class a_driver extends uvm_driver;
    …
    virtual a_if  vif;//在class中声明interface必须使用virtual
    …
endclass

 4.  连接top_tb和driver中的interface

config_db机制和具体介绍见【学习记录丨UVM】1.1接口interface-CSDN博客

使用config_db机制:在top_tb进行set操作;

 在driver里进行get操作。

  config_db机制和具体介绍见【学习记录丨UVM】1.1接口interface-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值