Механизм окончания испытаний UVM

task mabu_scoreboard::main_phase(uvm_phase phase);
forever begin
    # 1ns;
    if (extip_rd_req_cnt - extip_rd_rsp_cnt >= `MABU_READ_OST_NUM) begin
        hit_rd_max_outstanding = 1;
        `uvm_info(get_type_name(),"reach read outstanding threshold!",UVM_NONE);
    end else begin
        hit_rd_max_outstanding = 0;
    end

    if (extip_wr_req_cnt - extip_wr_rsp_cnt >= `MABU_WRITE_OST_NUM) begin
        hit_wr_max_outstanding = 1;
        `uvm_info(get_type_name(),"reach write outstanding threshold!",UVM_NONE);
    end else begin
        hit_wr_max_outstanding = 0;
    end
end  endtask

Цикл forever выполняется в фазе, отнимающей много времени (main_phase). Тест может быть завершен правильно, потому что main_phase не вызывает возражений?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
34
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Да это верно. Поскольку main_phase в вашем табло не вызывает raise_objection, табло не помешает окончанию теста.

Большинство компонентов вашего тестового стенда не вызовут возражений. Обычно ваш тест (класс, расширенный от uvm_test) вызывает возражения на его трудоемкой стадии.

Ответ принят как подходящий

При запуске трудоемкой фазы UVM должно быть выдвинуто хотя бы одно возражение, чтобы предотвратить завершение этой фазы. Завершение фазы означает, что процесс всех uvm_component, выполняющих эту фазу, будет уничтожен.

В вашем примере с табло нам пришлось бы предположить, что какой-то другой компонент возражает против main_phase, иначе цикл forever никогда не завершит свою первую итерацию. Лучше использовать run_phase для процесса, который должен выполняться для всего теста.

Любая задержка в вашем тестовом стенде UVM, кроме генерации часов, является плохой практикой. Предполагается, что испытательный стенд UVM основан на транзакциях, и единственные задержки должны быть связаны с генерацией ваших часов. Цикл forever с задержкой опроса в 1 нс особенно вреден для производительности. Гораздо лучший подход — блокировать ожидание события.

спасибо, Дэйв, «бесконечный цикл с задержкой опроса в 1 нс особенно плохо сказывается на производительности». что, если часы работают на 1 нс, есть ли разница в производительности?

Wuuu 16.05.2022 09:40

Другие вопросы по теме