UVM(8)代码重用性

callback

针对trans的randomize,存在post_randomize函数,系统会自动调用post_randomize函数。

我们只需重载post randomize函数

即可实现回调操作

UVM也为用户提供了广义的callback函数/任务: pre_body和post_body, 除此之外还有pre_do、 mid_do和post_do
 

大概思想:在driver中有个pool,他会循环的调用其内部函数,我们往里面例化一个A,就可以加入callback

实现

第一步:例化一个A

然后准备一个pool

typedef uvm_callbacks#(my_driver, A) A_pool;
然后在driver中

然后在main phase中

`uvm_do_callbacks(my_driver, A, pre_tran(this, req))

即可。

当用户要使用时需要继承A然后搞个新类,定义pre tran然后加入到A:pool(connect_phase

子类继承父类的cb

一个继承原driver的driver如何使用原来的A:pool?

也就是针对原来的代码:`uvm_do_callbacks(my_driver, A, pre_tran(this, req))

我们用`uvm_set_super_type(new_driver, my_driver)关联两个driver即可

模块重用

env的重用

倾向在dut多模块有链接时用如此框图构建环境 在小env进行链接

rm的重用

bus agt应该在验证环境base test中,而不是在寄存器模型讲的在env里面,那样不可以chongyong

如此构建验证环境

我们需要在base_test中实例化寄存器模型, 在env中设置一个寄存器模型的指针, 在base_test中对它赋值

 

如此实现不同寄存器的偏移map

然后传递指针

virtual sequence与virtual sequencer
 

没看懂。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值