Я разработал драйвер uvm, реализующий протокол AXI, и у него есть две очереди для сбора транзакций записи и чтения.Как только драйвер получает транзакции от секвенсора, транзакции помещаются в очередь чтения или очередь записи, а каналы чтения и записи управляют соответствующей транзакцией в каждом канале AXI.Драйвер не ожидает ответа на запись, прежде чем он выдаст следующее чтение или запись, как указано в AXI.Теперь я хочу изменить поведение так, чтобы оно ожидало завершения транзакции записи (ответ на запись вернулся) и затем выполнило следующую транзакцию.Что было бы лучшим местом в моей тестовой среде для реализации этой функции - драйвер, секвенсор, sequence или sequence_item?
В идеале, я бы хотел сделать это в своей последовательности, потому что этот подход не требует смены тестового стенда.Тогда возникает вопрос: как последовательность узнает, когда поступил ответ на запись?Идея моделирования на уровне транзакций (TLM) означает, что элементы последовательности находятся на уровне транзакций, и нет необходимости беспокоиться о деталях рукопожатия.
Если изменение последовательности затруднено, другая идея состоит в том, чтобы (неохотно) изменить драйвер, чтобы иметь одну очередь глубиной для чтения и записи.Затем первая транзакция чтения или записи должна быть удалена из очереди, прежде чем вторая будет принята драйвером.Когда это?Когда приходит ответ от первой записи, транзакция удаляется из q, и следующая транзакция может быть принята от секвенсора.