size_t arg_count = 0;
std::map<std::string, std::string> replace_rules;
+ vector<AstNode*> added_mod_children;
if (current_block == NULL)
{
wire->is_input = false;
wire->is_output = false;
current_ast_mod->children.push_back(wire);
- while (wire->simplify(true, false, false, 1, -1, false, false)) { }
+ added_mod_children.push_back(wire);
+
+ if (child->type == AST_WIRE)
+ while (wire->simplify(true, false, false, 1, -1, false, false)) { }
replace_rules[child->str] = wire->str;
+ current_scope[wire->str] = wire;
if ((child->is_input || child->is_output) && arg_count < children.size())
{
}
}
+ for (auto child : added_mod_children) {
+ child->replace_ids(prefix, replace_rules);
+ while (child->simplify(true, false, false, 1, -1, false, false)) { }
+ }
+
for (auto child : decl->children)
if (child->type != AST_WIRE && child->type != AST_PARAMETER && child->type != AST_LOCALPARAM)
{
// -------------------------------------------------------------------
-module task_func_test04(input [7:0] in, output [7:0] out1, out2, out3);
+module task_func_test04(input [7:0] in, output [7:0] out1, out2, out3, out4);
parameter p = 23;
+ parameter px = 42;
function [7:0] test1;
input [7:0] i;
parameter p = 42;
test3 = i + p;
end
endfunction
+ function [7:0] test4;
+ input [7:0] i;
+ parameter px = p + 13;
+ parameter p3 = px - 37;
+ parameter p4 = p3 ^ px;
+ begin
+ test4 = i + p4;
+ end
+ endfunction
assign out1 = test1(in);
assign out2 = test2(in);
assign out3 = test3(in);
+ assign out4 = test4(in);
endmodule