mirror of https://github.com/YosysHQ/yosys.git
Display simulation time data
This commit is contained in:
parent
a6959d30df
commit
543feb75cb
|
@ -21,10 +21,30 @@
|
||||||
|
|
||||||
USING_YOSYS_NAMESPACE
|
USING_YOSYS_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
FstData::FstData(std::string filename) : ctx(nullptr)
|
FstData::FstData(std::string filename) : ctx(nullptr)
|
||||||
{
|
{
|
||||||
|
const std::vector<std::string> g_units = { "s", "ms", "us", "ns", "ps", "fs", "as", "zs" };
|
||||||
ctx = (fstReaderContext *)fstReaderOpen(filename.c_str());
|
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;i<zeros; i++) timescale_str += "0";
|
||||||
|
if (zeros>0)timescale_str += " ";
|
||||||
|
timescale_str += g_units[unit];
|
||||||
extractVarNames();
|
extractVarNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ class FstData
|
||||||
std::string valueAt(fstHandle signal, uint64_t time);
|
std::string valueAt(fstHandle signal, uint64_t time);
|
||||||
fstHandle getHandle(std::string name);
|
fstHandle getHandle(std::string name);
|
||||||
double getTimescale() { return timescale; }
|
double getTimescale() { return timescale; }
|
||||||
|
const char *getTimescaleString() { return timescale_str.c_str(); }
|
||||||
private:
|
private:
|
||||||
void extractVarNames();
|
void extractVarNames();
|
||||||
|
|
||||||
|
@ -69,6 +70,7 @@ private:
|
||||||
std::vector<uint64_t> sample_times;
|
std::vector<uint64_t> sample_times;
|
||||||
size_t sample_times_ndx;
|
size_t sample_times_ndx;
|
||||||
double timescale;
|
double timescale;
|
||||||
|
std::string timescale_str;
|
||||||
uint64_t start_time;
|
uint64_t start_time;
|
||||||
uint64_t end_time;
|
uint64_t end_time;
|
||||||
std::vector<uint64_t> edges;
|
std::vector<uint64_t> edges;
|
||||||
|
|
|
@ -1033,7 +1033,9 @@ struct SimWorker : SimShared
|
||||||
log_error("No clock edges found in given time range\n");
|
log_error("No clock edges found in given time range\n");
|
||||||
fst->reconstructAllAtTimes(edges);
|
fst->reconstructAllAtTimes(edges);
|
||||||
bool initial = false;
|
bool initial = false;
|
||||||
|
int cycle = 0;
|
||||||
for(auto &time : edges) {
|
for(auto &time : edges) {
|
||||||
|
log("Simulating cycle %d [%zu %s].\n", cycle+1, time, fst->getTimescaleString());
|
||||||
for(auto &item : inputs) {
|
for(auto &item : inputs) {
|
||||||
std::string v = fst->valueAt(item.second, time);
|
std::string v = fst->valueAt(item.second, time);
|
||||||
top->set_state(item.first, Const::from_string(v));
|
top->set_state(item.first, Const::from_string(v));
|
||||||
|
@ -1046,7 +1048,8 @@ struct SimWorker : SimShared
|
||||||
|
|
||||||
bool status = top->checkSignals(time);
|
bool status = top->checkSignals(time);
|
||||||
if (status)
|
if (status)
|
||||||
log_error("Signal difference at %zu\n", time);
|
log_error("Signal difference\n");
|
||||||
|
cycle++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue