In reply to Sustrak:
My general rule for using clocking blocks is have your thread only use the clocking block event to block the process and nothing else.
task run_phase(uvm_phase phase);
forever begin
do begin
@(vif.cb);
seq_item_port.try_next_item(trans);
end while (trans == null);
vif.cb.sb_id <= trans.sb_id;
vif.cb.nxt_sen <= trans.nxt_sen;
vif.cb.kill <= trans.kill;
@(vif.cb);
vif.cb.nxt_sen <= 1'b0;
vif.cb.kill <= 1'b0;
seq_item_port.item_done()
end
endtask