aboutsummaryrefslogtreecommitdiffstats
path: root/passes
diff options
context:
space:
mode:
authorJannis Harder <me@jix.one>2022-12-21 14:39:49 +0100
committerJannis Harder <me@jix.one>2023-01-11 18:07:16 +0100
commit9c6198a8272de1558d9f613d52a23c043e1c928a (patch)
treec02b968bc6ee5801ea06e5fb93373caf94e65c0f /passes
parent44b26d5c6d69999f167d219ef7e9319e48fbc3e9 (diff)
downloadyosys-9c6198a8272de1558d9f613d52a23c043e1c928a.tar.gz
yosys-9c6198a8272de1558d9f613d52a23c043e1c928a.tar.bz2
yosys-9c6198a8272de1558d9f613d52a23c043e1c928a.zip
sim: Internal API to set $initstate
This is not yet added to any of the simulation drivers.
Diffstat (limited to 'passes')
-rw-r--r--passes/sat/sim.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/passes/sat/sim.cc b/passes/sat/sim.cc
index 754fbdf95..86736eeb4 100644
--- a/passes/sat/sim.cc
+++ b/passes/sat/sim.cc
@@ -153,6 +153,7 @@ struct SimInstance
dict<Cell*, ff_state_t> ff_database;
dict<IdString, mem_state_t> mem_database;
pool<Cell*> formal_database;
+ pool<Cell*> initstate_database;
dict<Cell*, IdString> mem_cells;
std::vector<Mem> memories;
@@ -256,6 +257,8 @@ struct SimInstance
if (cell->type.in(ID($assert), ID($cover), ID($assume))) {
formal_database.insert(cell);
}
+ if (cell->type == ID($initstate))
+ initstate_database.insert(cell);
}
if (shared->zinit)
@@ -708,6 +711,14 @@ struct SimInstance
it.second->update_ph3();
}
+ void set_initstate_outputs(State state)
+ {
+ for (auto cell : initstate_database)
+ set_state(cell->getPort(ID::Y), state);
+ for (auto child : children)
+ child.second->set_initstate_outputs(state);
+ }
+
void writeback(pool<Module*> &wbmods)
{
if (!ff_database.empty() || !mem_database.empty()) {