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:
parent
227520f94d
commit
6a382f2aba
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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++)
|
||||||
|
|
Loading…
Reference in a new issue