#verilog
#verilog
Вопрос:
Что cbValueChange
должен делать обратный вызов VPI и как он работает?
Предположим, я хочу выполнить функцию по posedge
сигналу X
of (около 2000 циклов). Должен ли я использовать обратный вызов cbValueChange
или вызывать код с тестового стенда?
always @posedge(X)
begin
$pli
end
Что было бы более эффективным?
Комментарии:
1. Какой симулятор вы используете?
Ответ №1:
С точки зрения эффективности это, вероятно, не имеет большого значения. Без лучшего понимания вашей ситуации сложно дать надежный совет, но я рекомендую вызов $ pli, как в вашем примере. Использование cbValueChange означает регистрацию некоторого кода на C, который будет выполняться симулятором при изменении значения переменной. Это происходит без вызова пользовательской процедуры $pli во время изменения значения. Поскольку это полностью невидимо для любого, кто читает код Verilog, вы расстроите любого, кто попытается понять, что происходит, если ваш C-код внесет какие-либо изменения, влияющие на моделирование.
Ответ №2:
cbValueChange
является причиной, используемой для регистрации / получения события изменения значения для зарегистрированного сигнала через vpi_register_cb()
. Поэтому, когда значение сигнала было изменено или изменено, симулятор вызовет функцию обратного вызова на правильной фазе моделирования. Если вы хотите вызвать только свою собственную функцию PLI / VPI, вы можете увидеть подробный пример в http://www.asic-world.com/verilog/pli5.html