2017-03-01 83 views
0

我在我的测试之一以下run_phase任务:如何使用同一类intest的2个不同实例?

//run_phase 
    task run_phase(uvm_phase phase); 
     tx_big_sml_diff_sequence tx_seq_i; 
     axi_config_reg_sequence axi_seq_i; 
     phase.raise_objection(.obj(this)); 
     for (int i = 2; i <= 9; i++) begin 
       tx_seq_i = tx_big_sml_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_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 
       join 
     end 
     phase.drop_objection(.obj(this)); 
     super.run_phase(phase); 
    endtask // run_phase 

哪里axi_config_reg_sequence是序列负责配置特定REG(根据给定的地址)。

我想配置TX_FE_LIN_INT_ADDR旁边的另一个注册表,我怎样才能使用相同的序列配置另一个?

+0

需要在'axi_config_reg_sequence'更多的细节来回答这个问题 –

回答

0

您没有提供关于axi_config_reg_sequence实现的任何细节,因此我将假定addr变量自动负责在该特定地址配置寄存器。如果是这样的话,你可以实例相同的序列一次,然后启动它在同序所见如下:

  tx_seq_i = tx_big_sml_diff_sequence::type_id::create(.name("tx_seq_i"), .contxt(get_full_name())); 
      axi_seq1_i = axi_config_reg_sequence::type_id::create(.name("axi_seq1_i"), .contxt(get_full_name())); 
      axi_seq2_i = axi_config_reg_sequence::type_id::create(.name("axi_seq2_i"), .contxt(get_full_name())); 

      axi_seq1_i.transfers[0] = i; 
      axi_seq1_i.addr = `TX_FE_LIN_INT_ADDR; 

      axi_seq2_i.transfers[0] = `SET_THIS_VARIABLE_AS_NEEDED; 
      axi_seq2_i.addr = `YOUR_OTHER_ADDRESS_GOES_HERE; 

      fork 
       begin 
       tx_seq_i.start(grb_env_i.tx_lin_int_agent_i.tx_lin_int_sequencer); 
       end 
       begin 
       axi_seq1_i.start(grb_env_i.axi_agent_i.axi_sequencer); 
       axi_seq2_i.start(grb_env_i.axi_agent_i.axi_sequencer); 
       end 
      join 
相关问题