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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9879|回复: 17

[求助] 求助:UVM的virtual sequence的问题

[复制链接]
发表于 2012-7-6 10:26:25 | 显示全部楼层 |阅读模式

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

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

x
各位:
     我在继续被UVM折腾。今天的新问题是virtual sequence相关的。我有两个sequence,一个是APB总线写的sequence,另外一个是往video口发送一帧图像sequence。这样的话,我需要使用virtual sequence来给这两个sequence同步,计划先发送APB的sequence,然后再发送图像数据,模拟先配置再开始工作的过程。但是仿真跑起来后,遇到一个问题,就是仿真开始时候进入apb_seq执行,前面的打开文件,统计要发多少个数据都没问题,到了`uvm_do_with()宏的时候就卡住了,根本发不了数据。不知道究竟是哪里不对了。好像我这么描述问题有点乱,还是贴代码吧:

virtual sequencer:
class vsequencer extends uvm_sequencer;
    apb_sequencer apb_sqr;
    vdo_sequencer vod_sqr;
   `uvm_component_utils(vsequencer)
    function new(string name,uvm_component parent);
          super.new(name,parent);
    endfunction
endclass : vsequencer

test_seq_lib:
`include "apb_seq_lib.sv"
`include "vdo_seq_lib.sv"
`include "vsequencer.sv"
class apb_vdo_seq extends uvm_sequence;
    `uvm_object_utils(apb_vdo_seq)
    `uvm_declare_p_sequencer(vsequencer)
    task body();
        apb_write_seq                  apb_seq;
        read_two_1080p_bmp_seq  vdo_seq;
        `uvm_do_on(apb_seq,p_sequencer.apb_sqr)
        `uvm_do_on(vdo_seq,p_sequencer.vdo_sqr)
    endtask
endclass : apb_vdo_seq

test_lib:
`include "tb.sv"
class apb_vdo_test extends uvm_test;
     `uvm_component_utils(apb_vdo_test)
     tb             tb0;
     vsequencer vsqr;
     extern function new(string name="apb_vdo_test",uvm_component parent);
     function build_phase(uvm_phase phase);
          super.build_phase(phase);
          tb0 =tb::type_id::create("tb0",this);
          vsqr=vsequencer::type_id::create("vsqr",this);
          uvm_config_db#(uvm_object_wrapper)::set(this,"tb0.vsqr.run_phase","default_phase",apb_vdo_seq::type_id::get());
     endfunction : build_phase
     function connect_phase(uvm_phase phase);
          vsqr.apb_sqr=tb0.apb0.master.sequencer;
          vsqr.vdo_sqr=tb0.vdo0.master.sequencer;
     endfunction : connect_phase   
endclass : apb_vdo_test

然后apb_write_seq的body部分:
int num=0;
task apb_write_seq::body();
      `uvm_info(get_type_name(),"Starting...",UVM_MEDIUM)
      fp=$fopen("cfg1.f","r");
      repeat(1024) begin
           fpoint=$fscanf(fp,"%h",cfg_data);
           $display("data in file is %h",cfg_data);
---------->仿真时,此行的信息能看见
           `uvm_do_with(req,{req.addr==num;
                                      req.direction==WRITE;
                                      req.data=cfg_data;})
------->从dump出的波形上看,apb总线上无任何翻转信号
            $display("write one data over");---------------->仿真时,此行信息显示不出
      end
endtask : body


谁来救救我呀~~~~~~~~
 楼主| 发表于 2012-7-6 11:18:09 | 显示全部楼层
本帖最后由 oscillator_cn1 于 2012-7-6 11:21 编辑

补充一下,刚才试了把apb_seq与vdo_seq反过来,也是同样的问题。能够打开图像文件,能够从文件中读取数据,等到执行`uvm_do_with()宏的时候又被卡住了。有谁还遇到过类似的情况么?让我感觉上面贴的那些代码都不是问题所在,virtual sequence能根据代码启动相应的sequence。但是问题在哪里我又说不上,要说是具体的sequence的问题吧,也不像啊。
在test_seq_lib中注释掉一个`uvm_do_on(),也还是是同样的问题。
 楼主| 发表于 2012-7-6 14:20:12 | 显示全部楼层
不是吧?
发表于 2012-7-7 15:02:54 | 显示全部楼层
不是吧
发表于 2012-9-27 14:38:47 | 显示全部楼层
uvm怎么看波形啊
发表于 2012-9-28 12:55:49 | 显示全部楼层
uvm_config_db#(uvm_object_wrapper)::set(this,"tb0.vsqr.run_phase","default_phase",apb_vdo_seq::type_id::get());
------>
uvm_config_db#(uvm_object_wrapper)::set(this,"tb0.vsqr.run_phase","default_sequence",apb_vdo_seq::type_id::get());
发表于 2012-10-7 01:03:24 | 显示全部楼层
代码太乱了,看起来头疼。不过不要用default sequence,显式调用seq.start(env.sequencer)。我以前也碰到过类似问题,default那种方式太麻烦了,也没必要
发表于 2012-10-21 21:28:33 | 显示全部楼层
hi,actually uvm virtual sequences are used when there is multiple no of sequences...
发表于 2012-10-23 10:01:54 | 显示全部楼层
Maybe you should check your driver!
ovm_do_with is just a  system function macro!
发表于 2013-1-24 08:53:04 | 显示全部楼层
你把cfg_data换成具体的数据试下有没有翻转,在sequence中对数据进行限制行不通吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 02:28 , Processed in 0.031771 second(s), 10 queries , Gzip On, Redis On.

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