【问题标题】:How can I pass data between SV and C++ bidirectionally via open array with DPI import function如何通过具有 DPI 导入功能的开放数组在 SV 和 C++ 之间双向传递数据
【发布时间】:2014-07-23 14:31:06
【问题描述】:

我的目标是用 C++ 填充一个开放的数组。阶段如下。 1. SV:定义一个大小的解包数组,并在导入函数中通过开放数组发送。 2. C++:填充开放数组。 3. SV:使用数组。

对于大小解压后的数组,没有问题。但在实际情况下,数组大小经常变化,编译后的 C++ 函数每次都必须重新编译。为了避免这种情况,我需要使用一个开放数组,以便 C 函数检查大小并相应地填充数据。

在下文中,源被简化,仅显示基本部分。导入函数 svcpp 在 SV 中调用并在 C++ 中执行。参数是开放数组 i[],其句柄在 C++ 端是 h。当我编译 C++ 源代码时,出现错误, “错误 LNK1120:未解决的外部问题”。

有什么问题?

SV端:

module
    import "DPI-C" context function void svcpp (inout byte unsigned i[]);
    byte myarray[2];

    initial
        svcpp(myarray);
endmodule

C++ 方面:

#include "svdpi.h"
#include "dpiheader.h"// This includes the data structure for the open array

void svcpp(const svOpenArrayHandle h){
    //*(uchar *) x = *(uchar *) svGetArrElemPtr(h,0);
    *(uchar *) svGetArrElemPtr(h,1) = 10; //I really want this operation.
}

【问题讨论】:

  • 您好,我提供的答案是否真的解决了您遇到的问题?

标签: c++ visual-c++ system-verilog system-verilog-dpi


【解决方案1】:

您可以尝试这样做以避免 C++ 编译器破坏您的函数名称。

extern "C" void svcpp(const svOpenArrayHandle h) {
 ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2020-01-31
    • 2016-12-09
    • 2021-10-14
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多