diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-10-24 19:23:30 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-10-24 19:23:30 +0200 |
commit | a1c3df7fe405a9e560d9aad9d10324af3ce6a4e5 (patch) | |
tree | 5aafe98dbcdc0458d84a4df84cf9c54b784a3286 | |
parent | 6fe48cf41ef0b0158879add600c7a426a5c4a762 (diff) | |
download | yosys-a1c3df7fe405a9e560d9aad9d10324af3ce6a4e5.tar.gz yosys-a1c3df7fe405a9e560d9aad9d10324af3ce6a4e5.tar.bz2 yosys-a1c3df7fe405a9e560d9aad9d10324af3ce6a4e5.zip |
Fixed driver conflict handling (various cmds)
-rw-r--r-- | kernel/rtlil.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 8332219ae..6f150c1e2 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)); |