欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

在测试前通过前门配置寄存器

时间:2023-06-25

1 定义一个sequence,里面对应的寄存器配置;

class case0_cfg_vseq extends uvm_sequence;

   `uvm_object_utils(case0_cfg_vseq)
   `uvm_declare_p_sequencer(my_vsqr)
   
   function  new(string name= "case0_cfg_vseq");
      super.new(name);
   endfunction 
   
   virtual task body();
      uvm_status_e   status;
      uvm_reg_data_t value;
      if(starting_phase != null) 
         starting_phase.raise_objection(this);
      p_sequencer.p_rm.invert.read(status, value, UVM_FRONTDOOR);
      `uvm_info("case0_cfg_vseq", $sformatf("invert's initial value is %0h", value), UVM_LOW)
      p_sequencer.p_rm.invert.write(status, 1, UVM_FRONTDOOR);
      p_sequencer.p_rm.invert.read(status, value, UVM_FRONTDOOR);
      `uvm_info("case0_cfg_vseq", $sformatf("after set, invert's value is %0h", value), UVM_LOW)
      if(starting_phase != null) 
         starting_phase.drop_objection(this);
   endtask

endclass

2  在uvm——test的类里面去 启动sequence

function void my_case0::build_phase(uvm_phase phase);
   super.build_phase(phase);

   uvm_config_db#(uvm_object_wrapper)::set(this, 
                                           "v_sqr.configure_phase", 
                                           "default_sequence", 
                                           case0_cfg_vseq::type_id::get());
   uvm_config_db#(uvm_object_wrapper)::set(this, 
                                           "v_sqr.main_phase", 
                                           "default_sequence", 
                                           case0_vseq::type_id::get());
endfunction

理解:

 rm.default_map.set_sequencer(env.bus_agt.sqr, reg_sqr_adapter);则定义了需要使用的是bus_sequencer;    因此在virsual sequence下,写寄存器的操作,之后在build_phase定义在v_sqr.configure_phase运行case0_cfg_vseq;


 rm.default_map.set_auto_predict(1);

另外:对于write的参数 p_sequencer.p_rm.invert.write(status, 1, UVM_FRONTDOOR);

1的值对应的是 uvm_reg_data_t,未默认的64bit的数

`ifndef UVM_REG_ADDR_WIDTH
`define UVM_REG_ADDR_WIDTH 64
`endif

typedef bit unsigned [`UVM_REG_DATA_WIDTH-1:0] uvm_reg_data_t ;

因此对应的多域的寄存器,这个value = 多位段的值;

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。