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

Fixed handling of unconditional generate blocks

This commit is contained in:
Clifford Wolf 2013-03-26 09:44:54 +01:00
parent 227520f94d
commit 6a382f2aba
2 changed files with 19 additions and 1 deletions

View file

@ -528,6 +528,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint)
case AST_LOCALPARAM: case AST_LOCALPARAM:
case AST_GENVAR: case AST_GENVAR:
case AST_GENFOR: case AST_GENFOR:
case AST_GENBLOCK:
case AST_GENIF: case AST_GENIF:
break; break;

View file

@ -182,6 +182,8 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage)
break; break;
if (type == AST_GENIF && i >= 1) if (type == AST_GENIF && i >= 1)
break; break;
if (type == AST_GENBLOCK)
break;
if (type == AST_PREFIX && i >= 1) if (type == AST_PREFIX && i >= 1)
break; break;
while (did_something_here && i < children.size()) { while (did_something_here && i < children.size()) {
@ -409,6 +411,21 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage)
did_something = true; did_something = true;
} }
// simplify unconditional generate block
if (type == AST_GENBLOCK && children.size() != 0)
{
if (!str.empty()) {
std::map<std::string, std::string> name_map;
expand_genblock(std::string(), str + ".", name_map);
}
for (size_t i = 0; i < children.size(); i++)
current_ast_mod->children.push_back(children[i]);
children.clear();
did_something = true;
}
// simplify generate-if blocks // simplify generate-if blocks
if (type == AST_GENIF && children.size() != 0) if (type == AST_GENIF && children.size() != 0)
{ {
@ -434,7 +451,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage)
if (!buf->str.empty()) { if (!buf->str.empty()) {
std::map<std::string, std::string> name_map; std::map<std::string, std::string> name_map;
buf->expand_genblock(std::string(), buf->str, name_map); buf->expand_genblock(std::string(), buf->str + ".", name_map);
} }
for (size_t i = 0; i < buf->children.size(); i++) for (size_t i = 0; i < buf->children.size(); i++)