hi,
So the medium of transport in TLM is not “FIFO”, rather its just an interface is that rite??
So, when the export doesn’t get the transaction from the port (i.e. blocking type) so during this process where does the data stays, since as you say they dont use any storage medium !!!
Can you brief out on the same plz!!
Thanks,
Desperado…
Data transfer between port and export
Its “Tightly couple Data Transfer”
There are two types of port connection :- blocking & Non-blocking.
For Port-export interface, we have to implement the TLM interfaces like PUT, GET, PEEK … etc
For Example:-
Now when ever we call port.get() the ‘get’ implementation is searched in the component where ‘export’ is there. Now in the PUT implementation user has to make sure it waits until data is ready and then only return from task with data.
class get_consumer extends ovm_component;
ovm_blocking_get_port #(simple_trans) get_port;
function new( string name, ovm_component parent);
get_port = new(“get_port”, this);
...
endfunction
virtual task run();
simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
get_port.get(t);
end
endtask
endclass
class get_producer extends ovm_component;
ovm_blocking_get_imp #(simple_trans, get_producer) get_export;
...
task get(output simple_trans t);
simple_trans tmp = new();
//wait until data ready
// Assign data to tmp.
t = tmp;
endtask
endclass
As shown in example, the consumer will be blocked until producer releases the data.
In case of non-blocking implementation task returns immediately with / without data.
Thus indeed there is no intermediate data storage, its P2P connection.
But in case you need intermediate storage then built-in OVM tlm_channel is the answer, which has FIFO in between.
Regards,
Abhi