UVM中代码的callback机制

对callback机制的理解:

类似程序中中断异常处理的概念,而callback就相当于在程序某个位置插入了中断点,当UVM执行过程遇到callback调用时,就会调用使用者自定义实现的callback函数/任务,处理完后再返回到中断点之后继续执行。

引入callback机制的目的:

  • 提高验证平台的可重用性,相同内容放在env中,不同内容通过callback引出,由使用者依据不同需求自定义实现。
  • 构建异常的测试用例

callback机制的使用

对于VIP的开发者来说, 预留一个callback函数/任务接口时需要做以下几步:

  1. 定义一个uvm_callback派生类A

  2. 声明一个uvm_callback池

    typedef uvm_callbacks#(my_driver, A) A_pool; // A类在my_driver类中使用A_pool这个池子

  3. 在组件中使用uvm_register_cb宏将uvm_callback派生类注册进入UVM

    typedef class A; // 声明类A,为了能够在类A定义前可以引用它

    uvm_register_cb(my_driver, A) // 在组件中注册uvm_callback派生类A

  4. 使用uvm_do_callbacks宏将callback派生类A的函数/任务pre_tran(this, req)嵌入到组件my_driver的执行过程中

    uvm_do_callbacks(my_driver, A, pre_tran(this, req)) // 在my_driver::main_phase中

对于VIP的使用者来说, 需要做如下几步:

  1. 从A派生一个类, 在这个类中定义好pre_tran

    class my_callback extends A

  2. 在测试用例的connect_phase(或者其他phase, 但是一定要在使用此callback函数/任务的phase之前) 中将从A派生的类实例化, 并将其加入A_pool中

    my_cb = my_callback::type_id::create("my_cb");

    A_pool::add(env.i_agt.drv, my_cb);

参考资料

UVM实战(卷一) 张强 编著 机械工业出版社


如需了解更多相关内容,欢迎关注“多读点书”,让我们一起阅读,一起成长。

你可能感兴趣的:(硬件开发,芯片,fpga开发,verilog,硬件工程,学习)