diff --git a/Changes b/Changes index 3f2244a83..0182adc5f 100644 --- a/Changes +++ b/Changes @@ -15,6 +15,8 @@ indicates the contributor was also the author of the fix; Thanks! **** Fix rounding in trace $timescale, bug946. [Frederic Requin] +**** Fix $fopen with SV string, bug947. [Sven Stucki] + * Verilator 3.874 2015-06-06 diff --git a/include/verilated.cpp b/include/verilated.cpp index 7c44c6a90..11e098c92 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -750,6 +750,11 @@ IData VL_FGETS_IXI(int obits, void* destp, IData fpi) { return got; } +IData VL_FOPEN_NI(const string& filename, IData mode) { + char modez[5]; + _VL_VINT_TO_STRING(VL_WORDSIZE, modez, &mode); + return VL_FOPEN_S(filename.c_str(), modez); +} IData VL_FOPEN_QI(QData filename, IData mode) { IData fnw[2]; VL_SET_WQ(fnw, filename); return VL_FOPEN_WI(2, fnw, mode); diff --git a/include/verilated.h b/include/verilated.h index e8504a3f2..705651dc6 100644 --- a/include/verilated.h +++ b/include/verilated.h @@ -357,6 +357,7 @@ extern IData VL_FOPEN_WI(int fnwords, WDataInP ofilename, IData mode); extern IData VL_FOPEN_QI(QData ofilename, IData mode); inline IData VL_FOPEN_II(IData ofilename, IData mode) { return VL_FOPEN_QI(ofilename,mode); } + extern void VL_FCLOSE_I(IData fdi); extern void VL_READMEM_W(bool hex, int width, int depth, int array_lsb, int fnwords, diff --git a/include/verilated_heavy.h b/include/verilated_heavy.h index 79558fc8a..f1136a3a9 100644 --- a/include/verilated_heavy.h +++ b/include/verilated_heavy.h @@ -60,6 +60,7 @@ inline string VL_REPLICATEN_NNI(int obits,int lbits,int rbits, const string& lhs return VL_REPLICATEN_NNQ(obits,lbits,rbits,lhs,rep); } +extern IData VL_FOPEN_NI(const string& filename, IData mode); extern IData VL_SSCANF_INX(int lbits, const string& ld, const char* formatp, ...); extern void VL_SFORMAT_X(int obits_ignored, string &output, const char* formatp, ...); extern string VL_SFORMATF_NX(const char* formatp, ...); diff --git a/test_regress/t/t_sys_file_basic.v b/test_regress/t/t_sys_file_basic.v index f3631f4b6..182e8fa27 100644 --- a/test_regress/t/t_sys_file_basic.v +++ b/test_regress/t/t_sys_file_basic.v @@ -66,6 +66,14 @@ module t; $fclose(file); end + begin + // Check read functions w/string + s = "t/t_sys_file_basic_input.dat"; + file = $fopen(s,"r"); + if ($feof(file)) $stop; + $fclose(file); + end + begin // Check read functions file = $fopen("t/t_sys_file_basic_input.dat","r");