iverilog递归函数导致分段错误

iverilog recursive function causes segmentation fault

这是有问题的代码:

function automatic [31:0] W;
    input [6:0] param;
    W = (param<16) ? 32'b0 : W(param-7);
endfunction

基本上,iverilog (Icarus Verilog) 只会给我一个 Segmentation fault: 11 vvp svsim 错误。
我尝试了一些调试,它似乎不喜欢递归,即使我有一个递归锚。
不过从内部调用函数不是问题。也测试过。
感谢您的帮助!

编辑:
这里有一段代码调用此函数失败:

always @(negedge clk) begin
    t1 <= W(j);
end

将您的代码更改为

function automatic [31:0] W (input [6:0] param);
    if (param>=16)
       W = W(param-7);
    else
       W = 0;
endfunction

这样如果参数未知,就不会无限递归。

如果您提供了有效的输入,那么您应该看不到任何段错误。如果您仍然看到,则需要与工具供应商核实。

正如@sharvil111 所建议的,我当时传递的值是 1'bX。
所以我确保在调用之前将其设置为 0。
感谢您的其他建议,但例如@dave_59 所说的对我来说没有用,因为 param 不是太小,只是还没有定义。