• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

uvm中在不同组件中提起objection和撤销objection的方式

当不在sequence组件中时,提起和撤销objection的方式:
当不在sequence中可以使用phase来控制验证平台的开启和关闭。
在driver中:

task my_driver::main_phase(uvm_phase phase);
   my_transaction tr;
   phase.raise_objection(this);  //提起objection
   vif.data <= 8'b0;
   vif.valid <= 1'b0;
   while(!vif.rst_n)
      @(posedge vif.clk);
   for(int i = 0; i < 2; i++) begin 
      tr = new("tr");
      assert(tr.randomize() with {pload.size == 200;});
      drive_one_pkt(tr);
   end
   repeat(5) @(posedge vif.clk);
   phase.drop_objection(this);  //撤销objection
endtask

在base_test中

class my_cass0 extends base_test;
  virtual function build_phase(uvm_phase phase);
    super.build_phase(phase);
  endfunction
  phase.raise_objection();
  fork
    case0_cfg_vseq.start(vsqr.cpu_sqr);
    case_vseq.start(vsqr.apb_sqr);
  join
  phase.drop_objection();
endclass

在sequence组件中,提起和撤销objection的方式:
在sequence中可以使用starting_phase来控制验证平台的开启和关闭。

class case0_sequence extends uvm_sequence #(my_transaction);
   my_transaction m_trans;
   function new(string name= "case0_sequence");
      super.new(name);
   endfunction   
   virtual task body();
      if(starting_phase != null) 
         starting_phase.raise_objection(this);  //提起objection
      #100;
      `uvm_info("sequence0", "body is called!!!", UVM_LOW)
      if(starting_phase != null) 
         starting_phase.drop_objection(this);   //撤销objection
   endtask
   `uvm_object_utils(case0_sequence)
endclass
class my_case0 extends base_test;
  virtual function void 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
endclass

posted on 2021-10-29 21:18  SOC验证工程师  阅读(507)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3