UVM中的工厂重写参数化类

问题描述 投票:4回答:1

我有一个参数化的seq_item如下

class seq_item#(int A = 100) extends uvm_sequence_item;
  ....
endclass

class extended_seq_item#(int A = 100) extends seq_item#(A);
  ....
endclass

在我的UVM TB中,我需要使用extended_seq_item在工厂中覆盖所有seq_item实例。不同的实例将具有不同的A参数值。如何在工厂中覆盖它?

感谢与问候,基兰

system-verilog uvm
1个回答
1
投票

不幸的是,具有不同参数值的参数化类(specializations >>是LRM的术语)被视为单独的类类型,因此您需要为每个参数值提供覆盖。

seq_item#(10)::type_id::set_type_override(extended_seq_item#(10)::get_type());
seq_item#(20)::type_id::set_type_override(extended_seq_item#(20)::get_type());
seq_item#(30)::type_id::set_type_override(extended_seq_item#(30)::get_type());

如果您可以将此代码放入已经参数化A的地方,例如在参数化的env或agent的build_phase中,那么它可能不会像上面那样痛苦。

© www.soinside.com 2019 - 2024. All rights reserved.