I have a uvm_object “pkt_gen”. It’s creates, randomizes, and returns packet transactions, via get().
Inside of pkt_gen, there exists a transaction object “my_pkt”.
I would like to perform an instance-override of “my_pkt”. My attempt is, from test:
pkt_transaction::type_id::set_inst_override(pkt_ext1::get_type(), “uvm_test_top.env.Agent1.sequencer.MySeq.pkt_gen.my_pkt” );
However, because pkt_gen is a uvm_object, it has no hierarchical path. I tried using the sequence “path” trick, but this did not produce a hierarchical path for my generator object:
pkt_gen = ip_PktGen::type_id::create("pkt_gen",,get_full_name());
I realized this, because in the new() of my generator, get_full_path returns an empty string.
It doesn’t matter if I create the generator in the test or the sequence, it never yields a path.
I want a convenient class for spitting out packets, but I have no way to modify the type of packets it creates using the factory…
I can, of course, swap out the actual generator with an extended class (because it’s a child of my sequence), but I don’t know how I would use this technique to change the type of “my_pkt” that gets created.
I seems weird to make it a uvm_component, and stick it in the test or the env… I’ll try that I guess.
[edit] I tried making it a component and now it has a path… and works fine. Still curious about my question, but I can at least move forward.