mirror of https://github.com/YosysHQ/yosys.git
sv: allow typenames as function return types
This commit is contained in:
parent
6a0d1e117d
commit
4f4e70876f
|
@ -861,6 +861,7 @@ task_func_decl:
|
||||||
outreg->children.push_back($4);
|
outreg->children.push_back($4);
|
||||||
outreg->is_signed = $4->is_signed;
|
outreg->is_signed = $4->is_signed;
|
||||||
$4->is_signed = false;
|
$4->is_signed = false;
|
||||||
|
outreg->is_custom_type = $4->type == AST_WIRETYPE;
|
||||||
}
|
}
|
||||||
current_function_or_task->children.push_back(outreg);
|
current_function_or_task->children.push_back(outreg);
|
||||||
current_function_or_task_port_id = 1;
|
current_function_or_task_port_id = 1;
|
||||||
|
@ -871,6 +872,11 @@ task_func_decl:
|
||||||
};
|
};
|
||||||
|
|
||||||
func_return_type:
|
func_return_type:
|
||||||
|
hierarchical_type_id {
|
||||||
|
$$ = new AstNode(AST_WIRETYPE);
|
||||||
|
$$->str = *$1;
|
||||||
|
delete $1;
|
||||||
|
} |
|
||||||
opt_type_vec opt_signedness_default_unsigned {
|
opt_type_vec opt_signedness_default_unsigned {
|
||||||
$$ = makeRange(0, 0, $2);
|
$$ = makeRange(0, 0, $2);
|
||||||
} |
|
} |
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
typedef logic [1:0] T;
|
||||||
|
|
||||||
|
package P;
|
||||||
|
typedef logic [3:0] S;
|
||||||
|
endpackage
|
||||||
|
|
||||||
|
module gate(
|
||||||
|
output wire [31:0] out1, out2
|
||||||
|
);
|
||||||
|
function automatic T func1;
|
||||||
|
input reg signed inp;
|
||||||
|
func1 = inp;
|
||||||
|
endfunction
|
||||||
|
assign out1 = func1(1);
|
||||||
|
function automatic P::S func2;
|
||||||
|
input reg signed inp;
|
||||||
|
func2 = inp;
|
||||||
|
endfunction
|
||||||
|
assign out2 = func2(1);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module gold(
|
||||||
|
output wire [31:0] out1, out2
|
||||||
|
);
|
||||||
|
function automatic [1:0] func1;
|
||||||
|
input reg signed inp;
|
||||||
|
func1 = inp;
|
||||||
|
endfunction
|
||||||
|
assign out1 = func1(1);
|
||||||
|
function automatic [3:0] func2;
|
||||||
|
input reg signed inp;
|
||||||
|
func2 = inp;
|
||||||
|
endfunction
|
||||||
|
assign out2 = func2(1);
|
||||||
|
endmodule
|
|
@ -0,0 +1,5 @@
|
||||||
|
read_verilog -sv func_typename_ret.sv
|
||||||
|
proc
|
||||||
|
equiv_make gold gate equiv
|
||||||
|
equiv_simple
|
||||||
|
equiv_status -assert
|
Loading…
Reference in New Issue