Как изменить uvm testbench или последовательность для ожидания ответа на запись перед следующей транзакцией в протоколе AXI - PullRequest
0 голосов
/ 08 февраля 2019

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

В идеале, я бы хотел сделать это в своей последовательности, потому что этот подход не требует смены тестового стенда.Тогда возникает вопрос: как последовательность узнает, когда поступил ответ на запись?Идея моделирования на уровне транзакций (TLM) означает, что элементы последовательности находятся на уровне транзакций, и нет необходимости беспокоиться о деталях рукопожатия.

Если изменение последовательности затруднено, другая идея состоит в том, чтобы (неохотно) изменить драйвер, чтобы иметь одну очередь глубиной для чтения и записи.Затем первая транзакция чтения или записи должна быть удалена из очереди, прежде чем вторая будет принята драйвером.Когда это?Когда приходит ответ от первой записи, транзакция удаляется из q, и следующая транзакция может быть принята от секвенсора.

1 Ответ

0 голосов
/ 14 февраля 2019

Быстрый поиск в Google показывает, как создавать последовательности ответов и драйверы здесь и здесь .Основная суть в том, что вы хотите использовать методы драйвера get() и put() вместо просто get_next_item() и item_done().

...