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

SOC/IP验证工程师

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

公告

View Post

uvm中嵌套sequence的两种启动方式

第一种时利用uvm_do系列宏

在一个sequence的body中,除了可以使用uvm_do宏产生transaction外,还可以启动其它sequence,这就是嵌套sequence。
uvm_do系列宏有uvm_do/uvm_do_pri/uvm_do_with/uvm_do_pri_with/uvm_do_on/uvm_do_on_pri/uvm_do_on_with/uvm_do_on_pri_with
uvm_do系列宏中,当第一参数是transaction时,调用的是start_item和finish_item;
当第一个参数是sequence时,调用的是此sequence的start的任务,也就是启动sequence。
除了uvm_do系列宏,uvm_create、uvm_send、uvm_rand_send的第一个参数都可以说是sequence的指针。
唯一不能是sequence指针的是start_item和finish_item,这两个参数必须是transacion的指针。

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();
      crc_seq cseq;      //指定sequence的指针
      long_seq lseq;     //指定sequence的指针
      if(starting_phase != null) 
         starting_phase.raise_objection(this);
      repeat (10) begin
         `uvm_do(cseq)    //启动sequence
         `uvm_do(lseq)    //启动sequence
      end
      #100;
      if(starting_phase != null) 
         starting_phase.drop_objection(this);
   endtask
   `uvm_object_utils(case0_sequence)
endclass

第二种方式时手动启动:

class case0_sequence extends uvm_sequence #(my_transaction);
   function  new(string name= "case0_sequence");
      super.new(name);
   endfunction    
   virtual task body();
      crc_seq cseq;
      long_seq lseq;
      if(starting_phase != null) 
         starting_phase.raise_objection(this);
      repeat (10) begin
         cseq = new("cseq");      //
         cseq.start(m_sequencer); //
         lseq = new("lseq");      //
         lseq.start(m_sequencer); //
      end
      #100;
      if(starting_phase != null) 
         starting_phase.drop_objection(this);
   endtask
   `uvm_object_utils(case0_sequence)
endclass

在上面代码中,m_sequencer是case0_sequence在启动后所使用的sequencer的指针。但通常来说并不用这么麻烦,可以使用uvm_do宏来完成这些事。

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

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