Hi, I have met an issue about get_next_item().
Here’s my code of my_driver:
task run_phase(uvm_phase phase);
quiesce_bus();
do begin
@(vif.txclk);
end while (vif.rstn !== 1'b1);
forever begin
`uvm_info(get_name(), $sformatf("inside forever:%t",$time), UVM_NONE)
fork
detect_reset();
request_thread();
join_any
disable fork;
end
endtask
task request_thread();
bit can_go=0;
T req;
`uvm_info(get_name(), $sformatf("inside request_thread:%1t",$time), UVM_NONE)
@vif.txclk;
`uvm_info(get_name(), $sformatf("0: after clk time:%1t",$time), UVM_NONE)
forever begin
seq_item_port.get_next_item(req);
`uvm_info(get_name(), $sformatf("before clk time:%1t",$time), UVM_NONE) // !!!!!! confusing here
@vif.txclk;
`uvm_info(get_name(), $sformatf("3: after clk time:%1t",$time), UVM_NONE) // !!!!!
quiesce_bus();
seq_item_port.item_done();
end
endtask
When I run one specific testcase, I got the confusing output log:
…
// below just the log after first transaction is sent.
UVM_NONE /…/my_driver.sv(63) @ 553.00ns: my_driver [my_driver] # before clk time:553.00ns
UVM_NONE /…/my_driver.sv(65) @ 553.00ns: my_driver [my_driver] # 3: after clk time:553.00ns
…
This confusing issue just happen after the first transaction was sent, and it will be normal then. So I guess maybe the issue about get_next_item.
Can anyone explain this?