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.