uvm raise_objection и drop_objection

Я изучаю UVM и задаюсь вопросом, как работает возражение. Я думал, что следующий код (в моем производном агенте) выполняет seq.start (секвенсор); и после того, как секвенсор завершает работу, drop_objection выполняется для завершения моделирования. Если это правда, даже если я удалю raise_objection и drop_objection, он должен выполнить то, на что запрограммирован секвенсор (отправка 8 элементов последовательности в DUT). Но когда я закомментировал raise_objection и drop_objection, симуляция завершается без каких-либо действий секвенсора, хотя seq.start должен был быть выполнен. Пожалуйста, помогите мне понять, как работает возражение в UVM в этом случае. Полную среду тестирования можно найти здесь: 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

person rosepark222    schedule 17.01.2019    source источник


Ответы (2)


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

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

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

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

person Matthew Taylor    schedule 17.01.2019
comment
Вы правы - моделирование прекращено, поскольку не было возражений. На самом деле есть одно выдвинутое возражение в другом компоненте (например, uvm_test), напечатанное hello world, а затем отклоненное возражение через 10 нс. Таким образом, после 10 нс не было возражений и симуляция завершилась, хотя uvm_driver готов обработать sequence_item в бесконечном цикле. Чтобы проверить эту теорию, я увеличил временное окно возражений в uvm_test с 10 до 100 нс, и это давало достаточно времени для работы драйвера, хотя я не высказывал возражений в моем uvm_agent. - person rosepark222; 17.01.2019

На языке непрофессионала это похоже на то, что вы говорите симулятору завершить действие, а затем возражение до того, как текущая фаза остановится.

person RAVI KANT VERMA    schedule 23.01.2020