Как вручную скомпилировать общий dpi lib? - PullRequest
0 голосов

Я пытаюсь импортировать некоторую C-функцию, которая генерирует массив в SystemVerilog.
Вот код:

#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". Я попытался найти какую-нибудь библиотеку svdpi.dll в папке установки Questa, но не нашел ее.

Если я скомпилирую c-файл с помощью vlog, он будет работать нормально, но я хочу скомпилировать его вручную, потому что я планирую включить библиотеки matlab, и компиляция с помощью vlog станет неудобной.

1 Ответ

0 голосов

В симуляторе Questasim библиотека, содержащая символ svGetArrayPtr, равна mtipli.dll

...