diff --git a/Changes b/Changes index 978fc22a4..94b883a6d 100644 --- a/Changes +++ b/Changes @@ -4,7 +4,9 @@ The contributors that suggested a given feature are shown in []. Thanks! * Verilator 3.917 devel -**** Fix modport outputs being treated as inputs, bug1246. [Jeff Bush] +**** Support > 64 bit decimal $display. + +**** Fix modport outputs being treated as inputs, bug1246. [Jeff Bush] * Verilator 3.916 2017-11-25 diff --git a/include/verilated.cpp b/include/verilated.cpp index 4bd341082..9658a91d8 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -471,6 +471,45 @@ QData VL_POWSS_QQW(int obits, int, int rbits, QData lhs, WDataInP rwp, bool lsig //=========================================================================== // Formatting +/// Output a string representation of a wide number +std::string VL_DECIMAL_NW(int width, WDataInP lwp) VL_MT_SAFE { + int maxdecwidth = (width+3)*4/3; + // Or (maxdecwidth+7)/8], but can't have more than 4 BCD bits per word + WData bcd[VL_VALUE_STRING_MAX_WIDTH/4+2]; + VL_ZERO_RESET_W(maxdecwidth, bcd); + WData tmp[VL_VALUE_STRING_MAX_WIDTH/4+2]; + WData tmp2[VL_VALUE_STRING_MAX_WIDTH/4+2]; + int from_bit = width-1; + // Skip all leading zeros + for (; from_bit >= 0 && !(VL_BITRSHIFT_W(lwp, from_bit) & 1); --from_bit); + // Double-dabble algorithm + for (; from_bit >= 0; --from_bit) { + // Any digits >= 5 need an add 3 (via tmp) + for (int nibble_bit = 0; nibble_bit < maxdecwidth; nibble_bit+=4) { + if ((VL_BITRSHIFT_W(bcd, nibble_bit) & 0xf) >= 5) { + VL_ZERO_RESET_W(maxdecwidth, tmp2); + tmp2[VL_BITWORD_I(nibble_bit)] |= 0x3 << VL_BITBIT_I(nibble_bit); + VL_ASSIGN_W(maxdecwidth, tmp, bcd); + VL_ADD_W(VL_WORDS_I(maxdecwidth), bcd, tmp, tmp2); + } + } + // Shift; bcd = bcd << 1 + VL_ASSIGN_W(maxdecwidth, tmp, bcd); + VL_SHIFTL_WWI(maxdecwidth, maxdecwidth, 32, bcd, tmp, 1); + // bcd[0] = lwp[from_bit] + if (VL_BITISSET_W(lwp, from_bit)) bcd[0] |= 1; + } + std::string output; + int lsb = (maxdecwidth-1) & ~3; + for (; lsb>0; lsb-=4) { // Skip leading zeros + if (VL_BITRSHIFT_W(bcd, lsb) & 0xf) break; + } + for (; lsb>=0; lsb-=4) { + output += ('0' + (VL_BITRSHIFT_W(bcd, lsb) & 0xf)); // 0..9 + } + return output; +} + // Do a va_arg returning a quad, assuming input argument is anything less than wide #define _VL_VA_ARG_Q(ap, bits) (((bits) <= VL_WORDSIZE) ? va_arg(ap,IData) : va_arg(ap,QData)) @@ -559,7 +598,6 @@ void _vl_vsformat(std::string& output, const char* formatp, va_list ap) VL_MT_SA } else { lwp = va_arg(ap,WDataInP); ld = lwp[0]; - if (fmt == 'd' || fmt == '#') fmt = 'x'; // Not supported, but show something } int lsb=lbits-1; if (widthSet && width==0) while (lsb && !VL_BITISSET_W(lwp,lsb)) --lsb; @@ -577,8 +615,22 @@ void _vl_vsformat(std::string& output, const char* formatp, va_list ap) VL_MT_SA } break; case 'd': { // Signed decimal - int digits = sprintf(tmp,"%" VL_PRI64 "d", + int digits; + std::string append; + if (lbits <= VL_QUADSIZE) { + digits = sprintf(tmp,"%" VL_PRI64 "d", static_cast(VL_EXTENDS_QQ(lbits,lbits,ld))); + append = tmp; + } else { + if (VL_SIGN_I(lbits, lwp[VL_WORDS_I(lbits)-1])) { + WData neg[VL_VALUE_STRING_MAX_WIDTH/4+2]; + VL_NEGATE_W(VL_WORDS_I(lbits), neg, lwp); + append = std::string("-") + VL_DECIMAL_NW(lbits, neg); + } else { + append = VL_DECIMAL_NW(lbits, lwp); + } + digits = append.length(); + } int needmore = width-digits; if (needmore>0) { if (pctp && pctp[0] && pctp[1]=='0') { //%0 @@ -587,11 +639,19 @@ void _vl_vsformat(std::string& output, const char* formatp, va_list ap) VL_MT_SA output.append(needmore,' '); // Pre-pad spaces } } - output += tmp; + output += append; break; } case '#': { // Unsigned decimal - int digits=sprintf(tmp,"%" VL_PRI64 "u",ld); + int digits; + std::string append; + if (lbits <= VL_QUADSIZE) { + digits = sprintf(tmp,"%" VL_PRI64 "u",ld); + append = tmp; + } else { + append = VL_DECIMAL_NW(lbits, lwp); + digits = append.length(); + } int needmore = width-digits; if (needmore>0) { if (pctp && pctp[0] && pctp[1]=='0') { //%0 @@ -600,7 +660,7 @@ void _vl_vsformat(std::string& output, const char* formatp, va_list ap) VL_MT_SA output.append(needmore,' '); // Pre-pad spaces } } - output += tmp; + output += append; break; } case 't': { // Time @@ -624,7 +684,6 @@ void _vl_vsformat(std::string& output, const char* formatp, va_list ap) VL_MT_SA output += (VL_BITRSHIFT_W(lwp, lsb) & 1) + '0'; } break; - break; case 'o': for (; lsb>=0; --lsb) { lsb = (lsb / 3) * 3; // Next digit diff --git a/include/verilated.h b/include/verilated.h index 051994b8e..11570aa7a 100644 --- a/include/verilated.h +++ b/include/verilated.h @@ -1226,7 +1226,7 @@ static inline WDataOutP VL_SUB_W(int words, WDataOutP owp,WDataInP lwp,WDataInP static inline IData VL_NEGATE_I(IData data) VL_PURE { return -data; } static inline QData VL_NEGATE_Q(QData data) VL_PURE { return -data; } -static inline WDataOutP VL_NEGATE_W(int words, WDataOutP owp,WDataInP lwp) VL_MT_SAFE { +static inline WDataOutP VL_NEGATE_W(int words, WDataOutP owp, WDataInP lwp) VL_MT_SAFE { QData carry = 0; for (int i=0; i(static_cast(~lwp[i])); diff --git a/src/V3EmitC.cpp b/src/V3EmitC.cpp index 9dfe986db..e60018087 100644 --- a/src/V3EmitC.cpp +++ b/src/V3EmitC.cpp @@ -1312,14 +1312,9 @@ void EmitCStmts::displayArg(AstNode* dispp, AstNode** elistp, bool isScan, if (argp->widthMin() > VL_VALUE_STRING_MAX_WIDTH) { dispp->v3error("Exceeded limit of "+cvtToStr(VL_VALUE_STRING_MAX_WIDTH)+" bits for any $display-like arguments"); } - if (argp && argp->isWide() - && (fmtLetter=='d'||fmtLetter=='#')) { - argp->v3error("Unsupported: "<verilogKwd()<<" of dec format of > 64 bit results (use hex format instead)"); - } if (argp && argp->widthMin()>8 && fmtLetter=='c') { // Technically legal, but surely not what the user intended. argp->v3warn(WIDTH,dispp->verilogKwd()<<"of %c format of > 8 bit value"); - } //string pfmt = "%"+displayFormat(argp, vfmt, fmtLetter)+fmtLetter; diff --git a/src/V3Number.cpp b/src/V3Number.cpp index 5a804f92f..962537f32 100644 --- a/src/V3Number.cpp +++ b/src/V3Number.cpp @@ -539,15 +539,19 @@ string V3Number::displayed(FileLine*fl, const string& vformat) const { if (issigned) dchars++; // space for sign fmtsize = cvtToStr(int(dchars)); } - if (width() > 64) { - fl->v3error("Unsupported: $display-like format of decimal of > 64 bit results (use hex format instead)"); - return "ERR"; - } - if (issigned) { - str = cvtToStr(toSQuad()); - } else { - str = cvtToStr(toUQuad()); - } + if (issigned) { + if (width() > 64) { + str = toDecimalS(); + } else { + str = cvtToStr(toSQuad()); + } + } else { + if (width() > 64) { + str = toDecimalU(); + } else { + str = cvtToStr(toUQuad()); + } + } int intfmtsize = atoi(fmtsize.c_str()); bool zeropad = fmtsize.length()>0 && fmtsize[0]=='0'; while ((int)(str.length()) < intfmtsize) { @@ -606,6 +610,57 @@ string V3Number::displayed(FileLine*fl, const string& vformat) const { } } +string V3Number::toDecimalS() const { + if (isNegative()) { + V3Number lhsNoSign = *this; + lhsNoSign.opNegate(*this); + return string("-") + lhsNoSign.toDecimalU(); + } else { + return toDecimalU(); + } +} + +string V3Number::toDecimalU() const { + int maxdecwidth = (width()+3)*4/3; + + // Or (maxdecwidth+7)/8], but can't have more than 4 BCD bits per word + V3Number bcd (fileline(), maxdecwidth+4); + V3Number tmp (fileline(), maxdecwidth+4); + V3Number tmp2 (fileline(), maxdecwidth+4); + + int from_bit = width()-1; + // Skip all leading zeros + for (; from_bit >= 0 && bitIs0(from_bit); --from_bit); + // Double-dabble algorithm + for (; from_bit >= 0; --from_bit) { + // Any digits >= 5 need an add 3 (via tmp) + for (int nibble_bit = 0; nibble_bit < maxdecwidth; nibble_bit+=4) { + if (bcd.bitsValue(nibble_bit, 4) >= 5) { + tmp2.setAllBits0(); + tmp2.setBit(nibble_bit, 1); // Add 3, decompsed as two bits + tmp2.setBit(nibble_bit+1, 1); + tmp.opAssign(bcd); + bcd.opAdd(tmp, tmp2); + } + } + // Shift; bcd = bcd << 1 + tmp.opAssign(bcd); + bcd.opShiftL(tmp, V3Number(fileline(), 32, 1)); + // bcd[0] = this[from_bit] + if (bitIs1(from_bit)) bcd.setBit(0, 1); + } + + string output; + int lsb = (maxdecwidth-1) & ~3; + for (; lsb>0; lsb-=4) { // Skip leading zeros + if (bcd.bitsValue(lsb, 4)) break; + } + for (; lsb>=0; lsb-=4) { + output += ('0' + bcd.bitsValue(lsb, 4)); // 0..9 + } + return output; +} + //====================================================================== // ACCESSORS - as numbers diff --git a/src/V3Number.h b/src/V3Number.h index 7b72a9ba0..c1cb7d2b4 100644 --- a/src/V3Number.h +++ b/src/V3Number.h @@ -202,6 +202,8 @@ public: vluint64_t toUQuad() const; vlsint64_t toSQuad() const; string toString() const; + string toDecimalS() const; // return ASCII signed decimal number + string toDecimalU() const; // return ASCII unsigned decimal number double toDouble() const; uint32_t toHash() const; uint32_t dataWord(int word) const; diff --git a/test_regress/t/t_display.pl b/test_regress/t/t_display.pl index d51c86440..149430a83 100755 --- a/test_regress/t/t_display.pl +++ b/test_regress/t/t_display.pl @@ -8,11 +8,11 @@ if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); di # Version 2.0. compile ( - ); + ); execute ( - check_finished=>1, - expect=>dequote( + check_finished=>1, + expect=>dequote( q{[0] In top.t: Hi [0] In top.t.sub (sub) [0] In top.t.sub.subblock (sub) @@ -21,14 +21,28 @@ q{[0] In top.t: Hi [0] Back \ Quote " [0] %b=000001100 %0b=1100 %b=00000101010111011101110111100110011001100 %0b=101010111011101110111100110011001100 %b=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0b=1010101111000001001000110100010101100111100000010010001101000101011001111000 [0] %B=000001100 %0B=1100 %B=00000101010111011101110111100110011001100 %0B=101010111011101110111100110011001100 %B=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0B=1010101111000001001000110100010101100111100000010010001101000101011001111000 -[0] %d= 12 %0d=12 %d= 46099320012 %0d=46099320012 -[0] %D= 12 %0D=12 %D= 46099320012 %0D=46099320012 +[0] %d= 12 %0d=12 %d= 46099320012 %0d=46099320012 %d= 50692964483019020981880 %0d=50692964483019020981880 +[0] %D= 12 %0D=12 %D= 46099320012 %0D=46099320012 %D= 50692964483019020981880 %0D=50692964483019020981880 [0] %h=00c %0h=c %h=00abbbbcccc %0h=abbbbcccc %h=00abc1234567812345678 %0h=abc1234567812345678 [0] %H=00c %0H=c %H=00abbbbcccc %0H=abbbbcccc %H=00abc1234567812345678 %0H=abc1234567812345678 [0] %o=014 %0o=14 %o=00527356746314 %0o=527356746314 %o=012570110642547402215053170 %0o=12570110642547402215053170 [0] %O=014 %0O=14 %O=00527356746314 %0O=527356746314 %O=012570110642547402215053170 %0O=12570110642547402215053170 [0] %x=00c %0x=c %x=00abbbbcccc %0x=abbbbcccc %x=00abc1234567812345678 %0x=abc1234567812345678 [0] %X=00c %0X=c %X=00abbbbcccc %0X=abbbbcccc %X=00abc1234567812345678 %0X=abc1234567812345678 +[0] %d= 12 %0d=12 %d= -46099320012 %0d=-46099320012 %d= 50692964483019020981880 %0d=50692964483019020981880 +[0] %D= 12 %0D=12 %D= -46099320012 %0D=-46099320012 %D= -50692964483019020981880 %0D=-50692964483019020981880 +[0] %b=000001100 %0b=1100 %b=00000101010111011101110111100110011001100 %0b=101010111011101110111100110011001100 %b=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0b=1010101111000001001000110100010101100111100000010010001101000101011001111000 +[0] %B=000001100 %0B=1100 %B=00000101010111011101110111100110011001100 %0B=101010111011101110111100110011001100 %B=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0B=1010101111000001001000110100010101100111100000010010001101000101011001111000 +[0] %d= 12 %0d=12 %d= 46099320012 %0d=46099320012 %d= 50692964483019020981880 %0d=50692964483019020981880 +[0] %D= 12 %0D=12 %D= 46099320012 %0D=46099320012 %D= 50692964483019020981880 %0D=50692964483019020981880 +[0] %h=00c %0h=c %h=00abbbbcccc %0h=abbbbcccc %h=00abc1234567812345678 %0h=abc1234567812345678 +[0] %H=00c %0H=c %H=00abbbbcccc %0H=abbbbcccc %H=00abc1234567812345678 %0H=abc1234567812345678 +[0] %o=014 %0o=14 %o=00527356746314 %0o=527356746314 %o=012570110642547402215053170 %0o=12570110642547402215053170 +[0] %O=014 %0O=14 %O=00527356746314 %0O=527356746314 %O=012570110642547402215053170 %0O=12570110642547402215053170 +[0] %x=00c %0x=c %x=00abbbbcccc %0x=abbbbcccc %x=00abc1234567812345678 %0x=abc1234567812345678 +[0] %X=00c %0X=c %X=00abbbbcccc %0X=abbbbcccc %X=00abc1234567812345678 %0X=abc1234567812345678 +[0] %d= -12 %0d=-12 %d= -46099320012 %0d=-46099320012 %d= -50692964483019020981880 %0d=-50692964483019020981880 +[0] %D= -12 %0D=-12 %D= -46099320012 %0D=-46099320012 %D= -50692964483019020981880 %0D=-50692964483019020981880 [0] %C=m %0C=m [0] %c=m %0c=m [0] %v=St0 St0 St0 St0 St0 St1 St1 St0 St0 %0v=St0 St0 St0 St0 St0 St1 St1 St0 St0 %v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 %0v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 %v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 %0v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 < diff --git a/test_regress/t/t_display.v b/test_regress/t/t_display.v index 450d6d130..cd85e045e 100644 --- a/test_regress/t/t_display.v +++ b/test_regress/t/t_display.v @@ -6,10 +6,13 @@ module t; reg [40:0] quad; initial quad = 41'ha_bbbb_cccc; reg [80:0] wide; initial wide = 81'habc_1234_5678_1234_5678; + reg [8:0] nine; initial nine = 12; + reg signed [40:0] quads; initial quads = -(41'sha_bbbb_cccc); + reg signed [80:0] wides; initial wides = -(81'shabc_1234_5678_1234_5678); + reg signed [8:0] nines; initial nines = -12; reg [31:0] str; initial str = "\000\277\021\n"; reg [47:0] str2; initial str2 = "\000what!"; reg [79:0] str3; initial str3 = "\000hmmm!1234"; - reg [8:0] nine; initial nine = 12; string svs = "sv-str"; sub sub (); @@ -23,15 +26,54 @@ module t; // Escapes $display("[%0t] Back \\ Quote \"", $time); // Old bug when \" last on the line. + // Display formatting - constants + $display("[%0t] %%b=%b %%0b=%0b %%b=%b %%0b=%0b %%b=%b %%0b=%0b", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%B=%B %%0B=%0B %%B=%B %%0B=%0B %%B=%B %%0B=%0B", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%d=%d %%0d=%0d %%d=%d %%0d=%0d %%d=%d %%0d=%0d", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%D=%D %%0D=%0D %%D=%D %%0D=%0D %%D=%D %%0D=%0D", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%h=%h %%0h=%0h %%h=%h %%0h=%0h %%h=%h %%0h=%0h", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%H=%H %%0H=%0H %%H=%H %%0H=%0H %%H=%H %%0H=%0H", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%o=%o %%0o=%0o %%o=%o %%0o=%0o %%o=%o %%0o=%0o", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%O=%O %%0O=%0O %%O=%O %%0O=%0O %%O=%O %%0O=%0o", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%x=%x %%0x=%0x %%x=%x %%0x=%0x %%x=%x %%0x=%0x", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%X=%X %%0X=%0X %%X=%X %%0X=%0X %%X=%X %%0X=%0X", $time, + 9'd12, 9'd12, 41'habbbbcccc, 41'habbbbcccc, + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + + $display("[%0t] %%d=%d %%0d=%0d %%d=%d %%0d=%0d %%d=%d %%0d=%0d", $time, + 9'sd12, 9'sd12, -(41'shabbbbcccc), -(41'shabbbbcccc), + 81'habc_1234_5678_1234_5678, 81'habc_1234_5678_1234_5678); + $display("[%0t] %%D=%D %%0D=%0D %%D=%D %%0D=%0D %%D=%D %%0D=%0D", $time, + 9'sd12, 9'sd12, -(41'shabbbbcccc), -(41'shabbbbcccc), + -(81'shabc_1234_5678_1234_5678), -(81'shabc_1234_5678_1234_5678)); + // Display formatting $display("[%0t] %%b=%b %%0b=%0b %%b=%b %%0b=%0b %%b=%b %%0b=%0b", $time, nine, nine, quad, quad, wide, wide); $display("[%0t] %%B=%B %%0B=%0B %%B=%B %%0B=%0B %%B=%B %%0B=%0B", $time, nine, nine, quad, quad, wide, wide); - $display("[%0t] %%d=%d %%0d=%0d %%d=%d %%0d=%0d", $time, - nine, nine, quad, quad); - $display("[%0t] %%D=%D %%0D=%0D %%D=%D %%0D=%0D", $time, - nine, nine, quad, quad); + $display("[%0t] %%d=%d %%0d=%0d %%d=%d %%0d=%0d %%d=%d %%0d=%0d", $time, + nine, nine, quad, quad, wide, wide); + $display("[%0t] %%D=%D %%0D=%0D %%D=%D %%0D=%0D %%D=%D %%0D=%0D", $time, + nine, nine, quad, quad, wide, wide); $display("[%0t] %%h=%h %%0h=%0h %%h=%h %%0h=%0h %%h=%h %%0h=%0h", $time, nine, nine, quad, quad, wide, wide); $display("[%0t] %%H=%H %%0H=%0H %%H=%H %%0H=%0H %%H=%H %%0H=%0H", $time, @@ -44,6 +86,11 @@ module t; nine, nine, quad, quad, wide, wide); $display("[%0t] %%X=%X %%0X=%0X %%X=%X %%0X=%0X %%X=%X %%0X=%0X", $time, nine, nine, quad, quad, wide, wide); + + $display("[%0t] %%d=%d %%0d=%0d %%d=%d %%0d=%0d %%d=%d %%0d=%0d", $time, + nines, nines, quads, quads, wides, wides); + $display("[%0t] %%D=%D %%0D=%0D %%D=%D %%0D=%0D %%D=%D %%0D=%0D", $time, + nines, nines, quads, quads, wides, wides); // // verilator lint_off WIDTH $display("[%0t] %%C=%C %%0C=%0C", $time, diff --git a/test_regress/t/t_display_noopt.pl b/test_regress/t/t_display_noopt.pl index d53170428..3649d5f22 100755 --- a/test_regress/t/t_display_noopt.pl +++ b/test_regress/t/t_display_noopt.pl @@ -10,12 +10,12 @@ if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); di top_filename("t/t_display.v"); compile ( - verilator_flags2 => ["-O0"], - ); + verilator_flags2 => ["-O0"], + ); execute ( - check_finished=>1, - expect=>dequote( + check_finished=>1, + expect=>dequote( q{[0] In top.t: Hi [0] In top.t.sub (sub) [0] In top.t.sub.subblock (sub) @@ -24,14 +24,28 @@ q{[0] In top.t: Hi [0] Back \ Quote " [0] %b=000001100 %0b=1100 %b=00000101010111011101110111100110011001100 %0b=101010111011101110111100110011001100 %b=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0b=1010101111000001001000110100010101100111100000010010001101000101011001111000 [0] %B=000001100 %0B=1100 %B=00000101010111011101110111100110011001100 %0B=101010111011101110111100110011001100 %B=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0B=1010101111000001001000110100010101100111100000010010001101000101011001111000 -[0] %d= 12 %0d=12 %d= 46099320012 %0d=46099320012 -[0] %D= 12 %0D=12 %D= 46099320012 %0D=46099320012 +[0] %d= 12 %0d=12 %d= 46099320012 %0d=46099320012 %d= 50692964483019020981880 %0d=50692964483019020981880 +[0] %D= 12 %0D=12 %D= 46099320012 %0D=46099320012 %D= 50692964483019020981880 %0D=50692964483019020981880 [0] %h=00c %0h=c %h=00abbbbcccc %0h=abbbbcccc %h=00abc1234567812345678 %0h=abc1234567812345678 [0] %H=00c %0H=c %H=00abbbbcccc %0H=abbbbcccc %H=00abc1234567812345678 %0H=abc1234567812345678 [0] %o=014 %0o=14 %o=00527356746314 %0o=527356746314 %o=012570110642547402215053170 %0o=12570110642547402215053170 [0] %O=014 %0O=14 %O=00527356746314 %0O=527356746314 %O=012570110642547402215053170 %0O=12570110642547402215053170 [0] %x=00c %0x=c %x=00abbbbcccc %0x=abbbbcccc %x=00abc1234567812345678 %0x=abc1234567812345678 [0] %X=00c %0X=c %X=00abbbbcccc %0X=abbbbcccc %X=00abc1234567812345678 %0X=abc1234567812345678 +[0] %d= 12 %0d=12 %d= -46099320012 %0d=-46099320012 %d= 50692964483019020981880 %0d=50692964483019020981880 +[0] %D= 12 %0D=12 %D= -46099320012 %0D=-46099320012 %D= -50692964483019020981880 %0D=-50692964483019020981880 +[0] %b=000001100 %0b=1100 %b=00000101010111011101110111100110011001100 %0b=101010111011101110111100110011001100 %b=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0b=1010101111000001001000110100010101100111100000010010001101000101011001111000 +[0] %B=000001100 %0B=1100 %B=00000101010111011101110111100110011001100 %0B=101010111011101110111100110011001100 %B=000001010101111000001001000110100010101100111100000010010001101000101011001111000 %0B=1010101111000001001000110100010101100111100000010010001101000101011001111000 +[0] %d= 12 %0d=12 %d= 46099320012 %0d=46099320012 %d= 50692964483019020981880 %0d=50692964483019020981880 +[0] %D= 12 %0D=12 %D= 46099320012 %0D=46099320012 %D= 50692964483019020981880 %0D=50692964483019020981880 +[0] %h=00c %0h=c %h=00abbbbcccc %0h=abbbbcccc %h=00abc1234567812345678 %0h=abc1234567812345678 +[0] %H=00c %0H=c %H=00abbbbcccc %0H=abbbbcccc %H=00abc1234567812345678 %0H=abc1234567812345678 +[0] %o=014 %0o=14 %o=00527356746314 %0o=527356746314 %o=012570110642547402215053170 %0o=12570110642547402215053170 +[0] %O=014 %0O=14 %O=00527356746314 %0O=527356746314 %O=012570110642547402215053170 %0O=12570110642547402215053170 +[0] %x=00c %0x=c %x=00abbbbcccc %0x=abbbbcccc %x=00abc1234567812345678 %0x=abc1234567812345678 +[0] %X=00c %0X=c %X=00abbbbcccc %0X=abbbbcccc %X=00abc1234567812345678 %0X=abc1234567812345678 +[0] %d= -12 %0d=-12 %d= -46099320012 %0d=-46099320012 %d= -50692964483019020981880 %0d=-50692964483019020981880 +[0] %D= -12 %0D=-12 %D= -46099320012 %0D=-46099320012 %D= -50692964483019020981880 %0D=-50692964483019020981880 [0] %C=m %0C=m [0] %c=m %0c=m [0] %v=St0 St0 St0 St0 St0 St1 St1 St0 St0 %0v=St0 St0 St0 St0 St0 St1 St1 St0 St0 %v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 %0v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St0 St1 St1 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 St1 St1 St0 St0 %v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 %0v=St0 St0 St0 St0 St0 St1 St0 St1 St0 St1 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 St0 St0 St0 St1 St0 St0 St1 St0 St0 St0 St1 St1 St0 St1 St0 St0 St0 St1 St0 St1 St0 St1 St1 St0 St0 St1 St1 St1 St1 St0 St0 St0 <