我试图导入一些在SystemVerilog中生成数组的C-函数。
这是代码:
#include "svdpi.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void getPacket(int packetSize, svOpenArrayHandle fpSig, svOpenArrayHandle err)
{
int* cfpSig = (int*) calloc(packetSize, sizeof(int));
double* cerr = (double*)calloc(packetSize, sizeof(double));
for(int i = 0; i < packetSize; ++i)
{
cfpSig[i] = i;
cerr[i] = 1.1*i;
printf("%d %f\n",cfpSig[i],cerr[i]);
}
printf("----------");
memcpy((int*) svGetArrayPtr(fpSig),cfpSig,packetSize);
memcpy((int*) svGetArrayPtr(err),cerr,packetSize);
free(cfpSig);
free(cerr);
}import "DPI-C" function void getPacket(input int packetSize,
output int fpSig[], output real err[]);
module top();
initial begin
parameter int packetSize = 4;
int fpSig[packetSize];
real err[packetSize];
getPacket(packetSize,fpSig,err);
for(int i = 0; i < packetSize; ++i) begin
$display("fpSig: %d\nerr : %f",fpSig[i],err[i]);
end
end
endmodule但是当我手动编译c代码时,会在链接阶段生成一个错误:undefined reference to 'svGetArrayPtr'。
我以前没有使用过svOpenArrayHandle,它已经足够连接头文件"svdpi.h“了。我试图在questa文件夹中查找一些svdpi.dll库,但没有找到。
如果我通过vlog编译c文件,它就能正常工作,但是我想手动编译它,因为我计划包括matlab库,通过vlog编译会变得不舒服。
发布于 2019-07-06 19:23:22
在Questasim模拟器中,包含svGetArrayPtr符号的库是mtipli.dll。
https://stackoverflow.com/questions/56916572
复制相似问题