iverilog/ivtest/ivltests/recursive_func1.v

44 lines
688 B
Coq
Raw Normal View History

module recursive_func();
function automatic [15:0] factorial;
input [15:0] n;
begin
factorial = (n > 1) ? factorial(n - 1) * n : n;
end
endfunction
reg [15:0] r1;
reg [15:0] r2;
reg [15:0] r3;
initial begin
fork
r1 = factorial(3);
r2 = factorial(4);
r3 = factorial(5);
join
$display("factorial 3 = %0d", r1);
$display("factorial 4 = %0d", r2);
$display("factorial 5 = %0d", r3);
end
wire [15:0] r4;
wire [15:0] r5;
wire [15:0] r6;
assign r4 = factorial(6);
assign r5 = factorial(7);
assign r6 = factorial(8);
initial begin
#1;
$display("factorial 6 = %0d", r4);
$display("factorial 7 = %0d", r5);
$display("factorial 8 = %0d", r6);
end
endmodule