Координация проверки в табло

У меня возникли проблемы с решением проблемы в моем коде, надеюсь, вы сможете мне помочь.

У меня есть два модуля, A и B. Модуль A отправляет запросы к B, и после нескольких циклов B отправляет многоцикловый ответ на A. A может содержать до 8 запросов, ожидающих ответа, и ответы от B не обязательно возвращаются упорядоченными. Вот почему мы используем идентификатор для идентификации возвращаемых данных.

Чтобы проверить это поведение, у меня есть табло с несколькими шашками. Одна из проверок, которую я выполняю, — является ли идентификатор, используемый для запроса, бесплатным или нет. Для этого я сохраняю ассоциативный массив с идентификаторами, ожидающими ответа, и вставляю, проверяю и удаляю элементы по мере необходимости. Я контролирую это с двух интерфейсов и мониторов, один для запросов, а другой для ответов. Монитор ответов, являющийся ответами продолжительностью более одного цикла, ждет, пока не соберет все данные, чтобы отправить транзакцию на табло, где я обновляю свои структуры.

Проблема возникает в тот момент, когда A видит, что он действительно получает правильный ответ от B, освобождает идентификатор и может использовать его для нового запроса. Это происходит в некоторых моих симуляциях, и, поскольку я не получу транзакцию, пока не будет завершен весь ответ, блок A выполняет новый запрос с идентификатором, который я не узнаю, что его можно использовать, пока не получу полную транзакцию. с монитора.

Любые идеи о том, как решить эту проблему? Спасибо!


person eSedano    schedule 27.05.2014    source источник


Ответы (1)


В цикле, когда вы видите ответ от B, почему бы вам не переместить запрос от A в другой ассоциативный массив, который представляет ответы, которые были инициированы. Таким образом, у вас будет свободный слот в исходном массиве для обработки новых запросов от A, но теперь у вас будет новый второй массив для обработки многоцикловых ответов, которые уже начались.

person Ciano    schedule 27.05.2014
comment
Я не уверен, что это поможет. На табло я вижу ответ только после того, как он закончен, когда монитор прошел несколько циклов сбора данных ответа, и только тогда я могу что-то с ним сделать. Таким образом, возможно, что новый запрос приходит даже за цикл или два до того, как ответ будет уведомлен... - person eSedano; 28.05.2014
comment
Похоже, вам придется изменить свою тестовую среду, чтобы ваша таблица результатов обнаруживала начало ответа от B. Это будет необходимо, если одно из условий, которое вы хотите проверить, заключается в том, что количество невыполненных запросов от A никогда не больше 8. Если вас не волнует эта проверка, вы можете просто сделать свой текущий массив достаточно большим, чтобы вместить максимальное количество невыполненных запросов, чтобы убедиться, что к концу теста все запросы получили ответы. - person Ciano; 28.05.2014
comment
Да, этого я и боялся... Я пытался этого избежать, но, похоже, мне придется сделать довольно большие изменения в окружении... - person eSedano; 28.05.2014
comment
Я дам вам ответ как действительный, потому что, в конце концов, это более или менее то, что я сделал. Помимо uvm_analysis_port, который у меня был для полной транзакции, я добавил еще один, который отправляет идентификатор в начале ответа, и с его помощью я перемещаю запросы из pending_responses в current_responses. Благодарю вас! - person eSedano; 28.05.2014