ice40: Demote conflicting FF init values to a warning
authorNiklas Nisbeth <niklas@nisbeth.dk>
Tue, 31 Dec 2019 01:38:10 +0000 (02:38 +0100)
committerNiklas Nisbeth <niklas@nisbeth.dk>
Tue, 31 Dec 2019 01:38:10 +0000 (02:38 +0100)
techlibs/ice40/ice40_ffinit.cc

index 3089d8932776743dc61cd8a8250fb42d05bcd191..c098736e977487dd3b20675d7f582b3b1a4f06c8 100644 (file)
@@ -78,10 +78,12 @@ struct Ice40FfinitPass : 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;
                                        }
 
@@ -114,6 +116,10 @@ struct Ice40FfinitPass : public Pass {
                                        continue;
 
                                State val = initbits.at(bit_q);
+
+                               if (val == State::Sx)
+                                       continue;
+
                                handled_initbits.insert(bit_q);
 
                                log("FF init value for cell %s (%s): %s = %c\n", log_id(cell), log_id(cell->type),