dffinit -noreinit to silently continue when init value is 1'bx
authorEddie Hung <eddie@fpgeh.com>
Fri, 3 May 2019 00:40:39 +0000 (17:40 -0700)
committerEddie Hung <eddie@fpgeh.com>
Fri, 3 May 2019 00:40:39 +0000 (17:40 -0700)
passes/techmap/dffinit.cc

index 48390488eff98faddc995c4b4f7a43e143bfef41..37479da6536ab76cf288c62542cabd8ed14544f2 100644 (file)
@@ -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]);
                                        }