Я использую ОВМ
Мой код запускает событие ovm в одном месте (я добавил печать для подтверждения). Однако в другом месте я жду этого триггера, и он «поймался» только один раз (также здесь я добавил печать для подтверждения).
function void trigger_event_for_incoming_transaction(ovm_object txn);
if (is_type_1(txn))
type_1.trigger(txn);
endfunction
И еще где-то:
task look_for_type_1();
forever begin
type_1.wait_trigger_data(my_obj);
end
endtask
Я не могу вставить большую часть кода из-за свойства intelucatal... Но я зарегистрировал событие правильно и т.д.
Это старый проект... Что именно вам нужно знать?





Триггер OVM/UVM и wait_trigger работают так же, как триггер событий SystemVerilog ->e и управление событиями @e — управление событиями должно заблокировать ожидание триггера перед выполнением триггера. Вы можете использовать триггерный метод события в wait(e.triggered()), который возвращает true с момента запуска до конца временного шага. Тогда порядок между триггером и управлением событиями в пределах временного шага больше не имеет значения; постоянный триггер.
Вы можете попробовать использовать OVM wait_ptrigger_data, который использует этот триггерный метод ниже.
вам нужно предоставить больше информации. совершенно непонятно, что у вас за type_1 и как он работает с "событиями". Как и где объявляется переменная в обоих случаях... Было бы хорошо, если бы вы могли привести небольшой воспроизводимый пример. Тем не менее, я не уверен, что вокруг все еще много ovm. Почему бы не использовать «увм»?