I have the following run_phase in my test
task run_phase(uvm_phase phase);
tx_lin_int_big_sm_diff_sequence tx_seq_i;
axi_config_reg_sequence axi_seq_i;
axi_rd_from_file_sequence axi_seq_4_dds_i;
phase.raise_objection(.obj(this));
for (int i = 2; i <= 9; i++) begin
tx_seq_i = tx_lin_int_big_sm_diff_sequence::type_id::create(.name("tx_seq_i"), .contxt(get_full_name()));
axi_seq_i = axi_config_reg_sequence::type_id::create(.name("axi_seq_i"), .contxt(get_full_name()));
axi_seq_4_dds_i = axi_rd_from_file_sequence::type_id::create(.name("axi_seq_4_dds_i"), .contxt(get_full_name()));
axi_seq_i.transfers[0] = i;
axi_seq_i.addr = `TX_FE_LIN_INT_ADDR;
fork
begin
tx_seq_i.start(grb_env_i.tx_lin_int_agent_i.tx_lin_int_sequencer);
end
begin
axi_seq_i.start(grb_env_i.axi_agent_i.axi_sequencer);
end
begin
axi_seq_4_dds_i.start(grb_env_i.axi_agent_i.axi_sequencer);
end
join
end
phase.drop_objection(.obj(this));
super.run_phase(phase);
endtask // run_phase
Where axi_config_reg_sequence axi_rd_from_file_sequence responsinle for config some regs.
The task body inside tx_lin_int_big_sm_diff_sequence is:
task body();
tx_lin_int_transaction tx_lin_int_trx;
if(!uvm_config_db #(tx_lin_int_agent_config)::get(m_sequencer, "", "db_tx_lin_int_agent_config", m_cfg)) begin
`uvm_error("task_body", "tx_lin_int_agent_config not found")
end//if
//xi- big difference, xq - small difference
for (int i = 0; i <= 100; i++) begin //TODO - Change the num repitition
tx_lin_int_trx = tx_lin_int_transaction::type_id::create(.name("tx_lin_int_trx"), .contxt(get_full_name()));
// ~start_item~ and <finish_item> together will initiate operation of
// a sequence item.
start_item(tx_lin_int_trx);
tx_lin_int_trx.data_xi_min_c = m_cfg.data_xi_min_c;
tx_lin_int_trx.data_xi_max_c = m_cfg.data_xi_min_c;
tx_lin_int_trx.data_xq_min_c = m_cfg.data_xq_min_c;
tx_lin_int_trx.data_xq_max_c = m_cfg.data_xq_max_c;
tx_lin_int_trx.my_randomize(i+1);
m_cfg.data_xi_min_c = -tx_lin_int_trx.data_xi_min_c + $pow(-1,i+1);
m_cfg.data_xi_max_c = m_cfg.data_xi_min_c;
$display("tx_lin_int_trx.data_xi_min_c: %d", tx_lin_int_trx.data_xi_min_c);
$display("m_cfg.data_xi_min_c: %d", m_cfg.data_xi_min_c);
$display("-1 power %d", $pow(-1,i+1));
m_cfg.data_xq_min_c = m_cfg.data_xq_max_c + 1;
m_cfg.data_xq_max_c = m_cfg.data_xq_min_c ;
finish_item(tx_lin_int_trx);
end
endtask: body
The expected behave is that when i>100 the task of the sequence sould be finished, and the index of the loop inside the run_phase of the test should increase by 1.
But for sime reason I can see that the index of the loop inside the run_phase of the test increase by 1 only after some thousands ~20000000ps (too much time).