|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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
有谁能指点一下迷津呀?????????? |
|