最近在搭建验证环境时,所有的验证环境都采用的带传参的验证环境如下:
my_driver (type T=ahb_trans)extends uvm_driver;
...
seq_item_port.get_next_item(req);
drive_one_pkt(req);
seq_item_port.item_done();
...
my_sequence(type T=ahb_trans) extends uvm_sequence;
...
但是在构造case时,编译报错,提示sequencer中的req和driver中的req不是同一类型。一个数据uvm_pkg,一个属于自定义的ahb_pkg。
原因:seq属于seq和driver内部自定义的变量。seq属于基类,T属于子类。driver中的drive_one_pkt接收的是T类型的,与基类的seq不属于同一类型了。
解决方法:在接收到req时,用cast函数进行转换,如下:
seq_item_port.get_next_item(req);
$cast(tr,req);
drive_one_pkt(req);
seq_item_port.item_done();
这样基类和子类指向同一个地址,就可以通过啦