mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #4727 from georgerennie/george/bufnorm_constants2
bufnorm: preserve constant bits when mapping back to connections
This commit is contained in:
commit
9da7341003
|
@ -404,6 +404,17 @@ struct BufnormPass : public Pass {
|
||||||
|
|
||||||
pool<Cell*> added_buffers;
|
pool<Cell*> added_buffers;
|
||||||
|
|
||||||
|
const auto lookup_mapping = [&mapped_bits](const SigBit bit, bool default_sx = false)
|
||||||
|
{
|
||||||
|
if (!bit.is_wire())
|
||||||
|
return bit;
|
||||||
|
|
||||||
|
if (default_sx)
|
||||||
|
return mapped_bits.at(bit, State::Sx);
|
||||||
|
|
||||||
|
return mapped_bits.at(bit);
|
||||||
|
};
|
||||||
|
|
||||||
auto make_buffer_f = [&](const IdString &type, const SigSpec &src, const SigSpec &dst)
|
auto make_buffer_f = [&](const IdString &type, const SigSpec &src, const SigSpec &dst)
|
||||||
{
|
{
|
||||||
auto it = old_buffers.find(pair<IdString, SigSpec>(type, dst));
|
auto it = old_buffers.find(pair<IdString, SigSpec>(type, dst));
|
||||||
|
@ -438,12 +449,8 @@ struct BufnormPass : public Pass {
|
||||||
bool chain_this_wire = chain_this_wire_f(wire);
|
bool chain_this_wire = chain_this_wire_f(wire);
|
||||||
|
|
||||||
SigSpec keysig = sigmap(wire), insig = wire, outsig = wire;
|
SigSpec keysig = sigmap(wire), insig = wire, outsig = wire;
|
||||||
for (int i = 0; i < GetSize(insig); i++) {
|
for (int i = 0; i < GetSize(insig); i++)
|
||||||
if (keysig[i].is_wire())
|
insig[i] = lookup_mapping(keysig[i], true);
|
||||||
insig[i] = mapped_bits.at(keysig[i], State::Sx);
|
|
||||||
else
|
|
||||||
insig[i] = keysig[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chain_this_wire) {
|
if (chain_this_wire) {
|
||||||
for (int i = 0; i < GetSize(outsig); i++)
|
for (int i = 0; i < GetSize(outsig); i++)
|
||||||
|
@ -491,7 +498,7 @@ struct BufnormPass : public Pass {
|
||||||
|
|
||||||
SigSpec newsig = conn.second;
|
SigSpec newsig = conn.second;
|
||||||
for (auto &bit : newsig)
|
for (auto &bit : newsig)
|
||||||
bit = mapped_bits[sigmap(bit)];
|
bit = lookup_mapping(sigmap(bit));
|
||||||
|
|
||||||
if (conn.second != newsig) {
|
if (conn.second != newsig) {
|
||||||
log(" fixing input signal on cell %s port %s: %s\n",
|
log(" fixing input signal on cell %s port %s: %s\n",
|
||||||
|
|
Loading…
Reference in New Issue