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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8405|回复: 8

[求助] uvm中virtual sequence 的结束

[复制链接]
发表于 2012-5-17 15:14:39 | 显示全部楼层 |阅读模式

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

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

x
hi 大家好, 最近在学习UVM时发现如下问题:


  3 class base_vseq extends uvm_sequence;
  4      
  5    function new(string name="base_vseq");
  6      super.new(name);
  7    endfunction
  8
  9    `uvm_object_utils(base_vseq)
10    `uvm_declare_p_sequencer(uart_ctrl_virtual_sequencer)
11
12    virtual task pre_body();
13       if(starting_phase !=null)
14           starting_phase.raise_objection(this,"running sequence");  
15    endtask
16
17   virtual task post_body();
18       if(starting_phase !=null)
19          starting_phase.drop_objection(this,"exitting the sequence");
20   endtask
21
22 endclass
23
24 class my_vseq extends base_vseq;
25    write_word_seq my_write_word_seq;
26    function new(string name="my_vseq");
27         super.new(name);
28    endfunction
29   
30    `uvm_object_utils(my_vseq)
31
32   virtual task body();
33      
34    `uvm_info("my_vseq","start virtual sequence",UVM_LOW)
35    `uvm_do_on(my_write_word_seq,p_sequencer.apb_seqr)
36    `uvm_info("my_vseq","finishedc the virtual sequence",UVM_LOW)
37   endtask
38
39 endclass

当我把第35行注释了时,前后两个uvm_info中的信息都可以看到,但是加上后,就一直在产生同一个sequence, 程序也没法退出,请问哪位有没有遇到这种情况,我希望它产生一个sequence后就退出。应该怎样修改啊?
请大家赐教,不甚感激。
发表于 2012-5-17 22:53:00 | 显示全部楼层
UVM 我不清楚,但是OVM中应该是这样的流程(UVM和OVM的流程应该是一样的,我想):
你的程序应该还有一个叫做比如my_vseqr的virtual sequencer,其中肯定包含了一个叫apb_seqr的,这个从你粘贴出来的代码应该可以推断出来。
那么你要做的事情是:
(1)把apb_seqr禁止掉,就是说不让它的run()起作用,否则它会启动default sequence(UVM random
       sequence);可以用set_config_int("*.apb_seqr","count",0)来完成,这句配置语句一般在env
       层,至少是在包含my_vseqr的那一层;
(2)让my_seqr启动你原本想的那个sequence,也就是你的my_vseq,你应该这么做
     用set_config_string("*","default_sequence","my_vseq")来完成。
应该就可以了,如果还不行,那请你检查一下各个sequence和sequencer的各个宏有没有完整,如果宏没有问题再看看你的sequencer的build()函数里有没有调super.build();如果能保证这两个就应该不会有什么问题了,我刚开始的时候很容易把super.build()忘记,导致看到的配置老是没有起作用。
     如果还有问题咱么再讨论,祝好运!
发表于 2012-5-17 22:55:52 | 显示全部楼层
前提是uvm这部分机制和OVM是一样的,我只用过VMM和OVM,不懂UVM,既然UVM号称是从OVM继承来的,应该是这样的,你查查UVM user guid确定一下。
发表于 2012-5-18 20:51:19 | 显示全部楼层
要看你在testcase里是如何执行run的操作了,是如楼上说的用宏定义了默认序列?还是使用sequencer的启动操作来启动序列。用后者的话,就可以避免一直不停的循环执行序列了。当然,在你的序列里面要是加上一个停止操作,我想应该也可以,只从你现在的代码无法得到足够的信息。
 楼主| 发表于 2012-5-23 11:43:48 | 显示全部楼层
回复 2# asic_wang


  不好意思, 前几天忙别的事去了,多谢你的回复。

    我看的例子中 怎么virutal sequencer 中 都不重载 build_phase 函数,我自己加上时也会报错。
发表于 2012-5-24 19:26:14 | 显示全部楼层
你误解我的意思了,或者我没有说清楚,我的意思是:
“这句配置语句一般在env层,至少是在包含my_vseqr的那一层;”
上述我说的这些配置需要在build里面完成,但是不是在virtual sequencer的build里面,而是在agent或者env层次,总之是在包含virtual sequencer的那层或者比包含virtual sequencer的那层更高的层次,一般也就agent层次和env这两个层。
不知道我说清楚没?
 楼主| 发表于 2012-5-28 14:07:35 | 显示全部楼层
多谢大家,问题已经找到了,是因为我用的APB是不带pready的版本,而APB的vip中是带pready的版本,结果在apb_driver中一直在等待pready,所以apb_collector会一直检测到在读(写)同一个seq。
发表于 2012-5-30 16:33:14 | 显示全部楼层
本帖最后由 wangxuede220 于 2012-5-30 16:34 编辑

原来已经找到原因了。。。
发表于 2012-6-26 10:15:35 | 显示全部楼层
学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-19 11:47 , Processed in 0.024600 second(s), 6 queries , Gzip On, Redis On.

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