SystemC TLM 2.0, различающий несколько мастеров - PullRequest
0 голосов
/ 31 октября 2018

Я использую TLM 2.0 приблизительно 4-фазный протокол. Мой модуль имеет 2 целевых сокета и один сокет инициатора. Его задача - перенаправлять запросы, поступающие на целевые сокеты, в модуль, подключенный к сокету инициатора. Пока проблем нет, но в какой-то момент ответы поступят в i_socket и должны быть отправлены обратно в целевой сокет, откуда они пришли. Как лучше всего определить, к какому t_socket относятся входящие ответы?

Типичный вариант использования этого - шина с несколькими мастерами. Шина должна знать, какому мастеру должен быть отправлен ответ. Раньше я реализовывал такую ​​шину со свободно синхронизированным протоколом, что легко, потому что ответом является просто возвращение, которое автоматически возвращает правильному мастеру.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Рекомендуемый способ заключается в том, чтобы прикрепить специфичное для экземпляра расширение TLM целевого сокета-идентификатора к универсальной полезной нагрузке, когда они поступают в целевой сокет, и использовать это для определения целевого сокета, к которому необходимо подключиться. обратный путь.

Вы найдете ссылку на исходный код в конце приведенной ниже веб-страницы, на которой есть очень хороший пример того, как это сделать. https://www.doulos.com/knowhow/systemc/tlm2/at_example/

0 голосов
/ 02 ноября 2018

Модуль маршрутизации должен отслеживать, какой сокет инициирует транзакцию.

Например, вы можете сохранить его на карте:

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