Jump to content
    

Вызов экспортированной функции из неконтекстной области DPI

Здравствуйте, коллеги

Ситуация:

В package определена экспортируемая в C++ функция. На стороне C++ данная функция вызывается в случайный момент времени тредом, который к DPI не имеет отношения. Во время вызова функции из C++ симулятор Xcelium выдаёт следующие ошибки:  "DPI Scope function call allowed only from context function" и "The C identifier "foo" representing an export task/function cannot be executed from a non-context area".

Перед вызовом функции foo в стороннем треде я пробовал принудительно задавать контекст: svSetScope(svGetNameFromScope("foo_pkg")), но безуспешно.

Я даже пробовал заранее сохранять переменную с контекстом (GLOBAL_SCOPE=svGetScope()) и перед вызовом устанавливать контекст: svSetScope(GLOBAL_SCOPE). Тоже безрезультатно. При вызове svSetScope(GLOBAL_SCOPE) DPI не видит контекста вообще и устанавливает его в NULL.

На форуме Cadence нашёл заметку в которой автор решает описываемую проблему, используя функции __sync_lock_test_and_set и __sync_lock_release. Как и над какими переменными он их использует - не понятно.

--

Сталкивался ли кто с подобной проблемой и как решил?

Share this post


Link to post
Share on other sites

Проблема решена:

У Mentor есть открытая библиотека UVMC, которая связывает SystemC и SystemVerilog. С её помощью в т.ч. можно пересылать general_purpose транзакции между языками в произвольные моменты времени в обоих направлениях.

Т.о., пришлось отказаться от DPI в пользу SystemC. Переход может быть трудоёмким, но возможности открываются интересные 😉

P.S. В составе библиотеки есть и примеры использования, что существенно облегчает её интеграцию.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...