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实战(卷一) 张强 编著 机械工业出版社


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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值