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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3525|回复: 3

[求助] 求助:UVM的driver为什么只发一个sequence就直接结束了呀?

[复制链接]
发表于 2012-7-4 17:02:33 | 显示全部楼层 |阅读模式

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

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

x
各位:
     最近正在折腾UVM,然后反被UVM折腾。这些天几乎天天发帖子求助,唉——。这次的问题是写的driver在发了一个sequence之后就不再从sequencer中取req来发了,不知道会有什么原因导致这样的情况呢?
     恩,详细说明一下:我把一整帧的图像(2073600个像素)信息作为一个transaction,由sequencer一次发送,然后在driver中拆开,每个时钟发送一个像素的r/g/b值。之前跑一帧图像都没问题,跑两帧图像的时候,每次都是发送完一帧图像数据后,仿真就停下了。不知道为什么。相关代码如下:
sequence:
task send_two_1080p_bmp_seq::body();
    `if(starting_phase != null)
          starting_phase.raise_objection(this);
     repeat(2) begin
          `uvm_do_with(req,{req.r.size()==2073600;
                                     req.g.size()==2073600;
                                     req.b.size()==2073600;})
          $display("debug 2");
     end  
     if(starting_phase != null)
           starting_phase.drop_objection(this);
endtask : body


driver:
task master_driver::run_phase(uvm_phase phase);
     get_and_drive();
endtask : run_phase

task master_driver::get_and_drive();
     while(1) begin
         reset();
         fork
              @(negedge vif.rst_n)
                   `uvm_info("MASTER_DRIVER","get_and_drive: Reset dropped",UVM_MEDIUM)
              begin
                    forever begin
                         @(posedge vif.clk iff(vif.rst_n))
                         seq_item_port.get_next_item(req);
                         drive_transfer(req);
                         seq_item_port.item_done(req);
                         $display("debug1");
                    end
              end
          join_any
          disable fork;
          if(req.is_active()) this.end_tr(req);
     end
endtask : get_and_drive

task master_driver::drive_transfer(transfer trans);
    int pix_cnt=0;
    int line_cnt=0;
    repeat(cfg.driver_cfg.vs_bak_cnt)
          drive_a_null_line();
    .........
    repeat(1080)
          drive_a_valid_line();
    .........
endtask : drive_transfer


跑出的结果如下(部分):
..........
send 50 null lines --
send 1080 valid lines
send 108 null lines
debug1
UVM_INFO /tools/cadence/tools/uvm/uvm_lib/uvm_sv/sv/base/uvm_objection.svh(1120) @57163650:reporter [TEST_DONE] 'run' phase is ready to processd to the 'extract' phase


有谁能指点一下迷津呀??????????
发表于 2012-7-5 00:28:32 | 显示全部楼层
确认这个发两帧的sequence是不是通过sequencer发送给driver了?在你的描述里面有看到tc的结构。
 楼主| 发表于 2012-7-5 09:11:05 | 显示全部楼层
本帖最后由 oscillator_cn1 于 2012-7-5 09:16 编辑

谢谢!
是通过sequencer发给driver了。在class rgb_bmp_test中,通过uvm_config_db配置的。如下:
function void rgb_bmp_test::build_phase(uvm_phase phase);
     super.build_phase(phase);
     uvm_config_db #(uvm_object_wrapper)::set(this,"tb0.vdo.master.sequencer.run_phase","default_phase",send_two_1080p_bmp_seq::type_id::get());
endfunction : build_phase

另外,弱弱的问一下,什么是tc的结构呀?
 楼主| 发表于 2012-7-6 09:54:18 | 显示全部楼层
我晕,找到问题所在了。
写代码的时候用了CTRL+P补全,于是在用`uvm_object_utils()宏注册的时候,里面是send_one_1080p_bmp_seq,所以最后跑的还是一帧图像的。改过来之后就OK了。
谢谢gaurson的指点。
我得去发新问题的求助贴了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-19 12:01 , Processed in 0.017335 second(s), 9 queries , Gzip On, Redis On.

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