System verilog 在默认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_映射或其他方法在测试用例中实现此类配置 请参考以下伪代码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
//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序列都存在类似的限制
我们能有一些策略来解决这个问题吗
- 日清