summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2015-10-24 19:23:30 +0200
committerClifford Wolf <clifford@clifford.at>2015-10-24 19:23:30 +0200
commita1c3df7fe405a9e560d9aad9d10324af3ce6a4e5 (patch)
tree5aafe98dbcdc0458d84a4df84cf9c54b784a3286 /kernel
parent6fe48cf41ef0b0158879add600c7a426a5c4a762 (diff)
Fixed driver conflict handling (various cmds)
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rtlil.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc
index 8332219a..6f150c1e 100644
--- a/kernel/rtlil.cc
+++ b/kernel/rtlil.cc
@@ -1448,9 +1448,18 @@ void RTLIL::Module::connect(const RTLIL::SigSig &conn)
for (auto mon : design->monitors)
mon->notify_connect(this, conn);
-#ifndef NDEBUG
- log_assert(!conn.first.has_const());
-#endif
+ // ignore all attempts to assign constants to other constants
+ if (conn.first.has_const()) {
+ RTLIL::SigSig new_conn;
+ for (int i = 0; i < GetSize(conn.first); i++)
+ if (conn.first[i].wire) {
+ new_conn.first.append(conn.first[i]);
+ new_conn.second.append(conn.second[i]);
+ }
+ if (GetSize(new_conn.first))
+ connect(new_conn);
+ return;
+ }
if (yosys_xtrace) {
log("#X# Connect (SigSig) in %s: %s = %s (%d bits)\n", log_id(this), log_signal(conn.first), log_signal(conn.second), GetSize(conn.first));