Hello,
We have a test bench environment where we have 2 objects of the same SPI env class.
The SPI env sets the sequencer for the RAL model as follows:
reg_model.default_map.set_sequencer(spi_master_agt.mem_sqr, reg2spi_adapter);
The transaction type handled by the spi_master_agt.mem_sqr is spi_mem_tr.
Now I need to extend the spi_mem_tr to spi_mem_tr_1 and spi_mem_tr_2, and then override spi_mem_tr with those separately for the 2 objects of the SPI env class.
// Below does not work
set_inst_override_by_type
( .relative_inst_path("env.spi_m[0].*"), // Here spi_m[0] is the first instance of the SPI env
.original_type(spi_mem_tr::get_type()),
.override_type(spi_mem_tr_1::get_type()));
set_inst_override_by_type
( .relative_inst_path("env.spi_m[1].*"), // Here spi_m[1] is the second instance of the SPI env
.original_type(spi_mem_tr::get_type()),
.override_type(spi_mem_tr_2::get_type()));
// This does not work too!
set_inst_override_by_type
( .relative_inst_path("env.*"),
.original_type(spi_mem_tr::get_type()),
.override_type(spi_mem_tr_1::get_type()));
// Even this does not work!
// So looks like "inst" override by type does not work for tr objects in RAL
// connecting agents?
set_inst_override_by_type
( .relative_inst_path("*"),
.original_type(spi_mem_tr::get_type()),
.override_type(spi_mem_tr_1::get_type()));
// Other the other hand, below works, BUT that overrides the tr in both SPI env objects
// That is not what I want; I need to override using different types for the
// two SPI env objects
spi_mem_tr::type_id::set_type_override(spi_mem_tr_1::get_type());
Questions:
- Is it possible to do instance specific overrides over transaction class inside the SPI agent connecting to my RAL model?
- If so, what is the correct way to set the relative_inst_path?
- If not, are there any hacks to achieve the same?
- The fact that the global type override does work gives me some hope.