TLM 2.0 was defined in July 2008 and it defined a Generic Payload that looks a bit like this: (see the header files for real on the PWF)
trans->set_command(tlm::TLM_WRITE_COMMAND); trans->set_address(addr); trans->set_data_ptr(reinterpret_cast<unsigned char*>(&data)); trans->set_data_length(4); trans->set_streaming_width(4); trans->set_byte_enable_ptr(0); trans->set_response_status( tlm::TLM_INCOMPLETE_RESPONSE ); socket->b_transport(*trans, delay);
The generic payload can be extened on a a custom basis and intermediate bus bridges and routers can be polymorphic about this: not needing to know about all the extensions but able to update timestamps to model routing delays.
It also defines memory/garbage ownership and transport primitives with timing. Finally, it defines a raft of useful features, such as automatic conversion between blocking and non-blocking styles. However, it is a bit too complex to get a deep understanding of in the time available, so for this course I have mostly ignored it and implemented things in TLM 1.0 style.