Directly using send_request() and wait_for_item_done() function in sequencer

Hello All,
So the requirement is something that, i want to put a seq_item(cmd) to tlm channel from sequencer and based on the values of variable in cmd,
my driver analyse it and drive the dut(SRAM).
But, i dont want to create sequence and call its start/`uvm_do on my sequencer. for that i am using below fucntion.

///////// sequencer task ///////////
task put_info_on_channel(data_packet cmd);
// send_request(cmd, 0);

m_last_req_push_front(cmd);
cmd.set_sequencer(this);
grant_queued_locks();

wait_for_item_done();
endtask

In above i had to disable send_request() as this one is calling m_sequecer.send_request(this, cmd, 0). but i am already in sequencer with no sequence_ptr created at all(Hence getting compile error as insufficient arg passed.).

So i used the task beneath it. But somehow it is not firing any transaction.

Anybody has suggestions ?

Thanks in Advance.
Ujjwal

In reply to Ujjwal Kaushik:

There are 2 options for the interface between sequencer and driver.
(1) The most common and recommended way is using uvm_sequencer and uvm_driver as base classes. In this case the sequencer does not put anything to the driver. But the driver is executing get/get_next_item to retrieve a seq_item from the sequencer. In this case the driver is active and the sequencer behaves passive.

(2) If the sequencer has to be active and the driver is passive the corresponding base classes are uvm_push_sequencer and uvm_push_driver. I have never seen an implementation using these base classes.

In reply to chr_sue:

Hello,
If i declare my own put/get port in the driver and sequencer and use there API to stream the transaction_item. Will it work?
Since these are already declared in uvm_component.

In reply to Ujjwal Kaushik:

Feel free to do this, but you might fail if you do not all the details of the handshaking process.
I do not understand why you want to implement your own interfacing and not using what is well-proven.
Please note the seq_item will be generated in 0 time, but the driver is time-consuming because of the interface protocol you have to implement. You can’t send a new seq_item to the driver if it is busy.