Перейти к содержанию
    

DPI-C в QuestaSim + pthread

Здравствуйте,

Давно использую DPI-C для симуляции HDL+SW проекта, всегда обходился одним потоком для тестового приложения. Но тут встала задача сделать тестовое приложение (Zynq) где запускаются несколько SW потоков через pthread + DPI-C в них. И тут встал вопрос стека потоков:

Quote

# ** Fatal: (vsim-177) A possible stack overflow is detected!! The stack pointer (0x7ffff07fe670) is outside the specified stack limit of 8388608 bytes. The current stack usage is 260053392 bytes starting from stack top at 0x7fffffffe000. The current call stack is the following:
#
# Task axi_write ../src/tb//tb_dpi.sv(121)
# C Function axi_write
# C Function reg_wr
# C Function test_func
# C Function start_thread

Потоки в тестовом приложении запускаются через:

Quote

pthread_attr_init

pthread_create

У меня в SV так:

Quote

// DPI-C export / AXI
export "DPI-C" task axi_write;

В хедере так:

Quote

DPI_LINK_DECL int axi_write(int addr_i, int data_i);

Собственно проблема понятна:

Quote

ulimit -a | grep stack
stack size              (kbytes, -s) 8192

При попытке быстро порешать вопрос (авось прокатит):

Quote

ulimit -Ss unlimited

Получаю такой отлуп от VSIM:

Quote

# ** Fatal: (vsim-4) ****** Memory allocation failure. *****
# Attempting to allocate 117281258307624 bytes
# Please check your system for available memory and swap space.
# ** Fatal: (vsim-4) ****** Memory allocation failure. *****
# Attempting to allocate 117281258307584 bytes
# Please check your system for available memory and swap space.
# ** Fatal: (SIGSEGV) Bad handle or reference.
#    Time: 34849646 ps  Iteration: 2  Process: /testcase/tb/#INITIAL#63(MAIN) File: ../src/tb//tb_dpi.sv
# ** Fatal: (vsim-4) ****** Memory allocation failure. *****
# Attempting to allocate 117281258311720 bytes
# Please check your system for available memory and swap space.
# ** Fatal: (vsim-4) ****** Memory allocation failure. *****
# Attempting to allocate 117281258311680 bytes
# Please check your system for available memory and swap space.

Что по ходу при детальном рассмотрении как бы выглядит логично.

 

Попытка сделать какой то адекватный размер стека в консоли, исходя из цифр из первого Fatal-сообщения, приводит к аналогичной Fatal-проблеме, только цифры меняются в сторону величения.

 

Собственно я нашёл временное решение, но там такая связка DPI-C import/export что при любом изменение тестовой апликухи прийдётся изменять эту "связку" - это не выглядит хорошо.

 

Возможно кто то уже сталкивался с такой проблемой или около, но если нет - буду признателен за идеи.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...