Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 在默认UVM寄存器层序列中选择特定物理接口_System Verilog_Verification_Uvm - Fatal编程技术网

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

System verilog 在默认UVM寄存器层序列中选择特定物理接口,system-verilog,verification,uvm,System Verilog,Verification,Uvm,在我们的DUT中,我们有两个独立的物理接口(APB和I2C)(一次激活1个),通过它们可以访问所有寄存器 同样在我们的寄存器模型中,我们创建了两个reg_映射,每个APB和I2C对应一个 现在通过testcase,我们一次只希望一个物理接口受默认uvm序列(即uvm_reg_access_seq、uvm_reg_bit_bash_seq等)的约束,但这是不可能的,因为uvm_序列将使用get_maps()获取所有映射 因此,如果不超过默认的uvm_reg_访问顺序,是否可以通过使用uvm_reg

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

同样在我们的寄存器模型中,我们创建了两个reg_映射,每个APB和I2C对应一个

现在通过testcase,我们一次只希望一个物理接口受默认uvm序列(即uvm_reg_access_seq、uvm_reg_bit_bash_seq等)的约束,但这是不可能的,因为uvm_序列将使用get_maps()获取所有映射

因此,如果不超过默认的uvm_reg_访问顺序,是否可以通过使用uvm_reg_映射或其他方法在测试用例中实现此类配置

请参考以下伪代码

//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_访问序列不包含uvm_reg_映射,它仅存在于uvm_reg_single_访问序列中

所有uvm_reg_bit_bash_seq&reset序列都存在类似的限制

我们能有一些策略来解决这个问题吗

  • 日清

我认为,您需要通过寄存器块中的命令行参数来控制“add\u reg”方法,因为这将直接影响get\u maps方法。因此,应该只为通过命令行参数(APB或I2C)提供的寄存器映射调用add_reg方法。@KaranShah,控制“add_reg”可能会解决这里的问题,但通常reg_模型是由工具或脚本生成的,因此更改它可能会产生一些不可预测的问题,但不确定。感谢4评论,将在给出tryYes后更新,注册模型是由脚本生成的,但在这种情况下,您可以更改代码以检查它是否有效。