【发布时间】:2022-01-22 19:40:55
【问题描述】:
`define NUM 100
program test;
function automatic int sum(int n);
if(n <= 1)
return n;
else
return n + sum(n-1);
endfunction
initial begin
$display("sum(%0d)=%d",`NUM, sum(`NUM));
end
endprogram
上面是一段代码,它对从 1 到 NUM 的增量整数的总和进行了递归练习。当我在 EDA 操场上的 vcs/xcelium/Questa 中运行它时,结果符合预期。
sum(100)= 5050
但是,当我尝试对 function int sum(int n) 的生命周期进行修改时:
program test;
function int sum(int n);
if(n <= 1)
return n;
else
return n + sum(n-1);
endfunction
initial begin
$display("sum(%0d)=%d",`NUM, sum(`NUM));
end
endprogram
结果很有趣:
VCS : sum(100)= 100
Cadence xcelium: sum(100)= 5050
Questa : sum(100)= 5050
我回到 IEEE1800-2017 以找出程序块中方法的默认生命周期,但我没有得到明确的描述。有人能帮我澄清一下吗?
【问题讨论】: