From 4c1ae4701a27cd27a708800fcb0870a90e96706c Mon Sep 17 00:00:00 2001 From: Nathan Myers Date: Thu, 9 Apr 2020 19:00:27 -0400 Subject: [PATCH] Add assertion for monotonic dump times #2103 (#2237) --- docs/CONTRIBUTORS | 1 + include/verilated_fst_c.cpp | 7 +++++++ include/verilated_fst_c.h | 1 + 3 files changed, 9 insertions(+) diff --git a/docs/CONTRIBUTORS b/docs/CONTRIBUTORS index 4e1565764..4666f4728 100644 --- a/docs/CONTRIBUTORS +++ b/docs/CONTRIBUTORS @@ -28,6 +28,7 @@ Maciej Sobkowski Marco Widmer Matthew Ballance Mike Popoloski +Nathan Myers Patrick Stewart Peter Monsson Philipp Wagner diff --git a/include/verilated_fst_c.cpp b/include/verilated_fst_c.cpp index 360e9b811..bdd2e5d61 100644 --- a/include/verilated_fst_c.cpp +++ b/include/verilated_fst_c.cpp @@ -76,6 +76,7 @@ protected: VerilatedFst::VerilatedFst(void* fst) : m_fst(fst) , m_fullDump(true) + , m_minNextDumpTime(0) , m_nextCode(1) , m_scopeEscape('.') , m_symbolp(NULL) { @@ -212,6 +213,12 @@ void VerilatedFst::addCallback(VerilatedFstCallback_t initcb, VerilatedFstCallba void VerilatedFst::dump(vluint64_t timeui) { if (!isOpen()) return; + if (timeui < m_minNextDumpTime) { + VL_PRINTF_MT("%%Warning: previous dump at t=%" VL_PRI64 "u, requesting t=%" VL_PRI64 "u\n", + m_minNextDumpTime - 1, timeui); + return; + } + m_minNextDumpTime = timeui + 1; if (VL_UNLIKELY(m_fullDump)) { m_fullDump = false; // No more need for next dump to be full for (vluint32_t ent = 0; ent < m_callbacks.size(); ++ent) { diff --git a/include/verilated_fst_c.h b/include/verilated_fst_c.h index 1bcf9c5e7..ffae20875 100644 --- a/include/verilated_fst_c.h +++ b/include/verilated_fst_c.h @@ -48,6 +48,7 @@ private: void* m_fst; VerilatedAssertOneThread m_assertOne; ///< Assert only called from single thread bool m_fullDump; + vluint64_t m_minNextDumpTime; vluint32_t m_nextCode; ///< Next code number to assign char m_scopeEscape; std::string m_module;