diff options
author | Miodrag Milanović <mmicko@gmail.com> | 2022-04-04 09:56:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-04 09:56:56 +0200 |
commit | 75f484768946e50f02baba1d813e82f980e2c86f (patch) | |
tree | cde3528d35f3bd74e2739ab4d8a579d760c4f0e0 /passes | |
parent | 8ca9737180b39011fa75c1d8e34be3100b5b7b41 (diff) | |
parent | 6020ba67ac0b493109ee1d0ef598f7f1de965d4d (diff) | |
download | yosys-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.cc | 15 |
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) |