From 7855a78a0ffe88859f851841db9a44757c3aad32 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 28 Jan 2023 21:41:50 -0500 Subject: [PATCH] Support %p of union with real --- include/verilated.cpp | 1 + include/verilated_types.h | 1 + src/V3Width.cpp | 2 +- test_regress/t/t_union_unpacked.v | 4 ++++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/verilated.cpp b/include/verilated.cpp index 2b1c6f997..8e1956a38 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -1793,6 +1793,7 @@ std::string VL_TO_STRING(CData lhs) { return VL_SFORMATF_NX("'h%0x", 8, lhs); } std::string VL_TO_STRING(SData lhs) { return VL_SFORMATF_NX("'h%0x", 16, lhs); } std::string VL_TO_STRING(IData lhs) { return VL_SFORMATF_NX("'h%0x", 32, lhs); } std::string VL_TO_STRING(QData lhs) { return VL_SFORMATF_NX("'h%0x", 64, lhs); } +std::string VL_TO_STRING(double lhs) { return VL_SFORMATF_NX("%d", 64, lhs); } std::string VL_TO_STRING_W(int words, const WDataInP obj) { return VL_SFORMATF_NX("'h%0x", words * VL_EDATASIZE, obj); } diff --git a/include/verilated_types.h b/include/verilated_types.h index 1442f7d1d..8598e8eb5 100644 --- a/include/verilated_types.h +++ b/include/verilated_types.h @@ -45,6 +45,7 @@ extern std::string VL_TO_STRING(CData lhs); extern std::string VL_TO_STRING(SData lhs); extern std::string VL_TO_STRING(IData lhs); extern std::string VL_TO_STRING(QData lhs); +extern std::string VL_TO_STRING(double lhs); inline std::string VL_TO_STRING(const std::string& obj) { return "\"" + obj + "\""; } extern std::string VL_TO_STRING_W(int words, const WDataInP obj); diff --git a/src/V3Width.cpp b/src/V3Width.cpp index cd4545de4..594d165db 100644 --- a/src/V3Width.cpp +++ b/src/V3Width.cpp @@ -4592,7 +4592,7 @@ private: || VN_IS(dtypep, UnpackArrayDType) // || VN_IS(dtypep, QueueDType) || (VN_IS(dtypep, NodeUOrStructDType) - && !VN_AS(dtypep, StructDType)->packed())) { + && !VN_AS(dtypep, NodeUOrStructDType)->packed())) { added = true; newFormat += "%@"; VNRelinker handle; diff --git a/test_regress/t/t_union_unpacked.v b/test_regress/t/t_union_unpacked.v index 2cb7ccc39..1cc8d341b 100644 --- a/test_regress/t/t_union_unpacked.v +++ b/test_regress/t/t_union_unpacked.v @@ -9,12 +9,16 @@ module t(/*AUTOARG*/); union { bit [7:0] val1; bit [3:0] val2; + real r; } u; initial begin u.val1 = 8'h7c; if (u.val1 != 8'h7c) $stop; if (u.val2 != 4'hc) $stop; + u.r = 1.24; + if (u.r != 1.24) $stop; + $display("%p", u); $write("*-* All Finished *-*\n"); $finish; end