使用DPI在C ++函数中从SV读取值时出错

时间:2017-10-03 21:24:31

标签: c++ system-verilog system-verilog-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 ++ prog时,我得到了正确的输出。但是在控制台我得到以下输出:

  

SHA256( ''):e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

有人可以建议我哪里出错或者我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

当前SystemVerilog标准中的DPI仅支持C语言,而不支持C ++。实际上你应该使用import "DPI-C"。在C ++中,string是一个类,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 ++代码时包含该文件。这样,如果存在不匹配并且不必调试运行时行为,则会出现编译器错误。