Arrays 系统Verilog数组缩减gotcha和参数数组
我正在努力学习系统verilog中的数组缩减技术。我写了以下模块:Arrays 系统Verilog数组缩减gotcha和参数数组,arrays,system-verilog,Arrays,System Verilog,我正在努力学习系统verilog中的数组缩减技术。我写了以下模块: module main; localparam [7:0]PARAM_ARR0[3:0] = '{8'h1,8'h3,8'h4,8'h0}; localparam [3:0]PARAM_ARR1[7:0] = '{4'h3,4'h2,4'h2,4'h2,4'h1,4'h1,4'h1,4'h1}; int s = 0; logic [7:0]arr0[3:0] = '{8'h1,8'h3,8'h4,8'h0}; logic [
module main;
localparam [7:0]PARAM_ARR0[3:0] = '{8'h1,8'h3,8'h4,8'h0};
localparam [3:0]PARAM_ARR1[7:0] = '{4'h3,4'h2,4'h2,4'h2,4'h1,4'h1,4'h1,4'h1};
int s = 0;
logic [7:0]arr0[3:0] = '{8'h1,8'h3,8'h4,8'h0};
logic [3:0]arr1[7:0] = '{4'h3,4'h2,4'h2,4'h2,4'h1,4'h1,4'h1,4'h1};
initial begin
//s = int'(PARAM_ARR0.sum() with (item.index<int'(PARAM_ARR1[0])?item:0));
//$display("sum0 = %0d",s);
//s = int'(PARAM_ARR0.sum() with (item.index<int'(PARAM_ARR1[4])?item:0));
//$display("sum1 = %0d",s);
s = int'(arr0.sum() with (item.index<int'(arr1[0])?item:0));
$display("sum0 = %0d",s);
s = int'(arr0.sum() with (item.index<int'(arr1[4])?item:0));
$display("sum1 = %0d",s);
s = int'(arr0.sum() with (item.index<int'(arr1[7])?item:0));
$display("sum2 = %0d",s);
end
endmodule
我希望结果分别是0、4和7。因为我试图得到arr0中索引分别小于arr1[0](1)、arr1[4](2)、arr1[7](3)的所有元素的总和
谢谢这在Questa 2019.2中对我很有用。你可能得跟你的EDA AE谈谈问题所在。Serge建议使用动态阵列: 另外,看起来您的代码给出了您在Questa中期望的结果
# Loading sv_std.std
# Loading work.main(fast)
# run -all
# sum0 = 0
# sum1 = 4
# sum0 = 0
# sum1 = 4
# sum2 = 7
# quit -f
# End time: 11:17:11 on May 23,2019, Elapsed time: 0:00:21
# Errors: 0, Warnings: 0
vcs是正确的。从基本数据类型创建的数组没有任何与之关联的函数。因此,
.sum()
在那里是非法的。请尝试使用动态数组。谢谢您提供的信息。无法访问Questa或NC Sim卡进行尝试。我要和他谈谈。
sum0 = 1
sum1 = 4
sum2 = 8
# Loading sv_std.std
# Loading work.main(fast)
# run -all
# sum0 = 0
# sum1 = 4
# sum0 = 0
# sum1 = 4
# sum2 = 7
# quit -f
# End time: 11:17:11 on May 23,2019, Elapsed time: 0:00:21
# Errors: 0, Warnings: 0