Updating initial state and checks

This commit is contained in:
Miodrag Milanovic 2022-01-31 09:19:34 +01:00
parent 190e44f0da
commit cbadfa0268
1 changed files with 28 additions and 15 deletions

View File

@ -1016,22 +1016,35 @@ struct SimWorker : SimShared
log_error("Stop time is before start time\n");
}
auto edges = fst->getAllEdges(fst_clock, startCount, stopCount);
fst->reconstructAllAtTimes(edges);
bool initial = false;
for(auto &time : edges) {
for(auto &item : inputs) {
std::string v = fst->valueAt(item.second, time);
top->set_state(item.first, Const::from_string(v));
if ((startCount == stopCount) && writeback) {
log("Update initial state with values from %zu\n",startCount);
if (edges.empty())
edges.push_back(startCount);
fst->reconstructAllAtTimes(edges);
top->setInitState(startCount);
pool<Module*> wbmods;
top->writeback(wbmods);
} else {
if (edges.empty())
log_error("No clock edges found in given time range\n");
fst->reconstructAllAtTimes(edges);
bool initial = false;
for(auto &time : edges) {
for(auto &item : inputs) {
std::string v = fst->valueAt(item.second, time);
top->set_state(item.first, Const::from_string(v));
}
if (!initial) {
top->setInitState(time);
initial = true;
}
update();
bool status = top->checkSignals(time);
if (status)
log_error("Signal difference at %zu\n", time);
}
if (!initial) {
top->setInitState(time);
initial = true;
}
update();
bool status = top->checkSignals(time);
if (status)
log_error("Signal difference at %zu\n", time);
}
}
};