У меня есть подчиненная модель, реализованная в uvm_agent
. Под «ведомым» я имел в виду, что он не может сам инициировать транзакцию. Транзакция всегда инициируется другой стороной (главным DUT). Таким образом, это своего рода пассивный агент (хотя он все еще может передавать ответный пакет).
Когда ведомое устройство обнаруживает пакет от DUT, оно автоматически отвечает/ответит (на основе своего протокола) другим пакетом. Ведомый агент имеет монитор для прослушивания передачи, инициируемой DUT. И поскольку он может передавать пакеты, подчиненный агент также имеет драйвер для отправки ответного пакета.
+------------+ master initiate transfer +------------------------+
| Master DUT | ------------------------> | UVM Agent - slave mode |
| | | Monitor |
| | | Driver Sequencer |
+------------+ +------------------------+
+------------+ +------------------------+
| Master DUT | | UVM Agent - slave mode |
| | slave auto reply | Monitor |
| | <------------------------- | Driver Sequencer |
+------------+ +------------------------+
Мой вопрос в том, как он предполагает отправить ответный пакет? Непосредственно из своего драйвера? Так как в uvm элемент драйвера всегда из секвенсора, который выполняет последовательность с уровня пользовательского теста. Но теперь в этом случае последовательности нет - только обнаруженный пакет от монитора.
Моя первая идея заключается в том, что мне нужно обеспечить своего рода обратную связь от monitor
к sequencer
и реализовать там свою функцию протокола.
Или я должен передать пакет напрямую от monitor
к driver
, позволить ему обработать его и отправить ответ? Если да, то как мне это сделать? Есть ли лучший способ?