Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как из modelsim вызвать функцию написанную на C
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
inco
В файл для проверки модуля решил добавить функцию которая будет эмулировать входные данные.

Такая строка:
integer delay;
...
always @(posedge shEn) dinBus[15:0] = $sinGen(delay - $stime); // Строка 53

Файл с функцией взял из примера который идёт с modelsim 6.2f, немного переделал его:
#include <math.h>
#include "veriuser.h"
#include "acc_user.h"

int sinGen(int );

int func_sizetf()
{
return (16);
}

int func_calltf()
{
int N, result;
N = tf_getp(1);
result = sinGen(N);
tf_putp(0, result);
return(0);
}

int func_checktf()
{
bool err = FALSE;
if (tf_nump() != 1) {
tf_error("$sinGen requires exactly 1 argument.\n");
err = TRUE;
}
/*
if (tf_typep(1) == tf_nullparam) {
tf_error("$func cannot have a NULL argument.\n");
err = TRUE;
}
if (tf_sizep(1) > 8) {
tf_error("$func input no larger than 8-bits.\n");
err = TRUE;
}
*/
if (err) {
tf_message(ERR_ERROR, "", "", "");
}
return(0);
}

#define FREQ 100 // Частота синуса
#define MAX_VAL 65535 // Максимальное значение функции
int sinGen (int N)
{

return ((int)(sin(2*M_PI*FREQ*N)*MAX_VAL));
}

s_tfcell veriusertfs[] =
{
{userfunction, // type of PLI routine - usertask or userfunction
0, // user_data value
func_checktf, // checktf() routine
func_sizetf, // sizetf() routine
func_calltf, // calltf() routine
0, // misctf() routine
"$sinGen" // "$tfname" system task/function name
},
{0} // final entry must be 0
};

Поставил пакет modelsim-gcc-3.3.1-mingw32.zip

Всё компилируется нормально без ошибок!

Но когда запускаю эмуляцию то говорит:
** Warning: (vsim-PLI-3003) E:/Project/adder/adder_test.v(53): [TOFD] - System task or function '$sinGen' is not defined.

Где 53 номер строки.
inco
Всё разобрался вопрос закрывается! Заработало!

Дело было как обычно в птичке(или команде).
Надо в установках Simulate->Start simulation->Others в окне Other Vsim options добавить строки загрузки полученной dll функции:
-pli sin_func.dll
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.