From 543feb75cb3765746ea865c11aa6ceccaf0adeac Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Mon, 31 Jan 2022 10:52:47 +0100 Subject: [PATCH] Display simulation time data --- kernel/fstdata.cc | 22 +++++++++++++++++++++- kernel/fstdata.h | 2 ++ passes/sat/sim.cc | 5 ++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/kernel/fstdata.cc b/kernel/fstdata.cc index 5d6d85ed8..a7a2c80f7 100644 --- a/kernel/fstdata.cc +++ b/kernel/fstdata.cc @@ -21,10 +21,30 @@ USING_YOSYS_NAMESPACE + FstData::FstData(std::string filename) : ctx(nullptr) { + const std::vector g_units = { "s", "ms", "us", "ns", "ps", "fs", "as", "zs" }; ctx = (fstReaderContext *)fstReaderOpen(filename.c_str()); - timescale = pow(10.0, (int)fstReaderGetTimescale(ctx)); + int scale = (int)fstReaderGetTimescale(ctx); + timescale = pow(10.0, scale); + timescale_str = ""; + int unit = 0; + int zeros = 0; + if (scale > 0) { + zeros = scale; + } else { + if ((scale % 3) == 0) { + zeros = (-scale % 3); + unit = (-scale / 3); + } else { + zeros = 3 - (-scale % 3); + unit = (-scale / 3) + 1; + } + } + for (int i=0;i0)timescale_str += " "; + timescale_str += g_units[unit]; extractVarNames(); } diff --git a/kernel/fstdata.h b/kernel/fstdata.h index 8095981a2..c069ff5e5 100644 --- a/kernel/fstdata.h +++ b/kernel/fstdata.h @@ -55,6 +55,7 @@ class FstData std::string valueAt(fstHandle signal, uint64_t time); fstHandle getHandle(std::string name); double getTimescale() { return timescale; } + const char *getTimescaleString() { return timescale_str.c_str(); } private: void extractVarNames(); @@ -69,6 +70,7 @@ private: std::vector sample_times; size_t sample_times_ndx; double timescale; + std::string timescale_str; uint64_t start_time; uint64_t end_time; std::vector edges; diff --git a/passes/sat/sim.cc b/passes/sat/sim.cc index ff815b69a..05fe11201 100644 --- a/passes/sat/sim.cc +++ b/passes/sat/sim.cc @@ -1033,7 +1033,9 @@ struct SimWorker : SimShared log_error("No clock edges found in given time range\n"); fst->reconstructAllAtTimes(edges); bool initial = false; + int cycle = 0; for(auto &time : edges) { + log("Simulating cycle %d [%zu %s].\n", cycle+1, time, fst->getTimescaleString()); for(auto &item : inputs) { std::string v = fst->valueAt(item.second, time); top->set_state(item.first, Const::from_string(v)); @@ -1046,7 +1048,8 @@ struct SimWorker : SimShared bool status = top->checkSignals(time); if (status) - log_error("Signal difference at %zu\n", time); + log_error("Signal difference\n"); + cycle++; } } } -- 2.30.2