В файл для проверки модуля решил добавить функцию которая будет эмулировать входные данные.
Такая строка: 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 номер строки.
|