diff --git a/include/verilated.cpp b/include/verilated.cpp index eca6b49be..9c6c26326 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -762,6 +762,50 @@ void VL_FCLOSE_I(IData fdi) { VerilatedImp::fdDelete(fdi); } +void VL_SFORMAT_X(int obits, CData& destr, const char* formatp, ...) { + VL_STATIC_OR_THREAD string output; // static only for speed + output = ""; + va_list ap; + va_start(ap,formatp); + _vl_vsformat(output, formatp, ap); + va_end(ap); + + _VL_STRING_TO_VINT(obits, &destr, (int)output.length(), output.c_str()); +} + +void VL_SFORMAT_X(int obits, SData& destr, const char* formatp, ...) { + VL_STATIC_OR_THREAD string output; // static only for speed + output = ""; + va_list ap; + va_start(ap,formatp); + _vl_vsformat(output, formatp, ap); + va_end(ap); + + _VL_STRING_TO_VINT(obits, &destr, (int)output.length(), output.c_str()); +} + +void VL_SFORMAT_X(int obits, IData& destr, const char* formatp, ...) { + VL_STATIC_OR_THREAD string output; // static only for speed + output = ""; + va_list ap; + va_start(ap,formatp); + _vl_vsformat(output, formatp, ap); + va_end(ap); + + _VL_STRING_TO_VINT(obits, &destr, (int)output.length(), output.c_str()); +} + +void VL_SFORMAT_X(int obits, QData& destr, const char* formatp, ...) { + VL_STATIC_OR_THREAD string output; // static only for speed + output = ""; + va_list ap; + va_start(ap,formatp); + _vl_vsformat(output, formatp, ap); + va_end(ap); + + _VL_STRING_TO_VINT(obits, &destr, (int)output.length(), output.c_str()); +} + void VL_SFORMAT_X(int obits, void* destp, const char* formatp, ...) { VL_STATIC_OR_THREAD string output; // static only for speed output = ""; diff --git a/include/verilated.h b/include/verilated.h index 9454f6061..7dbb10c66 100644 --- a/include/verilated.h +++ b/include/verilated.h @@ -375,6 +375,10 @@ extern IData VL_SSCANF_IIX(int lbits, IData ld, const char* formatp, ...); extern IData VL_SSCANF_IQX(int lbits, QData ld, const char* formatp, ...); extern IData VL_SSCANF_IWX(int lbits, WDataInP lwp, const char* formatp, ...); +extern void VL_SFORMAT_X(int obits, CData& destr, const char* formatp, ...); +extern void VL_SFORMAT_X(int obits, SData& destr, const char* formatp, ...); +extern void VL_SFORMAT_X(int obits, IData& destr, const char* formatp, ...); +extern void VL_SFORMAT_X(int obits, QData& destr, const char* formatp, ...); extern void VL_SFORMAT_X(int obits, void* destp, const char* formatp, ...); extern IData VL_SYSTEM_IW(int lhsnwords, WDataInP lhs); diff --git a/test_regress/t/t_sys_sformat.v b/test_regress/t/t_sys_sformat.v index e2ce5504c..fbda9b957 100644 --- a/test_regress/t/t_sys_sformat.v +++ b/test_regress/t/t_sys_sformat.v @@ -13,6 +13,7 @@ module t; reg [63:0] q; reg [16*8:1] wide; + reg [8:1] char; reg [48*8:1] str; reg [48*8:1] str2; @@ -48,6 +49,9 @@ module t; if (str2 !== "mod=top.t") $stop; `endif + $sformat(char,"%s","c"); + if (char != "c") $stop; + $write("*-* All Finished *-*\n"); $finish; end