mirror of https://github.com/YosysHQ/yosys.git
sv: complete support for implied task/function port directions
This commit is contained in:
parent
48d0aeb094
commit
75abd90829
|
@ -884,7 +884,11 @@ task_func_args:
|
||||||
|
|
||||||
task_func_port:
|
task_func_port:
|
||||||
attr wire_type range {
|
attr wire_type range {
|
||||||
|
bool prev_was_input = true;
|
||||||
|
bool prev_was_output = false;
|
||||||
if (albuf) {
|
if (albuf) {
|
||||||
|
prev_was_input = astbuf1->is_input;
|
||||||
|
prev_was_output = astbuf1->is_output;
|
||||||
delete astbuf1;
|
delete astbuf1;
|
||||||
if (astbuf2 != NULL)
|
if (astbuf2 != NULL)
|
||||||
delete astbuf2;
|
delete astbuf2;
|
||||||
|
@ -893,6 +897,12 @@ task_func_port:
|
||||||
albuf = $1;
|
albuf = $1;
|
||||||
astbuf1 = $2;
|
astbuf1 = $2;
|
||||||
astbuf2 = checkRange(astbuf1, $3);
|
astbuf2 = checkRange(astbuf1, $3);
|
||||||
|
if (!astbuf1->is_input && !astbuf1->is_output) {
|
||||||
|
if (!sv_mode)
|
||||||
|
frontend_verilog_yyerror("task/function argument direction missing");
|
||||||
|
astbuf1->is_input = prev_was_input;
|
||||||
|
astbuf1->is_output = prev_was_output;
|
||||||
|
}
|
||||||
} wire_name |
|
} wire_name |
|
||||||
{
|
{
|
||||||
if (!astbuf1) {
|
if (!astbuf1) {
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
module gate(w, x, y, z);
|
||||||
|
function automatic integer bar(
|
||||||
|
integer a
|
||||||
|
);
|
||||||
|
bar = 2 ** a;
|
||||||
|
endfunction
|
||||||
|
output integer w = bar(4);
|
||||||
|
|
||||||
|
function automatic integer foo(
|
||||||
|
input integer a, /* implicitly input */ integer b,
|
||||||
|
output integer c, /* implicitly output */ integer d
|
||||||
|
);
|
||||||
|
c = 42;
|
||||||
|
d = 51;
|
||||||
|
foo = a + b + 1;
|
||||||
|
endfunction
|
||||||
|
output integer x, y, z;
|
||||||
|
initial x = foo(1, 2, y, z);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module gold(w, x, y, z);
|
||||||
|
output integer w = 16, x = 4, y = 42, z = 51;
|
||||||
|
endmodule
|
|
@ -0,0 +1,6 @@
|
||||||
|
read_verilog -sv func_port_implied_dir.sv
|
||||||
|
hierarchy
|
||||||
|
proc
|
||||||
|
equiv_make gold gate equiv
|
||||||
|
equiv_simple
|
||||||
|
equiv_status -assert
|
Loading…
Reference in New Issue