Verilog 如何使用UVM工厂&x27;s set_inst_override_by_name以覆盖序列项

Verilog 如何使用UVM工厂&x27;s set_inst_override_by_name以覆盖序列项,verilog,system-verilog,uvm,Verilog,System Verilog,Uvm,我有两个序列项类a_-packet和它的扩展类bad_-packet。 默认情况下,将使用a_数据包类型。 试图用坏包覆盖坏包实例,通过在我的uvm测试中使用set_inst_override_by_name,我能够成功地做到这一点 factory.set_inst_override_by_name("a_packet","bad_packet", "*"); 现在我的问题是:如果我不想使用“*”,如何知道序列项实例的完整层次路径 我试图在驱动程序接收到序列项之后,从序列项内部使用get_fu

我有两个序列项类
a_-packet
和它的扩展类
bad_-packet
。 默认情况下,将使用
a_数据包
类型。 试图用
坏包
覆盖
坏包
实例,通过在我的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");

我做错什么了吗

在创建数据包的地方,您需要指定到
create(…)
的相应调用的完整路径:

如果使用的是
uvm_do
宏,则必须更改为使用显式序列API:

packet = a_packet::type_id::create("packet", , get_full_name());
start_item(packet);
// ... randomize ...
finish_item(packet);

想法来自DVCon文件,第IV.A节。

上述问题的可能重复涉及序列,而不是序列项,但过程基本相同(因为序列是序列项的子类)。
packet = a_packet::type_id::create("packet", , get_full_name());
start_item(packet);
// ... randomize ...
finish_item(packet);