Skip to content

Commit

Permalink
memory_share: Fix up mismatched address widths.
Browse files Browse the repository at this point in the history
  • Loading branch information
wanda-phi committed Apr 15, 2022
1 parent 48eea3e commit 25ff83f
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions passes/memory/memory_share.cc
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ struct MemoryShareWorker
log("Consolidating read ports of memory %s.%s by address:\n", log_id(module), log_id(mem.memid));

bool changed = false;
int abits = 0;
for (auto &port: mem.rd_ports) {
if (GetSize(port.addr) > abits)
abits = GetSize(port.addr);
}
for (int i = 0; i < GetSize(mem.rd_ports); i++)
{
auto &port1 = mem.rd_ports[i];
Expand Down Expand Up @@ -114,6 +119,8 @@ struct MemoryShareWorker
int wide_log2 = std::max(port1.wide_log2, port2.wide_log2);
SigSpec addr1 = sigmap_xmux(port1.addr);
SigSpec addr2 = sigmap_xmux(port2.addr);
addr1.extend_u0(abits);
addr2.extend_u0(abits);
if (GetSize(addr1) <= wide_log2)
continue;
if (GetSize(addr2) <= wide_log2)
Expand Down Expand Up @@ -192,6 +199,11 @@ struct MemoryShareWorker
log("Consolidating write ports of memory %s.%s by address:\n", log_id(module), log_id(mem.memid));

bool changed = false;
int abits = 0;
for (auto &port: mem.wr_ports) {
if (GetSize(port.addr) > abits)
abits = GetSize(port.addr);
}
for (int i = 0; i < GetSize(mem.wr_ports); i++)
{
auto &port1 = mem.wr_ports[i];
Expand All @@ -216,6 +228,8 @@ struct MemoryShareWorker
int wide_log2 = std::max(port1.wide_log2, port2.wide_log2);
SigSpec addr1 = sigmap_xmux(port1.addr);
SigSpec addr2 = sigmap_xmux(port2.addr);
addr1.extend_u0(abits);
addr2.extend_u0(abits);
if (GetSize(addr1) <= wide_log2)
continue;
if (GetSize(addr2) <= wide_log2)
Expand Down

0 comments on commit 25ff83f

Please sign in to comment.