From 45e8ff476edacc4f3a2bd18a90ae0dbf09b9c182 Mon Sep 17 00:00:00 2001 From: George Rennie Date: Sat, 31 May 2025 01:08:15 +0100 Subject: [PATCH 1/2] read_verilog: copy inout ports in and out of functions/tasks --- frontends/ast/simplify.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 55087c772..1f9944e2e 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -4099,16 +4099,24 @@ skip_dynamic_range_lvalue_expansion:; delete arg; continue; } + AstNode *wire_id = new AstNode(AST_IDENTIFIER); wire_id->str = wire->str; - AstNode *assign = child->is_input ? - new AstNode(AST_ASSIGN_EQ, wire_id, arg) : - new AstNode(AST_ASSIGN_EQ, arg, wire_id); - assign->children[0]->was_checked = true; - if (child->is_input) + + if (child->is_input) { + AstNode *assign = new AstNode(AST_ASSIGN_EQ, wire_id->clone(), arg->clone()); + assign->children[0]->was_checked = true; new_stmts.push_back(assign); - else + } + + if (child->is_output) { + AstNode *assign = new AstNode(AST_ASSIGN_EQ, arg->clone(), wire_id->clone()); + assign->children[0]->was_checked = true; output_assignments.push_back(assign); + } + + delete arg; + delete wire_id; } } From 97f51bb4b73ad32036c0d4273487221afabcacb6 Mon Sep 17 00:00:00 2001 From: George Rennie Date: Sat, 31 May 2025 01:21:06 +0100 Subject: [PATCH 2/2] tests: add tests for task/function argument input/output copying --- tests/verilog/func_task_arg_copying.ys | 132 +++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 tests/verilog/func_task_arg_copying.ys diff --git a/tests/verilog/func_task_arg_copying.ys b/tests/verilog/func_task_arg_copying.ys new file mode 100644 index 000000000..e87c2781b --- /dev/null +++ b/tests/verilog/func_task_arg_copying.ys @@ -0,0 +1,132 @@ +# https://github.com/YosysHQ/yosys/issues/5157 +read_verilog -sv <