mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 00:55:32 +00:00
Merge pull request #2518 from zachjs/recursion
verilog: improved support for recursive functions
This commit is contained in:
commit
bc2de4567c
4 changed files with 99 additions and 8 deletions
65
tests/various/fib.v
Normal file
65
tests/various/fib.v
Normal file
|
@ -0,0 +1,65 @@
|
|||
module gate(
|
||||
off, fib0, fib1, fib2, fib3, fib4, fib5, fib6, fib7, fib8, fib9
|
||||
);
|
||||
input wire signed [31:0] off;
|
||||
|
||||
function automatic integer fib(
|
||||
input integer k
|
||||
);
|
||||
if (k == 0)
|
||||
fib = 0;
|
||||
else if (k == 1)
|
||||
fib = 1;
|
||||
else
|
||||
fib = 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.ys
Normal file
6
tests/various/fib.ys
Normal file
|
@ -0,0 +1,6 @@
|
|||
read_verilog fib.v
|
||||
hierarchy
|
||||
proc
|
||||
equiv_make gold gate equiv
|
||||
equiv_simple
|
||||
equiv_status -assert
|
Loading…
Add table
Add a link
Reference in a new issue