aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/mem.cc
diff options
context:
space:
mode:
authorMarcelina Koƛcielnicka <mwk@0x04.net>2021-05-22 16:36:50 +0200
committerMarcelina Koƛcielnicka <mwk@0x04.net>2021-05-22 21:42:53 +0200
commitc7076495f197732725456992c9a02aed9966139a (patch)
treec3d5d3fc9cbc715b264a4e304b504f5753a77f88 /kernel/mem.cc
parentff9e0394b86f701db17ceda48bf8075ce8ac597d (diff)
downloadyosys-c7076495f197732725456992c9a02aed9966139a.tar.gz
yosys-c7076495f197732725456992c9a02aed9966139a.tar.bz2
yosys-c7076495f197732725456992c9a02aed9966139a.zip
kernel/mem: Add a check() function.
Diffstat (limited to 'kernel/mem.cc')
-rw-r--r--kernel/mem.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/mem.cc b/kernel/mem.cc
index 9d68dbbb7..7d20833e5 100644
--- a/kernel/mem.cc
+++ b/kernel/mem.cc
@@ -52,6 +52,7 @@ void Mem::remove() {
}
void Mem::emit() {
+ check();
std::vector<int> rd_left;
for (int i = 0; i < GetSize(rd_ports); i++) {
auto &port = rd_ports[i];
@@ -257,6 +258,27 @@ Const Mem::get_init_data() const {
return init_data;
}
+void Mem::check() {
+ for (auto &port : rd_ports) {
+ if (port.removed)
+ continue;
+ log_assert(GetSize(port.clk) == 1);
+ log_assert(GetSize(port.en) == 1);
+ log_assert(GetSize(port.data) == width);
+ if (!port.clk_enable) {
+ log_assert(!port.transparent);
+ }
+ }
+ for (int i = 0; i < GetSize(wr_ports); i++) {
+ auto &port = wr_ports[i];
+ if (port.removed)
+ continue;
+ log_assert(GetSize(port.clk) == 1);
+ log_assert(GetSize(port.en) == width);
+ log_assert(GetSize(port.data) == width);
+ }
+}
+
namespace {
struct MemIndex {
@@ -333,6 +355,7 @@ namespace {
for (auto &it : inits)
res.inits.push_back(it.second);
}
+ res.check();
return res;
}
@@ -389,6 +412,7 @@ namespace {
mwr.data = cell->getPort(ID::WR_DATA).extract(i * res.width, res.width);
res.wr_ports.push_back(mwr);
}
+ res.check();
return res;
}
@@ -451,6 +475,7 @@ Cell *Mem::extract_rdff(int idx) {
port.clk = State::S0;
port.clk_enable = false;
port.clk_polarity = true;
+ port.transparent = false;
return c;
}