I have a question related to uvm_tlm_fifo,
as seen in port and export communication , the implementation of the port is given by the consumers implementation port and connected via the export , so in case of put method , the producer’s put will call the consumer’s put method, but in the case of tlm_fifo does the fifo provide the implementation of producer’s put ?
and if not, the fifo is then connected to the consumer which implements a get port , so how does the consumer get the implementation?
See the UVM Cookbook.
As with any TLM communication in UVM, the uvm_tlm_fifo includes a put_export that connects to the producer’s put_port. When the producer calls put(), the implementation in the fifo puts the data into the fifo queue.
On the other side of the uvm_tlm_fifo, the consumer can call get() from its get_port and the get_export in the fifo implements the function to return the data.
The uvm_tlm_fifo has only an export and it is provding a set of blocking methods (get, put, peek) and nonblocking methods try_put, try_get, try_peek. Additionally there are more methods defined like can_put …
By connection a component with a port to the uvm_tlm_fifo export per definition the component with the port can execute all the methods provided by the uvm_tlm_fifo.