0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

我眼中UVM启动sequence的几种常见方式

冬至子 来源:不二鱼 作者:不二鱼 2023-06-16 11:31 次阅读

第一种:start启动

最简单粗暴的一种方式,只需要在某个component,如my_sequencer、my_env甚至base_test的main_phase中启动。

task fish_env::main_phase(uvm_phase phase);
   fish_sequence seq;  //创建seq实例
   phase.raise_objection(this);
   seq = fish_sequence::type_id::create("seq");
   seq.start(fish_agt.sqr);  //将seq发送给对应的sequencer
   phase.drop_objection(this);
endtask

注:

  • 如果在sequencer中启动,唯一的区别就是start的参数变为this,即seq.start(this);
  • 通常sequence不会直接发送给sequencer,而是通过virtual_sequence和virtual_sequencer;
  • raise_objection和drop_objection往往伴随sequence的启动;

第二种:default_sequence

采用default_sequence启动,实际上还是调用了start任务,

uvm_config_db#(uvm_object_wrapper)::set(this,
                                        "env.fish_agt.sqr.main_phase",
                                        "default_sequence",
                                         case0_sequence::type_id::get());
)

或者先例化,再采用default_sequence启动:

function void fish_case0::build_phase(uvm_phase phase);
  case0_sequence cseq;
    super.build_phase(phase);
      cseq = new("cseq");
      uvm_config_db#(uvm_sequence_base)::set(this,
                                             "env.fish_agt.sqr.main_phase",
                                             "default_sequence",
                                              cseq);
endfunction

第三种:`uvm_do系列宏启动

`uvm_do(SEQ_OR_ITEM)o
`uvm_do_pri(SEQ_OR_ITEM, PRIORITY)
`uvm_do_with(SEQ_OR_ITEM, CONSTRAINTS)
`uvm_do_pri_with(SEQ_OR_ITEM, PRIORITY, CONSTRAINTS)
`uvm_do_on(SEQ_OR_ITEM, SEQR)
`uvm_do_on_pri(SEQ_OR_ITEM, SEQR, PRIORITY)
`uvm_do_on_with(SEQ_OR_ITEM, SEQR, CONSTRAINTS)
`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINTS)

uvm_do的宏有多种,根据实际情况选择合适的宏。实际工作当中,使用较多的就是uvm_do_on(SEQ_OR_ITEM, SEQR),第一个参数表示要发送的sequence或者item,第二个参数表示要将此sequence或者item发送给哪个sequencer。工作中有多个seq,为了实现seq的统一调度,就会使用virtual_sequence/sequencer,在vitrual_sequence 的body中例化多个sequence,使用uvm_do_on将sequencer挂载到指定sequencer上。

`uvm_declare_p_sequencer(fish_virtual_sequencer)
task fish_virtal_seq::body();
    fish_sequence_1   fish_seq_1;
    fish_sequence_2   fish_seq_2;
    ...
    fish_sequence_n   fish_seq_n
    `uvm_do_on(fish_seq_1, p_sequencer.sqr_1);
    `uvm_do_on(fish_seq_2, p_sequencer.sqr_2);
    ...
    `uvm_do_on(fish_seq_n,p_sequencer.sqr_n);
end_task:body

如此一来,fish_seq就挂载到了fish_virtual_sequencer中某个具体的sequencer上,这是最通用的做法。但UVM的用法太灵活了,最近在工作中,我遇到,seq不会挂载到某个具体的sqr的情况,也疑惑了很久,下次和你们分享。欢迎持续关注。

第四种:uvm_create和uvm_send

class case0_sequence extends uvm_sequence #(fish_transaction)
...
  task case0_sequence::body()
    `uvm_create(f_trans)
    ...//对transaction做处理
    `uvm_send(f_trans)
   endtask

uvm_create宏的作用就是实例化transaction,实例化之后,可以对其做更多的处理,处理完毕再使用`uvm_send宏发送出去。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19169
  • sequence
    +关注

    关注

    0

    文章

    23

    浏览量

    2845
