aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--passes/techmap/dffinit.cc16
1 files changed, 12 insertions, 4 deletions
diff --git a/passes/techmap/dffinit.cc b/passes/techmap/dffinit.cc
index 48390488e..37479da65 100644
--- a/passes/techmap/dffinit.cc
+++ b/passes/techmap/dffinit.cc
@@ -135,10 +135,18 @@ struct DffinitPass : public Pass {
continue;
while (GetSize(value.bits) <= i)
value.bits.push_back(State::S0);
- if (noreinit && value.bits[i] != State::Sx && value.bits[i] != init_bits.at(sig[i]))
- log_error("Trying to assign a different init value for %s.%s.%s which technically "
- "have a conflicted init value.\n",
- log_id(module), log_id(cell), log_id(it.second));
+ if (noreinit && value.bits[i] != State::Sx && value.bits[i] != init_bits.at(sig[i])) {
+ if (init_bits.at(sig[i]) != State::Sx) {
+ log_error("Trying to assign a different init value for %s.%s.%s which technically "
+ "have a conflicted init value.\n",
+ log_id(module), log_id(cell), log_id(it.second));
+ }
+ else {
+ // Trying to overwrite an existing INIT value with 1'bx,
+ // silently ignore?
+ continue;
+ }
+ }
value.bits[i] = init_bits.at(sig[i]);
cleanup_bits.insert(sig[i]);
}