2

我有两个序列项类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");

我做错什么了吗?

4

1 回答 1

3

在您创建数据包的地方,您需要指定相应调用的完整路径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);

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

于 2014-12-19T12:47:50.347 回答