diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-02-14 14:21:15 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-02-14 14:21:15 +0100 |
commit | e9368a1d7e13bc691f86f25cd80981110b937cab (patch) | |
tree | b3dd1332d669c288d45c52595607ff6b2f364a48 /frontends | |
parent | dcf2e242406d563254013ea7db4b29b55be96eff (diff) | |
download | yosys-e9368a1d7e13bc691f86f25cd80981110b937cab.tar.gz yosys-e9368a1d7e13bc691f86f25cd80981110b937cab.tar.bz2 yosys-e9368a1d7e13bc691f86f25cd80981110b937cab.zip |
Various fixes for memories with offsets
Diffstat (limited to 'frontends')
-rw-r--r-- | frontends/ast/genrtlil.cc | 10 | ||||
-rw-r--r-- | frontends/ast/simplify.cc | 1 |
2 files changed, 5 insertions, 6 deletions
diff --git a/frontends/ast/genrtlil.cc b/frontends/ast/genrtlil.cc index 7a78743b9..4b3310501 100644 --- a/frontends/ast/genrtlil.cc +++ b/frontends/ast/genrtlil.cc @@ -1214,9 +1214,8 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint) RTLIL::Wire *wire = current_module->addWire(cell->name.str() + "_DATA", current_module->memories[str]->width); wire->attributes["\\src"] = stringf("%s:%d", filename.c_str(), linenum); - int addr_bits = 1; - while ((1 << addr_bits) < current_module->memories[str]->size) - addr_bits++; + int mem_width, mem_size, addr_bits; + id2ast->meminfo(mem_width, mem_size, addr_bits); cell->setPort("\\CLK", RTLIL::SigSpec(RTLIL::State::Sx, 1)); cell->setPort("\\ADDR", children[0]->genWidthRTLIL(addr_bits)); @@ -1243,9 +1242,8 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint) RTLIL::Cell *cell = current_module->addCell(sstr.str(), type == AST_MEMWR ? "$memwr" : "$meminit"); cell->attributes["\\src"] = stringf("%s:%d", filename.c_str(), linenum); - int addr_bits = 1; - while ((1 << addr_bits) < current_module->memories[str]->size) - addr_bits++; + int mem_width, mem_size, addr_bits; + id2ast->meminfo(mem_width, mem_size, addr_bits); cell->setPort("\\ADDR", children[0]->genWidthRTLIL(addr_bits)); cell->setPort("\\DATA", children[1]->genWidthRTLIL(current_module->memories[str]->width)); diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 10b651000..095649729 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -1421,6 +1421,7 @@ skip_dynamic_range_lvalue_expansion:; if (current_always->type != AST_INITIAL) wrnode->children.push_back(new AstNode(AST_IDENTIFIER)); wrnode->str = children[0]->str; + wrnode->id2ast = children[0]->id2ast; wrnode->children[0]->str = id_addr; wrnode->children[1]->str = id_data; if (current_always->type != AST_INITIAL) |