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

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

3天内不再提示

如何在定义后启动一个sequence

我快闭嘴 来源:FPGA学姐 作者:FPGA学姐 2022-09-09 09:41 次阅读

Q:激励最初产生在driver中,后来产生在sequence中。为什么会有这个过程呢?

Q:当一个激励在driver中产生,当要对DUT施加不同的激励时,那应该怎么办呢?

Q:如何在定义后启动一个sequence

//当完成一个sequence的定义后,可以使用start任务将其启动my_sequence my_seq;my_seq = my_sequence::create("my_seq");my_seq.start(sequencer);//除了直接启动之外,还可以使用default_sequence启动uvm_config_db#(uvm_object_wrapper)::set(this,"env.i_agt.sqr.main_phase","default_sequence",case0_sequence::get());

A:使用sequence机制之后,在不同的测试用例中,将不同的sequence设置成sequencer的main_phase的default_sequence。当sequencer执行到main_phase时,发现有default_sequence,那么它就启动sequence。

A:当一个sequence启动后会自动执行sequence的body任务。其实,除了body外,还会自动调用sequence的pre_body与post_body

文件:src/my_case0.sv3 class case0_sequence extends uvm_sequence #(my_transaction);virtual task pre_body();`uvm_info("sequence0", "pre_body is called!!!", UVM_LOW)endtaskvirtual task post_body();`uvm_info("sequence0", "post_body is called!!!", UVM_LOW)endtaskvirtual task body();#100;`uvm_info("sequence0", "body is called!!!", UVM_LOW) endtask `uvm_object_utils(case0_sequence)endclass

Q:UVM支持同一时刻在同一sequencer上启动多个sequence,那同时启动多个sequence时,哪个先执行呢?

Q:sequencer根据什么选择使用哪个sequence的transaction呢?这是UVM的sequence机制中的仲裁问题

//例如如下启动了seq0和seq1文件:src/no_pri/my_case0.svtask my_case0::main_phase(uvm_phase phase);   sequence0 seq0;   sequence1 seq1;   seq0 = new("seq0");   seq0.starting_phase = phase;   seq1 = new("seq1");   seq1.starting_phase = phase;fork   seq0.start(env.i_agt.sqr);   seq1.start(env.i_agt.sqr);joinendtask

A:对于transaction来说,存在优先级的概念,通常来说,优先级越高越容易被选中。当使用uvm_do或者uvm_do_with宏时,产生的transaction的优先级是默认的优先级,即-1。可以通过uvm_do_pri及uvm_do_pri_with改变所产生的transaction的优先级

文件:src/item_pri/my_case0.sv3 class sequence0 extends uvm_sequence #(my_transaction);virtual task body();repeat (5) begin   `uvm_do_pri(m_trans, 100)   `uvm_info("sequence0", "send one transaction", UVM_MEDIUM)end#100;endtaskendclassclass sequence1 extends uvm_sequence #(my_transaction);virtual task body();repeat (5) begin   `uvm_do_pri_with(m_trans, 200, {m_trans.pload.size < 500;})   `uvm_info("sequence1", "send one transaction", UVM_MEDIUM)endendtaskendclass

uvm_do_pri与uvm_do_pri_with的第二个参数是优先级,这个数值必须是一个大于等于-1的整数。数字越大,优先级越高。

A:除transaction有优先级外,sequence也有优先级的概念

文件:src/sequence_pri/my_case0.svtask my_case0::main_phase(uvm_phase phase);env.i_agt.sqr.set_arbitration(SEQ_ARB_STRICT_FIFO);fork    seq0.start(env.i_agt.sqr, null, 100);    seq1.start(env.i_agt.sqr, null, 200);joinendtask

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

    关注

    0

    文章

    526

    浏览量

    66330
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18965
  • sequence
    +关注

    关注

    0

    文章

    23

    浏览量

    2807

原文标题:UVM之sequence机制

文章出处:【微信号:FPGA学姐,微信公众号:FPGA学姐】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何在主从设备之间创建定义的API调用?

    我只是想知道如何在主从设备之间创建定义的API调用。我想用主ID和些数据发送
    发表于 09-19 12:21

    UVM sequence分层有哪几种方式呢

    sequencer外部进行分层,例如使用virtual sequencer。实际项目中,般两种分层的手段都会采用。对于底层的数据项lower_env_items定义如下:底层的s
    发表于 04-11 16:37

    UVM sequence分层的几种体现

    sequencer外部进行分层,例如使用virtual sequencer。实际项目中,般两种分层的手段都会采用。对于底层的数据项lower_env_items定义如下:底层的s
    发表于 04-14 11:08

    何在SpinalHDL里启动仿真

    的信号:仿真启动,你会在控制台看到仿真的启动:可以看到,仿真的启动首先会将DUT编译生成Verilog文件,随后交由Verilator进行编译,随后选择
    发表于 07-26 16:59

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

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

    sequence item实际应用中应该包含哪些东西

    等。基于以上这些需求,在UVM类库提供的代码示例基础上,整理成以下般框架,可用于指导日常开发。02 用户自定义方法在上面定义sequence item框架中,有
    发表于 09-23 14:42

    何在启动文件中调用定义为uint32_t getValue(void)的C函数呢?

    我如何在启动文件中调用定义为 uint32_t getValue(void) 的 C 函数(在 Reset_Handler 例程中)?需要什么语法?我尝试导入它并将其设置为 extern(其他标准
    发表于 12-09 07:27

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

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

    浅谈UVM之sequence/item见解(上)

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

    start()如何执行uvm_sequence

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

    如何配置sequence的仲裁算法和优先级?

    在UVM中,多个sequence可以同时被绑定到相同的sequencer并启动。这种测试场景在实际中是存在的,比如在模拟同一个总线master口上的不同类型的数据流时
    的头像 发表于 04-27 15:20 829次阅读
    如何配置<b class='flag-5'>sequence</b>的仲裁算法和优先级?

    UVM中add_typewide_sequence和add_sequence的区别

    第2和第3种方式类似,第3种是一下子添加多个sequence,它内部原理就是调用第2种的函数,因此在本质上,只有第1和第2种这两类区别。
    的头像 发表于 05-24 15:21 427次阅读

    在Sequencer上启动一个Sequence

    Sequencer默认不执行任何Sequence。验证工程师可以通过调用start()启动一个Sequence,也可以通过uvm_config_db指定一个自动启动
    的头像 发表于 06-10 09:10 496次阅读
    在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 1514次阅读
    UVM设计中的<b class='flag-5'>sequence</b><b class='flag-5'>启动</b>方式有哪几种呢?

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

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