在默认UVM寄存器层序列中选择特定物理接口

时间:2016-02-20 14:51:58

标签: system-verilog verification uvm

在我们的DUT中,我们有两个独立的物理接口(APB和I2C)(每次有效1个),通过它可以访问所有寄存器,

同样在我们的注册模型中,我们创建了两个reg_maps,每个APB& I2C。

现在通过测试用例,我们一次只需要一个物理接口,接受默认的uvm序列(即uvm_reg_access_seq,uvm_reg_bit_bash_seq等),但不可能,因为uvm_sequence将使用get_maps()获取所有地图; < / p>

所以没有超越默认的uvm_reg_access_seq,是否可以通过使用uvm_reg_map或其他一些方法在testcase中实现这种类型的配置。

请参考以下伪代码

//Pseudo Code for Scenario
 class  dut_reg_test extends base_test;
  `uvm_component_uti ls(dut_reg_test)

  //Handle of default uvm register access sequence
  uvm_reg_access_seq my_reg_seq;
  // Select Physical Interface
  rand bit APB_I2C;

  uvm_reg_map test_map;
  dut_reg_model regmodel;

  task buid_phase (uvm_phase phase);
    super.build_phase(phase);
    // Select PHY Interface via commandline
      if ($value$plusargs("APB_I2C=%b", APB_I2C))
     else
        APB_I2C = $random;

    if (APB_I2C)
       test_map = regmodel.apb
    else
       test_map = regmodel.i2c
  endtask : build_phase

   task main_phase (uvm_phase phase); 
    //Create method for sequence
    my_reg_seq=uvm_single_access_seq::type_id::create("my_reg_seq");
    //Randomize with selected map
    my_reg_seq.randomize with { maps == test_map;});
    // Start default sequence
     my_reg_seq.start(NULL);
   endtask : main_phase

endclass : dut_reg_test

上述策略无法实现,因为uvm_reg_access序列不包含uvm_reg_map,它只出现在uvm_reg_single_access_seq中,

类似的限制仍然存在于所有uvm_reg_bit_bash_seq&amp;重置序列。

我们可以采取一些策略来解决这个问题吗?

  • Nikunj Hinsu

0 个答案:

没有答案