Let me explain my sequence a bit :
class ahb_cov_seq #(
type BURST_SEQ = ovm_sequence,
int AHB_ADDRESS_WIDTH = 32,
int AHB_WDATA_WIDTH = 32) extends ovm_sequence #(ahb_trans);
`ovm_object_param_utils(
ahb_cov_seq #(
BURST_SEQ,
AHB_ADDRESS_WIDTH,
AHB_WDATA_WIDTH)
I want to override the BURST_SEQ using the set_inst_override_by_type.
The syntax of the set_inst_override_by_type is as follows :
set_inst_override_by_type("hierarchical path", "original type", "new_type");
The question here is what should I put as the hierarchical path, should it be
(1) sequencer_path.*
(2) sequencer_path.
(3) None of the above
The path is to a component and here the sequence object I want to override is not present at the sequencer level, is there a better approach to this situation,
Thanks

Do you have multiple instances of the same sequencers which are going to execute this same sequence type & you are trying to override one of them?
You can do this in one of two ways. A type override, which will be global, or an instance override. See:
http://verificationacademy.com/uvm-ovm/Sequences/Overrides
For more details.
Yes, I have multiple instances of the sequencer and I intend to launch seperate instances of ahb_cov_seq[n] on each of them, there is one sequencer per master agent. I have tried both the options (1&2) I mentioned in the earlier post, but it doesn't help as I do not the see the override happening.
It would help if you could show us
Dave Rich
Mentor Graphics
http://go.mentor.com/drich
I am including both of the approaches I have tried :
I am setting the override in the build function of the test case :
APPROACH a:
function void cov_test::build();
...
modem_ahb_pkg::modem_ahbm_burst_trans_seq::type_id::set_inst_override (tcm_mem_m0_burst_trans_seq::get_type(),"m_env_h.m_dime_ccsm_ahb_mst_agent_h[0].sequencer.cov_seq_h[1].burst_seq_h");
modem_ahb_pkg::modem_ahbm_burst_trans_seq::type_id::set_inst_override (tcm_mem_m1_burst_trans_seq::get_type(),"m_env_h.m_dime_ccsm_ahb_mst_agent_h[1].sequencer.cov_seq_h[2].burst_seq_h");
//burst_seq_h is of type modem_ahbm_burst_trans_seq
...
endfunction
APPROACH b:
function void cov_test::build();
...
set_inst_override_by_type("m_env_h.m_dime_ccsm_ahb_mst_agent_h[0].sequencer.*",
modem_ahb_pkg::modem_ahbm_burst_trans_seq::get_type(),
tcm_mem_m0_burst_trans_seq::get_type());
set_inst_override_by_type("m_env_h.m_dime_ccsm_ahb_mst_agent_h[1].sequencer.*",
modem_ahb_pkg::modem_ahbm_burst_trans_seq::get_type(),
tcm_mem_m1_burst_trans_seq::get_type());
...
endfunction
In the body function of the sequence, I have the following code :
fork
begin
cov_seq_h[1] = modem_ahb_pkg::modem_ahbm_cov_seq_t::type_id::create( $psprintf("cov_seq_h_1"), , get_full_name());
cov_seq_h[1].start(p_sequencer.m_ccsm_ahb_slv_sequencer[0], this);
end
begin
cov_seq_h[2] = modem_ahb_pkg::modem_ahbm_cov_seq_t::type_id::create(
$psprintf("cov_seq_h_2"), , get_full_name());
cov_seq_h[2].start(p_sequencer.m_ccsm_ahb_slv_sequencer[1], this);
end
join
Again here is the definition of the coverage sequence :
typedef modem_ahbm_burst_trans_seq #(
MODEM_AHB_ADDRESS_WIDTH,
MODEM_AHB_WDATA_WIDTH,
MODEM_AHB_RDATA_WIDTH ) modem_ahbm_burst_trans_seq_t;
typedef modem_ahbm_cov_seq #(
modem_ahbm_burst_trans_seq_t,
MODEM_AHB_ADDRESS_WIDTH,
MODEM_AHB_WDATA_WIDTH,
MODEM_AHB_RDATA_WIDTH ) modem_ahbm_cov_seq_t;
class modem_ahbm_cov_seq #(
type BURST_SEQ = ovm_sequence,
int MODEM_AHB_ADDRESS_WIDTH = 32,
int MODEM_AHB_WDATA_WIDTH = 32,
int MODEM_AHB_RDATA_WIDTH = 32) extends ovm_sequence #(nvs_ahb_sv_mst_trans);
`ovm_object_param_utils(
modem_ahbm_cov_seq #(
BURST_SEQ,
MODEM_AHB_ADDRESS_WIDTH,
MODEM_AHB_WDATA_WIDTH,
MODEM_AHB_RDATA_WIDTH)
)
`ovm_declare_p_sequencer(nvs_ahb_ovm_mst_sequencer)
task modem_ahbm_cov_seq::body();
// transfer
BURST_SEQ burst_seq_h;
enum_hburst burst_enum;
nvs_ahb_rnw_e rd_wr_enum;
bit [MODEM_AHB_ADDRESS_WIDTH-1:0] loc_addr;
...
endtask
endclass : modem_ahbm_cov_seq
The overriding sequence has to be extended from the overridden sequence. It's not clear from your code that this is the case. If it isan't then the override will not work.
class tcm_mem_m0_burst_trans_seq extends modem_ahb_pkg::modem_ahbm_burst_trans_seq;
`ovm_object_utils(tcm_mem_m0_burst_trans_seq)
`ovm_declare_p_sequencer(nvs_ahb_ovm_mst_sequencer)
//Constrint address for accessing TCM address range
constraint constr_address {
solve m_burst_len before m_address;
// Never cross 1K boudary
(((m_address+((m_burst_len*4)-1))/1024) - (m_address/1024)) == 0;
m_address >= (TCM_MEM_START_PARAM) && m_address <= (TCM_MEM_START_PARAM+'hF0);
(m_address % 32'h4) == 0;
}
task body();
....
endtask : body
endclass : tcm_mem_m0_burst_trans_seq
I want to override modem_ahbm_burst_trans_seq with the derived type, which is in line with what is expected.
Is the instance path string you are quoting in the over-ride the same as you would get from get_full_name()? I suspect that the square brackets might not be present in the string that is used to do the look up.
I tried out your suggestion, of mentioning the path the way, it appears in the log files, when we call get_full_name(), did not make any difference.
Another thing, I noticed is that when I call get_full_name, I get the path through the virtual sequencer, so as another experiment, I tried to mention the hierarchy using the virtual sequencer, that too did not change the results. In general should that make a difference?