在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4256|回复: 9

[求助] UVM virtual sequence 疑问

[复制链接]
发表于 2016-6-8 09:33:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好:       请问,在张强UVM实战书中提到了virtual sequence机制,但是在写定义sequence或者sequencer时,并没有使用关键字virtual是怎么回事呢?谢谢啦!
发表于 2016-6-8 11:14:25 | 显示全部楼层
回复 1# 白兴金


    这俩不是一概念。。。
    virtual sequence 本质上就是sequence,只是他不发trans只是控制其他的seqence
    virtutal关键字是跟多态相关的,想实现类的多态需要virtual关键字的虚函数来实现
发表于 2016-6-10 10:58:18 | 显示全部楼层
virtual sequence 也可以发tran的,可以指定默认sequencer,这样的话,好像应该去掉 virtual(这个不确定)。
发表于 2016-6-14 21:04:28 | 显示全部楼层
因为virtual sequence后面不带参数,所以叫virtual,virtual sequencer类似
发表于 2016-7-15 17:56:38 | 显示全部楼层
virtual sequence是要和virtual sequencer配合使用的,是一种概念性的东西。
他和通常意义上的定义function或task的virtual是没有关系的。
一个sequence相当于一辆车,一个sequencer相当于一条路,virutal sequence就像是管理者,让不同的车跑在不同的路上,并控制他们的先后顺序和执行情况。
userguide里面不是有例子么。
发表于 2016-10-20 15:10:57 | 显示全部楼层
回复 5# 索手锋芒


   您好,我写了一个virutal seuqnece,比如顺序执行sequence A,B,C 那我这个virtual seuqence怎么启动呢?其他sequence都是传transaction的,我要写一个配套的virtual sequencer,用default seuqence启动这个virtual sequence? 还有就是,需要建virtual driver和virtual agent吗?
发表于 2016-10-20 15:12:29 | 显示全部楼层
回复 4# tianyan_chn


   那我virutal sequence是在virtual sequencer里用default的sequence启动了?那还需要写irtual driver和virtual agent吗?
发表于 2016-10-21 14:28:12 | 显示全部楼层
回复 7# 秦一1994


   不用了,但你得给virtual_sequencer里的sequencer handle赋值
发表于 2016-10-21 15:52:35 | 显示全部楼层
本帖最后由 秦一1994 于 2016-10-21 16:34 编辑

回复 8# tianyan_chn

哦,是在顶层的test里赋值吗?然后在顶层的test case里, 对virtual sequence raise objection和drop objection来启动这个virtual sequence吗,我直接用的start()函数启动sequence的,下面试我写的一个顶层的task启动virtual seuqence的代码,能够运行    task main_phase(uvm_phase phase);
      v_sequence v_seq1;
      phase.raise_objection(.obj(this));
      v_seq1 = v_sequence::type_id::create(.name("v_seq1"), .contxt(get_full_name()));
      v_seq1.v_seqr_a = env_a.i_agent.seqr;
      v_seq1.v_seqr_b = env_b.i_agent_b.seqr_b;
      assert(v_seq1.randomize());
      v_seq1.start(.sequencer(null));
      #100 ;
      phase.drop_objection(.obj(this));
    endtask: main_phase


但我生成的结果的时候有一些问题, 前两个transaction的包不是在virtual seuqence里启动的,是在我build env_a, env_b启动的(因为我需要给virtual seuqencer的句柄赋值,所以build了这两个env),后面的就是在virtual sequence里启动的了。所以这点我比较奇怪,怎么才能把这前两个包给disable呢?

UVM_INFO @ 0.0ns: reporter [RNTST] Running test v_test_base1...
--------------------------------------------------------------------------------------------------------
Name                           Type          Size  Value
--------------------------------------------------------------------------------------------------------
req                            packet_b      -     @870
  sa_b                         integral      2     'h0
  da_b                         integral      2     'h0
  parent sequence (name)       string        17    packet_sequence_b
  parent sequence (full name)  string        53    uvm_test_top.env_b.i_agent_b.seqr_b.packet_sequence_b
  sequencer                    string        35    uvm_test_top.env_b.i_agent_b.seqr_b
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Name                           Type          Size  Value
--------------------------------------------------------------------------------------------------
req                            packet        -     @866
  sa                           integral      4     'h5
  da                           integral      4     'h1
  parent sequence (name)       string        15    packet_sequence
  parent sequence (full name)  string        47    uvm_test_top.env_a.i_agent.seqr.packet_sequence
  sequencer                    string        31    uvm_test_top.env_a.i_agent.seqr
--------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------
Name                           Type          Size  Value
----------------------------------------------------------------------------------
req                            packet        -     @874
  sa                           integral      4     'hf
  da                           integral      4     'h7
  parent sequence (name)       string        7     v_seq_a
  parent sequence (full name)  string        14    v_seq1.v_seq_a
  sequencer                    string        31    uvm_test_top.env_a.i_agent.seqr
----------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
Name                           Type          Size  Value
--------------------------------------------------------------------------------------
req                            packet_b      -     @880
  sa_b                         integral      2     'h2
  da_b                         integral      2     'h1
  parent sequence (name)       string        7     v_seq_b
  parent sequence (full name)  string        14    v_seq1.v_seq_b
  sequencer                    string        35    uvm_test_top.env_b.i_agent_b.seqr_b
发表于 2016-10-22 11:24:31 | 显示全部楼层
回复 9# 秦一1994


   问题已解决,是因为我env_a和env_b里加了default_sequence,所以启动了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 18:06 , Processed in 0.022563 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表