我有两个序列项类a_packet
及其扩展类bad_packet
。
默认情况下,使用a_packet
类型。
尝试使用a_packet
覆盖bad_packet
实例,我可以在我的uvm测试中使用set_inst_override_by_name成功完成,
factory.set_inst_override_by_name("a_packet","bad_packet", "*");
现在我的问题是:如果我不想使用“*”,如何知道序列项实例的完整层次路径?
我试图在序列项中使用get_full_name(),在驱动程序收到它之后,知道确切的分层路径。它显示:
uvm_test_top.env.a_agt.a_seqr.a_sequence.a_packet
但是当我用上面的路径替换*
时,覆盖不会发生。
factory.set_inst_override_by_name("a_packet","bad_packet","uvm_test_top.env.a_agt.a_seqr.a_sequence.a_packet");
我做错了什么吗?
答案 0 :(得分:2)
在您创建数据包的位置,您需要指定对create(..)
的相应调用的完整路径:
packet = a_packet::type_id::create("packet", , get_full_name());
如果您使用的是uvm_do
宏,则必须更改为使用显式序列API:
packet = a_packet::type_id::create("packet", , get_full_name());
start_item(packet);
// ... randomize ...
finish_item(packet);
想法来自this DVCon论文,第IV.A部分。