System Verilog DPI — Запуск параллельных потоков один в cpp, а другой в SV

у меня есть fork-join_none блокировать в forever цикл в SV, который имеет два потока. Один поток — это вызов задачи в самом SV. Другой поток — это вызов функции, импортированной из CPP. Можно ли запустить эти два потока параллельно?

Я пытался это сделать, но происходит, когда функция CPP называется control, и управление не возвращается обратно в сторону SV, в результате чего другой поток в SV не работает.

Как запустить эти два параллельно ???

-1

Решение

краткий ответ: нет.
Verilog поддерживает только однопоточную имитационную модель. Потоки Verilog никогда не работают параллельно. Таким образом, вы не можете сделать это.

Ничто не может помешать вам использовать параллельные потоки, как только вы находитесь внутри вызова c / c ++ (dpi), однако вам следует не попытка вызова любых экспортированных функций verilog из параллельных потоков без надлежащей синхронизации, в частности из отсоединенных потоков. Механизм моделирования, скорее всего, не безопасен для потоков.

0

Другие решения

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

При использовании DPI код C / C ++ не имеет понятия, что он занимает много времени. Что вам нужно, это импортировать ваш код cpp как задачу, а затем в какой-то момент ему нужно вызвать экспортированную задачу SystemVerilog для блокировки.
Таким образом, можно использовать DPI для достижения параллелизма в C, вызывая экспортированные задачи в SystemVerilog. Однако понятие времени в мирах HDL и C сильно отличается. Смотрите мою статью DVCon Простые шаги к виртуальному прототипированию с использованием SystemVerilog DPI в котором обсуждаются некоторые вопросы отслеживания времени между двумя доменами.

0

По вопросам рекламы [email protected]