Allow localparams in constant functions

This commit is contained in:
Zachary Snow 2020-08-20 20:09:54 -04:00
parent 082cbcb4c7
commit 74abc3bbfd
2 changed files with 18 additions and 3 deletions

View File

@ -4488,6 +4488,18 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
log_assert(variables.count(str) != 0);
if (stmt->type == AST_LOCALPARAM)
{
while (stmt->simplify(true, false, false, 1, -1, false, true)) { }
if (!backup_scope.count(stmt->str))
backup_scope[stmt->str] = current_scope[stmt->str];
current_scope[stmt->str] = stmt;
block->children.erase(block->children.begin());
continue;
}
if (stmt->type == AST_ASSIGN_EQ)
{
if (stmt->children.at(0)->type == AST_IDENTIFIER && stmt->children.at(0)->children.size() != 0 &&

View File

@ -1,15 +1,18 @@
module top(out);
function integer operation;
input integer num;
localparam incr = 1;
localparam mult = 1;
begin
operation = 0;
begin : op_i
integer i;
for (i = 0; i < 2; i = i + 1)
for (i = 0; i * mult < 2; i = i + incr)
begin : op_j
integer j;
for (j = i; j < i * 2; j = j + 1)
num = num + 1;
localparam other_mult = 2;
for (j = i; j < i * other_mult; j = j + incr)
num = num + incr;
end
num = num * 2;
end