function print(); $display("@%0t : %s :",$time,name); $display("@%0t : A is %d",$time,A); $display("@%0t : B is %d",$time,B); $display("@%0t : op is %3b",$time,op);//enum do not need transform to bit[2:0] endfunction
endclass
其中约束A的值的范围是10到20,我们在回调中会将其改成0到9.
4. 回调基类
1 2 3 4 5 6 7 8 9 10 11
class driver_cb;
virtualtask pre_cb(ref trans tr); //空的虚函数 //do nothings endtask
initialbegin env=new(bfm); env.build(); begin user_cb ucb; //定义回调类对象 ucb=new(); env.drv.cb_queue.push_back(ucb); //将回调对象注入到driver中的回调队列中。 end env.run(); end endmodule
8. 仿真结果
在下面打印值中可以看到,A的值在0到9之间,说明回调起作用了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@ 40000 : modified A value!!! @ 40000 : driver one pkg!!! @40000 : trans : @40000 : Ais9 @40000 : Bis32 @40000 : opis010 @ 50000 : calling post_cb!!! @ 50000 : modified A value!!! @ 50000 : driver one pkg!!! @50000 : trans : @50000 : Ais8 @50000 : Bis37 @50000 : opis011 @ 70000 : calling post_cb!!!