Обратный вызов verilog VPI

#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