【Verilog数字系统设计——用任务和函数实现斐波纳契数列求值】
题目
1 分别用任务和函数实现斐波纳契数列求职;
2 斐波纳契数列递归的方法定义如下:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2);
3 注意在实验中认真区分理解任务和函数异同;
4 实验提交Verilog设计文件(.v文件)、仿真波形截图文件打包,压缩包以自己的学号+姓名命名;
代码
module sequence_eval_task(out,in);
input [3:0]in;
output reg [7:0]out;
integer i;
always @(in)
begin
fibo(out,in);
end
task fibo(output[7:0]result,input [3:0]n);
reg[7:0]fibo1;
reg[7:0]fibo0;
if(n==0)
result=0;
else if (n==1)
result=1;
else
begin
fibo1=1;
fibo0=0;
for(i=n;i>1;i=i-1)
begin
result=fibo1+fibo0;
fibo0=fibo1;
fibo1=result;
end
end
endtask
endmodule
//F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)
module sequence_eval_test;
reg [3:0] in_t;
wire[7:0] out_t;
sequence_eval_func sequence_eval_func(.out(out_t1),.in(in_t));
sequence_eval_task sequence_eval_task(.out(out_t2),.in(in_t));
initial
begin
in_t=0;
end
always #10 in_t=in_t+1;
Endmodule
module sequence_eval_func(out,in);
input [3:0]in;
output reg [7:0]out;
integer i;
always @(in)
begin
out=fibofun(in);
end
function [7:0]fibofun;
input [3:0]n;
reg[7:0]fibo1;
reg[7:0]fibo0;
if(n==0)
fibofun=0;
else if (n==1)
fibofun=1;
else
begin
fibo1=1;
fibo0=0;
for(i=n;i>1;i=i-1)
begin
fibofun=fibo1+fibo0;
fibo0=fibo1;
fibo1=fibofun;
end
end
endfunction
endmodule