summaryrefslogtreecommitdiff
path: root/passes/cmds
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2015-04-29 07:44:57 +0200
committerClifford Wolf <clifford@clifford.at>2015-04-29 07:44:57 +0200
commit96be31de89bfcfb64d195dbdc0891bd507aec399 (patch)
treeb7d9e2e10ec131b8037b9300a61920d1d7583268 /passes/cmds
parentf483dce7c231f83937b5944ed0166a70594a0e8b (diff)
Preserve important attributes in splitnets
Diffstat (limited to 'passes/cmds')
-rw-r--r--passes/cmds/splitnets.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/passes/cmds/splitnets.cc b/passes/cmds/splitnets.cc
index d4e721a5..d22d6500 100644
--- a/passes/cmds/splitnets.cc
+++ b/passes/cmds/splitnets.cc
@@ -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());
}