使用 DPI 从 C++ 函数中的 SV 读取值时出错
Error in reading value from SV in C++ function using DPI
我正在尝试将字符串从 SV 传递到 C++ 函数,但该值未正确传递到 C++ 函数
SV端代码:
import "DPI" function string mainsha(string str);
class scoreboard ;
string text_i_cplus;
string text_o_cplus;
text_i_cplus="abc";
text_o_cplus=mainsha(text_i_cplus);
这就是我向 C++ 发送值的方式。在 C++ 方面,我将价值视为:
extern "C" string mainsha(string input)
{
string output1 = sha256(input);
cout << "sha256('"<< input << "'):" << output1 << endl;
return output1;
}
当我单独 运行 C++ 程序时,我得到了正确的输出。但是在控制台我得到以下输出:
sha256(''):e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
有人可以告诉我哪里出错了或者我遗漏了什么吗?
目前SystemVerilog标准中的DPI只支持C语言,不支持C++。事实上你应该使用 import "DPI-C"
。在 C++ 中,string
是一个 class 而 C 只有 char
的数组
extern "C" const char * mainsha(const char * input)
{
string output1 = sha256(input); // not sure if you need a cast here
cout << "sha256('"<< input << "'):" << output1 << endl;
return output1.c_str();
}
如果您使用 Modelsim/Questa,可以使用 -dpiheader 开关自动为您生成 DPI 原型,并且您可以在编译 C++ 代码时包含该文件。这样,如果存在不匹配并且不必调试 运行 时间行为,您将收到编译器错误。
我正在尝试将字符串从 SV 传递到 C++ 函数,但该值未正确传递到 C++ 函数
SV端代码:
import "DPI" function string mainsha(string str);
class scoreboard ;
string text_i_cplus;
string text_o_cplus;
text_i_cplus="abc";
text_o_cplus=mainsha(text_i_cplus);
这就是我向 C++ 发送值的方式。在 C++ 方面,我将价值视为:
extern "C" string mainsha(string input)
{
string output1 = sha256(input);
cout << "sha256('"<< input << "'):" << output1 << endl;
return output1;
}
当我单独 运行 C++ 程序时,我得到了正确的输出。但是在控制台我得到以下输出:
sha256(''):e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
有人可以告诉我哪里出错了或者我遗漏了什么吗?
目前SystemVerilog标准中的DPI只支持C语言,不支持C++。事实上你应该使用 import "DPI-C"
。在 C++ 中,string
是一个 class 而 C 只有 char
extern "C" const char * mainsha(const char * input)
{
string output1 = sha256(input); // not sure if you need a cast here
cout << "sha256('"<< input << "'):" << output1 << endl;
return output1.c_str();
}
如果您使用 Modelsim/Questa,可以使用 -dpiheader 开关自动为您生成 DPI 原型,并且您可以在编译 C++ 代码时包含该文件。这样,如果存在不匹配并且不必调试 运行 时间行为,您将收到编译器错误。