SystemC TLM 2.0 区分多个主机

SystemC TLM 2.0 differentiating between multiple masters

我正在使用 TLM 2.0 大约定时 4 阶段协议。我的模块有 2 个目标套接字和一个启动器套接字。它的工作是将到达目标套接字的请求转发到连接到发起者套接字的模块。到目前为止没有问题,但在某些时候,响应将到达 i_socket 并需要发送回它们来自的目标套接字。确定传入响应属于哪个 t_socket 的最佳方法是什么?

这方面的典型用例是具有多个主机的总线。总线需要知道需要向哪个主机发送响应。之前,我用松散定时协议实现了这样的总线,这很容易,因为响应只是 return,它会自动 returns 到正确的主控。

路由模块需要跟踪哪个套接字发起事务。

例如,您可以将其存储在地图中:

std::unordered_map<tlm_generic_payload *, socket_t *> transInitiatorMap;

推荐的方法是在通用有效载荷到达目标套接字时将目标套接字 ID 的特定于实例的 TLM 扩展附加到它们,并使用它来确定要路由的目标套接字-在回来的路上。

您会在以下网页的末尾找到源代码 link,其中有一个很好的示例说明如何操作。 https://www.doulos.com/knowhow/systemc/tlm2/at_example/