aboutsummaryrefslogtreecommitdiffstats
path: root/passes
diff options
context:
space:
mode:
authorMiodrag Milanović <mmicko@gmail.com>2022-04-04 09:56:56 +0200
committerGitHub <noreply@github.com>2022-04-04 09:56:56 +0200
commit75f484768946e50f02baba1d813e82f980e2c86f (patch)
treecde3528d35f3bd74e2739ab4d8a579d760c4f0e0 /passes
parent8ca9737180b39011fa75c1d8e34be3100b5b7b41 (diff)
parent6020ba67ac0b493109ee1d0ef598f7f1de965d4d (diff)
downloadyosys-75f484768946e50f02baba1d813e82f980e2c86f.tar.gz
yosys-75f484768946e50f02baba1d813e82f980e2c86f.tar.bz2
yosys-75f484768946e50f02baba1d813e82f980e2c86f.zip
Merge pull request #3265 from YosysHQ/micko/sim_improvements
Improve sim by setting proper past D and AD signals
Diffstat (limited to 'passes')
-rw-r--r--passes/sat/sim.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/passes/sat/sim.cc b/passes/sat/sim.cc
index 65bd5c78e..ca4aab566 100644
--- a/passes/sat/sim.cc
+++ b/passes/sat/sim.cc
@@ -256,6 +256,7 @@ struct SimInstance
{
ff_state_t &ff = it.second;
zinit(ff.past_d);
+ zinit(ff.past_ad);
SigSpec qsig = it.second.data.sig_q;
Const qdata = get_state(qsig);
@@ -778,10 +779,12 @@ struct SimInstance
child.second->register_output_step_values(data);
}
- void setInitState()
+ bool setInitState()
{
+ bool did_something = false;
for (auto &it : ff_database)
{
+ ff_state_t &ff = it.second;
SigSpec qsig = it.second.data.sig_q;
if (qsig.is_wire()) {
IdString name = qsig.as_wire()->name;
@@ -790,12 +793,16 @@ struct SimInstance
log_warning("Unable to find wire %s in input file.\n", (scope + "." + RTLIL::unescape_id(name)).c_str());
if (id!=0) {
Const fst_val = Const::from_string(shared->fst->valueOf(id));
- set_state(qsig, fst_val);
+ ff.past_d = fst_val;
+ if (ff.data.has_aload)
+ ff.past_ad = fst_val;
+ did_something = set_state(qsig, fst_val);
}
}
}
for (auto child : children)
- child.second->setInitState();
+ did_something |= child.second->setInitState();
+ return did_something;
}
void setState(dict<int, std::pair<SigBit,bool>> bits, std::string values)
@@ -1110,7 +1117,7 @@ struct SimWorker : SimShared
}
if (initial) {
- top->setInitState();
+ did_something |= top->setInitState();
initial = false;
}
if (did_something)