Fix how explicitly unconnected ports are handled in the presence of .*

See this PR: https://github.com/steveicarus/ivtest/pull/15
Which adds test implicit-port7

(cherry picked from commit 01ee6bd5b4)
This commit is contained in:
Purdea Andrei 2020-05-18 22:16:13 +03:00 committed by Martin Whitaker
parent a151407ca4
commit ff30cb1800
1 changed files with 4 additions and 1 deletions

View File

@ -1191,6 +1191,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
// the source list is rearranged by name binding into this list.
vector<PExpr*>pins (rmod->port_count());
vector<bool>pins_fromwc (rmod->port_count(), false);
vector<bool>pins_is_explicitly_not_connected (rmod->port_count(), false);
// If the instance has a pins_ member, then we know we are
// binding by name. Therefore, make up a pins array that
@ -1204,7 +1205,7 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
// Handle wildcard named port
if (pins_[idx].name[0] == '*') {
for (unsigned j = 0 ; j < nexp ; j += 1) {
if (!pins[j]) {
if ((!pins[j]) && (!pins_is_explicitly_not_connected[j])) {
pins_fromwc[j] = true;
NetNet* net = 0;
const NetExpr*par = 0;
@ -1259,6 +1260,8 @@ void PGModule::elaborate_mod_(Design*des, Module*rmod, NetScope*scope) const
// OK, do the binding by placing the expression in
// the right place.
pins[pidx] = pins_[idx].parm;
if (!pins[pidx])
pins_is_explicitly_not_connected[pidx] = true;
}