techmap.CONSTMAP: Handle outputs before inputs.

Fixes #2321.
This commit is contained in:
Marcelina Kościelnicka 2020-08-05 12:28:18 +02:00
parent c39ebe6ae0
commit b4a4cb081d
2 changed files with 37 additions and 1 deletions

View File

@ -801,11 +801,31 @@ struct TechmapWorker
}
}
// Handle outputs first, as these cannot be remapped.
for (auto &conn : cell->connections())
{
Wire *twire = tpl->wire(conn.first);
if (!twire->port_output)
continue;
for (int i = 0; i < GetSize(conn.second); i++) {
RTLIL::SigBit bit = sigmap(conn.second[i]);
RTLIL::SigBit tplbit(twire, i);
cellbits_to_tplbits[bit] = tplbit;
}
}
// Now handle inputs, remapping as necessary.
for (auto &conn : cell->connections())
{
Wire *twire = tpl->wire(conn.first);
if (twire->port_output)
continue;
for (int i = 0; i < GetSize(conn.second); i++)
{
RTLIL::SigBit bit = sigmap(conn.second[i]);
RTLIL::SigBit tplbit(tpl->wire(conn.first), i);
RTLIL::SigBit tplbit(twire, i);
if (bit.wire == nullptr)
{
@ -820,6 +840,7 @@ struct TechmapWorker
else
cellbits_to_tplbits[bit] = tplbit;
}
}
RTLIL::SigSig port_conn;
for (auto &it : port_connmap) {

15
tests/techmap/bug2321.ys Normal file
View File

@ -0,0 +1,15 @@
read_verilog <<EOT
module m (input i, output o);
wire [1023:0] _TECHMAP_DO_00_ = "CONSTMAP; ";
endmodule
EOT
design -stash map
read_verilog <<EOT
module top(output o);
m m (.o(o), .i(o));
endmodule
EOT
techmap -map %map