mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-07 01:54:10 +00:00
Bugfix in splitcells pass
Signed-off-by: Claire Xenia Wolf <claire@clairexen.net>
This commit is contained in:
parent
e151e44caa
commit
2895a66784
|
@ -76,9 +76,14 @@ struct SplitcellsWorker
|
||||||
std::vector<int> slices;
|
std::vector<int> slices;
|
||||||
slices.push_back(0);
|
slices.push_back(0);
|
||||||
|
|
||||||
for (int i = 1; i < GetSize(outsig); i++) {
|
int width = GetSize(outsig);
|
||||||
auto &last_users = bit_users_db.at(outsig[slices.back()]);
|
width = std::min(width, GetSize(cell->getPort(ID::A)));
|
||||||
auto &this_users = bit_users_db.at(outsig[i]);
|
if (cell->hasPort(ID::B))
|
||||||
|
width = std::min(width, GetSize(cell->getPort(ID::B)));
|
||||||
|
|
||||||
|
for (int i = 1; i < width; i++) {
|
||||||
|
auto &last_users = bit_users_db[outsig[slices.back()]];
|
||||||
|
auto &this_users = bit_users_db[outsig[i]];
|
||||||
if (last_users != this_users) slices.push_back(i);
|
if (last_users != this_users) slices.push_back(i);
|
||||||
}
|
}
|
||||||
if (GetSize(slices) <= 1) return 0;
|
if (GetSize(slices) <= 1) return 0;
|
||||||
|
@ -98,8 +103,11 @@ struct SplitcellsWorker
|
||||||
|
|
||||||
auto slice_signal = [&](SigSpec old_sig) -> SigSpec {
|
auto slice_signal = [&](SigSpec old_sig) -> SigSpec {
|
||||||
SigSpec new_sig;
|
SigSpec new_sig;
|
||||||
for (int i = 0; i < GetSize(old_sig); i += GetSize(outsig))
|
for (int i = 0; i < GetSize(old_sig); i += GetSize(outsig)) {
|
||||||
new_sig.append(old_sig.extract(i+slice_lsb, slice_msb-slice_lsb+1));
|
int offset = i+slice_lsb;
|
||||||
|
int length = std::min(GetSize(old_sig)-offset, slice_msb-slice_lsb+1);
|
||||||
|
new_sig.append(old_sig.extract(offset, length));
|
||||||
|
}
|
||||||
return new_sig;
|
return new_sig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue