Suleesh,
A TLM fifo is a mailbox implemented using standard TLM ports and exports as an API to the mailbox. The TLM API gives you a separation of concerns which in turn promotes re-usability and maintainability.
Let’s say you have two components: A and B. Component A has a thread doing puts and component B has a thread doing gets. They are both connected through a common mailbox which means they both must declare handles to a matching mailbox type. This creates an unwanted dependency. At some point, I might want some other component other than a mailbox to connect to, like some kind of arbitrator. So I would have to modify the handles types in the components.
TLM gets rid of that dependency. Component A can have a put_port and just requires that what it is connected to implements a put method. Component B can have a get_port and just requires that what it is connected to implements a get method.
Dave