uvm повышение_объекта и drop_objection - PullRequest
0 голосов
/ 17 января 2019

Я изучаю УВМ и задаюсь вопросом, как работает возражение. Я думал, что следующий код (в моем производном агенте) выполняет seq.start (sequencer); и после того, как секвенсор заканчивает работу, выполняется drop_objection для завершения симуляции. Если это правда, даже если я удаляю Представления Raise_objection и Drop_objection, он должен выполнить то, что запрограммировано для выполнения секвенсора (отправка 8 элементов последовательности в DUT). Но когда я закомментировал функции lift_objection и drop_objection, симуляция завершается без выполнения секвенсором, хотя seq.start должен был быть выполнен. Пожалуйста, помогите мне понять, как возражение работает в UVM в этом случае. Полное окружение testbench можно найти здесь: https://www.edaplayground.com/x/3_bM

task run_phase(uvm_phase phase);
      // We raise objection to keep the test from completing
      phase.raise_objection(this);
      begin
        my_sequence seq;
        seq = my_sequence::type_id::create("seq");
        seq.start(sequencer);      
      end
      // We drop objection to allow the test to complete
      phase.drop_objection(this);
    endtask

1 Ответ

0 голосов
/ 17 января 2019

То, что вы видите, это именно то, что вы ожидаете, потому что это именно то, для чего нужны возражения - контроль, когда остановить симуляцию. (Строго говоря, «контроль, когда закончить фазу», но обычно есть только одна фаза, которая потребляет время - фаза пробега .)

Обычно, если возражений нет, симуляция останавливается. Таким образом, когда вы комментируете свой код, который вызывает и отбрасывает возражения, возражения не возникают, поэтому моделирование немедленно останавливается (без каких-либо действий).

  • Вы всегда должны выдвигать возражение при любом моделировании UVM, в противном случае немедленно остановится;

  • вы всегда должны отбрасывать все возражения в какой-то момент, иначе ваш симуляция никогда не остановится.

...