Support passing strings to DPI imports.
This commit is contained in:
parent
d3d359e757
commit
bbd59f8a22
|
|
@ -769,6 +769,14 @@ void VL_SFORMAT_X(int obits, void* destp, const char* formatp, ...) {
|
||||||
_VL_STRING_TO_VINT(obits, destp, (int)output.length(), output.c_str());
|
_VL_STRING_TO_VINT(obits, destp, (int)output.length(), output.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VL_SFORMAT_X(int obits_ignored, string &output, const char* formatp, ...) {
|
||||||
|
output = "";
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap,formatp);
|
||||||
|
_vl_vsformat(output, formatp, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
string VL_SFORMATF_NX(const char* formatp, ...) {
|
string VL_SFORMATF_NX(const char* formatp, ...) {
|
||||||
VL_STATIC_OR_THREAD string output; // static only for speed
|
VL_STATIC_OR_THREAD string output; // static only for speed
|
||||||
output = "";
|
output = "";
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,15 @@ inline string VL_CVT_PACK_STR_NQ(QData lhs) {
|
||||||
IData lw[2]; VL_SET_WQ(lw, lhs);
|
IData lw[2]; VL_SET_WQ(lw, lhs);
|
||||||
return VL_CVT_PACK_STR_NW(2, lw);
|
return VL_CVT_PACK_STR_NW(2, lw);
|
||||||
}
|
}
|
||||||
|
inline string VL_CVT_PACK_STR_NQ(string lhs) {
|
||||||
|
return lhs;
|
||||||
|
}
|
||||||
inline string VL_CVT_PACK_STR_NI(IData lhs) {
|
inline string VL_CVT_PACK_STR_NI(IData lhs) {
|
||||||
IData lw[1]; lw[0] = lhs;
|
IData lw[1]; lw[0] = lhs;
|
||||||
return VL_CVT_PACK_STR_NW(1, lw);
|
return VL_CVT_PACK_STR_NW(1, lw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void VL_SFORMAT_X(int obits_ignored, string &output, const char* formatp, ...);
|
||||||
extern string VL_SFORMATF_NX(const char* formatp, ...);
|
extern string VL_SFORMATF_NX(const char* formatp, ...);
|
||||||
|
|
||||||
#endif // Guard
|
#endif // Guard
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); die; }
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2003 by Wilson Snyder. This program is free software; you can
|
||||||
|
# redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
|
||||||
|
compile (
|
||||||
|
v_flags2 => ["t/t_dpi_string_c.cpp"],
|
||||||
|
);
|
||||||
|
|
||||||
|
execute (
|
||||||
|
check_finished=>1,
|
||||||
|
);
|
||||||
|
|
||||||
|
ok(1);
|
||||||
|
1;
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// Copyright 2009 by Wilson Snyder. This program is free software; you can
|
||||||
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
// Version 2.0.
|
||||||
|
|
||||||
|
module t ();
|
||||||
|
|
||||||
|
import "DPI-C" function int dpii_string(input string DSM_NAME);
|
||||||
|
|
||||||
|
generate
|
||||||
|
begin : DSM
|
||||||
|
string SOME_STRING;
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
$sformat(DSM.SOME_STRING, "%m");
|
||||||
|
if (dpii_string(DSM.SOME_STRING) != 5) $stop;
|
||||||
|
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
|
//*************************************************************************
|
||||||
|
//
|
||||||
|
// Copyright 2009-2009 by Wilson Snyder. This program is free software; you can
|
||||||
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
|
// Version 2.0.
|
||||||
|
//
|
||||||
|
// Verilator is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
//*************************************************************************
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include "svdpi.h"
|
||||||
|
|
||||||
|
//======================================================================
|
||||||
|
|
||||||
|
#if defined(VERILATOR)
|
||||||
|
# include "Vt_dpi_string__Dpi.h"
|
||||||
|
#elif defined(VCS)
|
||||||
|
# include "../vc_hdrs.h"
|
||||||
|
#elif defined(CADENCE)
|
||||||
|
# define NEED_EXTERNS
|
||||||
|
#else
|
||||||
|
# error "Unknown simulator for DPI test"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NEED_EXTERNS
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
extern int dpii_string (const char* s);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//======================================================================
|
||||||
|
|
||||||
|
int dpii_string(const char* s) {
|
||||||
|
printf("dpii_string: %s\n",s);
|
||||||
|
return strlen(s);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue