UVM中Callback机制

Callback机制,其实是使用OOP来实现的一种程序开发者向程序使用者提供的模块内部的接口。可以在Test_case的高度改变其他component的一些行为。

Systemverilog中已经提供的Callback函数pre_randomize,post_randomize。对于UVM和VIP来说,其他的CallBack函数都是自己程序的开发者事先

                     留下的hook。

 

Callback的实现:

1)首先直接从component扩展出新的类来实现pre_do等function不可取。因为component的改变会让整个UVM的tree改变。

2)考虑利用OOP的composition来操作,先定义一个类A,并定义virtual pre_do等function于它的类中。后在UVM的component中加入该类,在do函数

     之前调用pre_do。这样在未重定义时,由于pre_do中没有任何操作,所以不会对component产生任何影响。而重定义virtual pre_do之后,自然便

     加入了相关的执行代码。

UVM和VIP中的实现:

     首先字uvm_callback派生一个类A,并定义虚函数virtual pre_do;(或uvm_reg_cbs

     定义uvm_register_cb(driver, A);在driver类中。这样相当于将A加入driver class中。

     定义A_pool,来存放A的实例化对象,在driver类中可以直接判断A_pool是否为空,来执行pre_do。

     在driver类中,使用uvm_do_callbacks(driver, A, pre_do);来调用pre_do,在do函数之前。

     这样便完成了预留的hook,

用户使用时:

接下来只需要在需要的时候extended A,定义好pre_do函数。并且在connect_phase之前调用add函数,来添加进来。

           A_pool::add(env.i_agt.drv, cb);  cb即为A的Extended的类的对象。

转载于:https://www.cnblogs.com/-9-8/p/4465648.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值