systemVeilog - 传递未知大小的数组

时间:2016-12-18 13:51:58

标签: function system-verilog dynamic-arrays

我有以下功能:

ViewController

我通过以下方式调用该函数:

ViewController

data_bit可以是: 位[1:0] /位[2:0] /位[3:0] /位[4:0] /位[5:0]等...

当我尝试编译时,我收到以下错误:  “[”附近:语法错误,意外[,期待IDENTIFIER或TYPE_IDENTIFIER或NETTYPE_IDENTIFIER。

1 个答案:

答案 0 :(得分:1)

[*]不是动态数组的正确语法,请使用[]

您的数组只能在解压缩维度中动态显示。因此,您不能拥有bit [] mem_array,但必须拥有bit mem_array[]

最后,使用按引用传递的函数不能具有静态生存期。也就是说,它必须声明为自动

function automatic void foo_arr_bit (int seed, ref bit mem[], string  mem_name);
  for (int i=0; i< mem.size(); i++)
    mem[i] = my_randomize_int(seed, mem[i], mem_name);     
endfunction: foo_arr_bit

编辑:但即使有了这些变化,您也面临着更大的问题。通过引用传递要求非常严格的打字。没有允许转换,所以我希望类型转换存在问题。

此外,在您的情况下,通过引用传递并不是必需的。请改用inout

function automatic void foo_arr_bit (input int seed, string  mem_name, inout bit mem[]);
  for (int i=0; i< mem.size(); i++)
    mem[i] = my_randomize_int(seed, mem[i], mem_name);
endfunction: foo_arr_bit