收藏 人收藏

    评论

    相关推荐

    UVM sequence分层有哪几种方式

    验证环境需要对数据进行分层。例如,将32比特的寄存器读写封装成数据读写和状态读写等实际业务操作等或者对底层sequence进行一些随机控制等。实现这种分层可以有两种方式:1、Sequence
    发表于 04-11 16:37

    UVM sequence分层的几种体现

    验证环境需要对数据进行分层。例如,将32比特的寄存器读写封装成数据读写和状态读写等实际业务操作等或者对底层sequence进行一些随机控制等。实现这种分层可以有两种方式:1、Sequence
    发表于 04-14 11:08

    如何配置sequence的仲裁算法和优先级及中断sequence的执行

    01 Arbitrary在UVM中,多个sequence可以同时被绑定到相同的sequencer并启动。这种测试场景在实际中是存在的,比如在模拟同一个总线master口上的不同类型的数据流时,可以将
    发表于 09-23 14:35

    UVM中seq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用
    发表于 04-04 17:15

    浅谈UVMsequence/item见解(上)

    item指的是uvm_sequence_item, Sequence Item具备UVM核心基类所必要的数据操作方法,对于激励的生成和场景控制,是由sequence来编织的,item应
    的头像 发表于 02-19 15:52 5040次阅读
    浅谈<b class='flag-5'>UVM</b>之<b class='flag-5'>sequence</b>/item见解(上)

    UVMsequence/item见解 sequencer特性及应用(下)

    本文将接着分享sequencer的相关知识,对于sequencer的仲裁特性有几种可选,UVM_SEQ_ARB_FIFO ;UVM
    的头像 发表于 02-19 10:14 4803次阅读
    谈<b class='flag-5'>UVM</b>之<b class='flag-5'>sequence</b>/item见解 sequencer特性及应用(下)

    UVM sequence机制中response的简单使用

    sequence作为UVM几个核心机制之一,它有效地将transaction的产生从driver中剥离出来,并且通过和sequencer相互配合,成功地将driver的负担降低至仅聚焦于根据协议将
    的头像 发表于 09-22 09:26 2408次阅读

    start()如何执行uvm_sequence

    要使用start()启动一个sequence,就必须要指定相应的sequencer句柄, **另外的几个选项一般用不上** 。其中
    的头像 发表于 03-21 11:37 711次阅读
    start()如何执行<b class='flag-5'>uvm_sequence</b>

    UVMsequence的那些事儿

    将 生成测试case的语句 从 main_phase 中独立出来,使得使用不同测试用例时,只需要修改sequence部分即可,而不用关注 UVM剩余部分。
    的头像 发表于 05-26 15:17 1067次阅读
    <b class='flag-5'>UVM</b>中<b class='flag-5'>sequence</b>的那些事儿

    在Sequencer上启动一个Sequence

    Sequencer默认不执行任何Sequence。验证工程师可以通过调用start()启动一个Sequence,也可以通过uvm_config_db指定一个自动
    的头像 发表于 06-10 09:10 816次阅读
    在Sequencer上<b class='flag-5'>启动</b>一个<b class='flag-5'>Sequence</b>

    UVM设计中的sequence启动方式有哪几种呢?

    本篇介绍UVM中的sequence,这是UVM中最基础的部分。对于前面介绍的uvm_callback, uvm_visitor等,很少被使用
    的头像 发表于 08-17 10:07 4322次阅读
    <b class='flag-5'>UVM</b>设计中的<b class='flag-5'>sequence</b><b class='flag-5'>启动</b><b class='flag-5'>方式</b>有哪<b class='flag-5'>几种</b>呢?

    如何将sequences类型添加或注册到sequence library里呢?

    uvm_sequence_library是从uvm_sequence扩展而来的,它是一个容纳了一系列其它sequences类型的容器,在启动时,它会根据模式从这系列sequences中选择并执行它们。
    的头像 发表于 09-08 15:06 641次阅读
    如何将sequences类型添加或注册到<b class='flag-5'>sequence</b> library里呢?

    电气工程师进阶知识汇总:电机启动的五种常见方式

    1.电机启动的五种常见方式 ①.星三角降压启动:正常运行为三角形接法的电动机,在启动时将定子绕组接成星形,可以降低启动电流。
    发表于 09-14 11:28 3612次阅读
    电气工程师进阶知识汇总:电机<b class='flag-5'>启动</b>的五种<b class='flag-5'>常见方式</b>

    MCU批量生产下载程序的几种常见方

    MCU批量生产下载程序的几种常见方
    的头像 发表于 10-24 17:22 1628次阅读
    MCU批量生产下载程序的<b class='flag-5'>几种</b><b class='flag-5'>常见方</b>法

    运行Python程序的几种常见方

    Python是一种高级编程语言,具有简单易学,易于阅读和调试的特点。当你完成了一个Python程序之后,你需要运行它以检查程序是否按照预期工作。下面是运行Python程序的几种常见方
    的头像 发表于 11-28 15:32 2543次阅读