3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-13 04:28:18 +00:00

memory_share: Add wide port support.

This commit is contained in:
Marcelina Kościelnicka 2021-05-25 01:55:44 +02:00
parent 9d5d5a48b1
commit 47f958ce45

View file

@ -143,6 +143,7 @@ struct MemoryShareWorker
bool cache_clk_enable = false; bool cache_clk_enable = false;
bool cache_clk_polarity = false; bool cache_clk_polarity = false;
RTLIL::SigSpec cache_clk; RTLIL::SigSpec cache_clk;
int cache_wide_log2 = 0;
bool changed = false; bool changed = false;
@ -152,12 +153,14 @@ struct MemoryShareWorker
RTLIL::SigSpec addr = sigmap_xmux(port.addr); RTLIL::SigSpec addr = sigmap_xmux(port.addr);
if (port.clk_enable != cache_clk_enable || if (port.clk_enable != cache_clk_enable ||
port.wide_log2 != cache_wide_log2 ||
(cache_clk_enable && (sigmap(port.clk) != cache_clk || (cache_clk_enable && (sigmap(port.clk) != cache_clk ||
port.clk_polarity != cache_clk_polarity))) port.clk_polarity != cache_clk_polarity)))
{ {
cache_clk_enable = port.clk_enable; cache_clk_enable = port.clk_enable;
cache_clk_polarity = port.clk_polarity; cache_clk_polarity = port.clk_polarity;
cache_clk = sigmap(port.clk); cache_clk = sigmap(port.clk);
cache_wide_log2 = port.wide_log2;
last_port_by_addr.clear(); last_port_by_addr.clear();
if (cache_clk_enable) if (cache_clk_enable)
@ -290,18 +293,21 @@ struct MemoryShareWorker
bool cache_clk_enable = false; bool cache_clk_enable = false;
bool cache_clk_polarity = false; bool cache_clk_polarity = false;
RTLIL::SigSpec cache_clk; RTLIL::SigSpec cache_clk;
int cache_wide_log2 = 0;
for (int i = 0; i < GetSize(mem.wr_ports); i++) for (int i = 0; i < GetSize(mem.wr_ports); i++)
{ {
auto &port = mem.wr_ports[i]; auto &port = mem.wr_ports[i];
if (port.clk_enable != cache_clk_enable || if (port.clk_enable != cache_clk_enable ||
port.wide_log2 != cache_wide_log2 ||
(cache_clk_enable && (sigmap(port.clk) != cache_clk || (cache_clk_enable && (sigmap(port.clk) != cache_clk ||
port.clk_polarity != cache_clk_polarity))) port.clk_polarity != cache_clk_polarity)))
{ {
cache_clk_enable = port.clk_enable; cache_clk_enable = port.clk_enable;
cache_clk_polarity = port.clk_polarity; cache_clk_polarity = port.clk_polarity;
cache_clk = sigmap(port.clk); cache_clk = sigmap(port.clk);
cache_wide_log2 = port.wide_log2;
} }
else if (i > 0 && considered_ports.count(i-1) && considered_ports.count(i)) else if (i > 0 && considered_ports.count(i-1) && considered_ports.count(i))
considered_port_pairs.insert(i); considered_port_pairs.insert(i);