mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
Merge pull request #2586 from zachjs/tern-recurse
verilog: support recursive functions using ternary expressions
This commit is contained in:
commit
01ccb80b70
5 changed files with 195 additions and 19 deletions
70
tests/various/fib_tern.v
Normal file
70
tests/various/fib_tern.v
Normal file
|
@ -0,0 +1,70 @@
|
|||
module gate(
|
||||
off, fib0, fib1, fib2, fib3, fib4, fib5, fib6, fib7, fib8, fib9
|
||||
);
|
||||
input wire signed [31:0] off;
|
||||
|
||||
function automatic blah(
|
||||
input x
|
||||
);
|
||||
blah = x;
|
||||
endfunction
|
||||
|
||||
function automatic integer fib(
|
||||
input integer k
|
||||
);
|
||||
fib = k == 0
|
||||
? 0
|
||||
: k == 1
|
||||
? 1
|
||||
: fib(k - 1) + fib(k - 2);
|
||||
endfunction
|
||||
|
||||
function automatic integer fib_wrap(
|
||||
input integer k,
|
||||
output integer o
|
||||
);
|
||||
o = off + fib(k);
|
||||
endfunction
|
||||
|
||||
output integer fib0;
|
||||
output integer fib1;
|
||||
output integer fib2;
|
||||
output integer fib3;
|
||||
output integer fib4;
|
||||
output integer fib5;
|
||||
output integer fib6;
|
||||
output integer fib7;
|
||||
output integer fib8;
|
||||
output integer fib9;
|
||||
|
||||
initial begin : blk
|
||||
integer unused;
|
||||
unused = fib_wrap(0, fib0);
|
||||
unused = fib_wrap(1, fib1);
|
||||
unused = fib_wrap(2, fib2);
|
||||
unused = fib_wrap(3, fib3);
|
||||
unused = fib_wrap(4, fib4);
|
||||
unused = fib_wrap(5, fib5);
|
||||
unused = fib_wrap(6, fib6);
|
||||
unused = fib_wrap(7, fib7);
|
||||
unused = fib_wrap(8, fib8);
|
||||
unused = fib_wrap(9, fib9);
|
||||
end
|
||||
endmodule
|
||||
|
||||
module gold(
|
||||
off, fib0, fib1, fib2, fib3, fib4, fib5, fib6, fib7, fib8, fib9
|
||||
);
|
||||
input wire signed [31:0] off;
|
||||
|
||||
output integer fib0 = off + 0;
|
||||
output integer fib1 = off + 1;
|
||||
output integer fib2 = off + 1;
|
||||
output integer fib3 = off + 2;
|
||||
output integer fib4 = off + 3;
|
||||
output integer fib5 = off + 5;
|
||||
output integer fib6 = off + 8;
|
||||
output integer fib7 = off + 13;
|
||||
output integer fib8 = off + 21;
|
||||
output integer fib9 = off + 34;
|
||||
endmodule
|
6
tests/various/fib_tern.ys
Normal file
6
tests/various/fib_tern.ys
Normal file
|
@ -0,0 +1,6 @@
|
|||
read_verilog fib_tern.v
|
||||
hierarchy
|
||||
proc
|
||||
equiv_make gold gate equiv
|
||||
equiv_simple
|
||||
equiv_status -assert
|
Loading…
Add table
Add a link
Reference in a new issue