Preserve important attributes in splitnets
authorClifford Wolf <clifford@clifford.at>
Wed, 29 Apr 2015 05:44:57 +0000 (07:44 +0200)
committerClifford Wolf <clifford@clifford.at>
Wed, 29 Apr 2015 05:44:57 +0000 (07:44 +0200)
passes/cmds/splitnets.cc

index d4e721a5dd13c81f2c577e13e515af5764f879ab..d22d650005e86c2a0e907854c42e2e5458a991ee 100644 (file)
@@ -54,6 +54,19 @@ struct SplitnetsWorker
                new_wire->port_input = wire->port_input;
                new_wire->port_output = wire->port_output;
 
+               if (wire->attributes.count("\\src"))
+                       new_wire->attributes["\\src"] = wire->attributes.at("\\src");
+
+               if (wire->attributes.count("\\keep"))
+                       new_wire->attributes["\\keep"] = wire->attributes.at("\\keep");
+
+               if (wire->attributes.count("\\init")) {
+                       Const old_init = wire->attributes.at("\\init"), new_init;
+                       for (int i = offset; i < offset+width; i++)
+                               new_init.bits.push_back(i < GetSize(old_init) ? old_init.bits.at(i) : State::Sx);
+                       new_wire->attributes["\\init"] = new_init;
+               }
+
                std::vector<RTLIL::SigBit> sigvec = RTLIL::SigSpec(new_wire).to_sigbit_vector();
                splitmap[wire].insert(splitmap[wire].end(), sigvec.begin(), sigvec.end());
        }