diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-01-01 12:56:01 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-01-01 12:56:01 +0100 |
commit | eefe78be094f8009cdb4a7a0e657e86b9624adf1 (patch) | |
tree | 6bda1ad89e9b4a01b288d3193d23771e17a4190e /frontends/ast | |
parent | 17c1c5547365ae9ec58a1600a67c2b878449de1f (diff) | |
download | yosys-eefe78be094f8009cdb4a7a0e657e86b9624adf1.tar.gz yosys-eefe78be094f8009cdb4a7a0e657e86b9624adf1.tar.bz2 yosys-eefe78be094f8009cdb4a7a0e657e86b9624adf1.zip |
Fixed memory->start_offset handling
Diffstat (limited to 'frontends/ast')
-rw-r--r-- | frontends/ast/genrtlil.cc | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/frontends/ast/genrtlil.cc b/frontends/ast/genrtlil.cc index a86d08d56..17d62d4dd 100644 --- a/frontends/ast/genrtlil.cc +++ b/frontends/ast/genrtlil.cc @@ -839,14 +839,15 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint) memory->attributes["\\src"] = stringf("%s:%d", filename.c_str(), linenum); memory->name = str; memory->width = children[0]->range_left - children[0]->range_right + 1; - memory->start_offset = children[0]->range_right; - memory->size = children[1]->range_left - children[1]->range_right; + if (children[1]->range_right < children[1]->range_left) { + memory->start_offset = children[1]->range_right; + memory->size = children[1]->range_left - children[1]->range_right + 1; + } else { + memory->start_offset = children[1]->range_left; + memory->size = children[1]->range_right - children[1]->range_left + 1; + } current_module->memories[memory->name] = memory; - if (memory->size < 0) - memory->size *= -1; - memory->size += std::min(children[1]->range_left, children[1]->range_right) + 1; - for (auto &attr : attributes) { if (attr.second->type != AST_CONSTANT) log_error("Attribute `%s' with non-constant value at %s:%d!\n", |