ecp5: Demote conflicting FF init values to a warning
authorDavid Shah <dave@ds0.me>
Mon, 4 Mar 2019 11:18:53 +0000 (11:18 +0000)
committerDavid Shah <dave@ds0.me>
Mon, 4 Mar 2019 11:26:20 +0000 (11:26 +0000)
Signed-off-by: David Shah <dave@ds0.me>
techlibs/ecp5/ecp5_ffinit.cc

index 02945fff4712c4b992f9b9c4d8745889526a0553..dbd16cac9132e68e71649d4aab3e5c57cc599ebb 100644 (file)
@@ -79,10 +79,12 @@ struct Ecp5FfinitPass : public Pass {
                                                continue;
 
                                        if (initbits.count(bit)) {
-                                               if (initbits.at(bit) != val)
-                                                       log_error("Conflicting init values for signal %s (%s = %s, %s = %s).\n",
+                                               if (initbits.at(bit) != val) {
+                                                       log_warning("Conflicting init values for signal %s (%s = %s, %s = %s).\n",
                                                                        log_signal(bit), log_signal(SigBit(wire, i)), log_signal(val),
                                                                        log_signal(initbit_to_wire[bit]), log_signal(initbits.at(bit)));
+                                                       initbits.at(bit) = State::Sx;
+                                               }
                                                continue;
                                        }
 
@@ -121,6 +123,9 @@ struct Ecp5FfinitPass : public Pass {
 
                                State val = initbits.at(bit_q);
 
+                               if (val == State::Sx)
+                                       continue;
+
                                log("FF init value for cell %s (%s): %s = %c\n", log_id(cell), log_id(cell->type),
                                                log_signal(bit_q), val != State::S0 ? '1' : '0');
                                // Initval is the same as the reset state. Matches hardware, nowt more to do