UVM_CALLBACK知识总结

1.功能

  • 在UVM验证平台,callback机制的最大用处就是提高验证平台的可重用性;
  • 增加或者修改UVM组件的操作,增加新的功能,不需要创建复杂的OOP层次结构;
  • 还可以用于构建异常的测试案例

2.步骤

  1. 在UVM组件中内嵌callback函数或任务;
  2. 声明一个UVM callback空壳类;
  3. 从UVM callback空壳类中扩展UVM callback类;
  4. 在验证环境中创建并登记UVM callback实例。

在UVM组件中内嵌callback函数或任务:

  • 在组建中登记UVM callback(`uvm_register_cb);
  • 使用uvm_do_callbacks宏嵌入UVM callback函数或任务.
class driver extends uvm_driver#(transation);

    `uvm_register_cb(driver,driver_callback)
    …………
    virtual task run_phase(uvm_phase phase);
        forever begin
        
        seq_item_port.get_next_item(req);
        `uvm_do_callbacks(driver,driver_callback,pre_send(this,req));
        send(req);        
        `uvm_do_callbacks(driver,driver_callback,post_send(this,req));
        seq_item_port.item_done();
        end
    endtask

endclass

声明一个UVM callback空壳类:

  • 通常都声明在同一个组件文件中;
  • 所有的方法都声明为virtual;
  • 函数体为空
typedef class driver;
class driver_callback extends uvm_callback;
    function new (string name = "driver_callback");
    super.new(name);
    endfunction
    
    virtual task pre_send (driver drv, transaction tr);endtask
    virtual task post_send (driver drv, transaction tr);endtask
endclass

通过扩展callback空壳类创建错误类error class

  • 在callback中嵌入错误信息
class driver_error_callback extends driver_callback;
    virtual task pre_send(driver drv, transaction tr);
    drv.req.payload.delete();
    endtask
endclass

在测试案例中创建并登记callback的实例

  • 在测试案例中例化callback对象
  • 创建并登记callback对象
class driver_err_test extends test_base;
    …………
    driver_error_callback  drv_err_cb;
    virtual function void connect_phase(uvm_phase phase);
    super.connect_phase(phase);
    
    drv_err_cb = new();
    uvm_callbacks #(driver,driver_callback)::add(env.drv,drv_err_cb);
    uvm_callbacks #(driver,driver_callback)::display();

    endfunction
endclass

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页