System verilog .sum()和.max()未包含在Systemverilog中?

System verilog .sum()和.max()未包含在Systemverilog中?,system-verilog,System Verilog,为什么错误会说sum/max“未在此前缀下声明”?我以为Systemverilog包含了这些数组缩减函数。我是否需要添加库或其他东西来使用它们? 代码如下: module compare_block (clk, result, data, led); parameter taps = 50; //number of fir filter taps parameter data_width = 8; //width of data input including sign bit

为什么错误会说sum/max“未在此前缀下声明”?我以为Systemverilog包含了这些数组缩减函数。我是否需要添加库或其他东西来使用它们? 代码如下:

module compare_block (clk, result, data, led);

    parameter taps = 50; //number of fir filter taps
    parameter data_width = 8; //width of data input including sign bit
    parameter coeff_width = 32; //width of coefficients including sign bit
    parameter size = 4096;

    
    input clk;
    input [(data_width + coeff_width + $clog2(taps) - 1):0] result; //from filter
    input [(data_width-1):0] data; //precalculated 1 Hz sine wave
    output led;
    
    reg [(data_width + coeff_width + $clog2(taps) - 1):0] filt_sig;
    reg [(data_width-1):0] comp_sig;
    reg [(data_width-1):0] ans_sig;
    
    integer i;
    integer ii;
    integer sum_array;
    integer array_avg;

        
    always @(posedge clk)
        begin
        filt_sig [(data_width + coeff_width + $clog2(taps) - 1):0]<= result[(data_width + coeff_width + $clog2(taps) - 1):0];
        comp_sig [(data_width-1):0]<= data[(data_width-1):0];
        end
        
    always @(*)
        begin
        for (i=0; i < size; i=i+1)
            ans_sig[i] = filt_sig[i] - comp_sig[i]; 
        end
        assign sum = ans_sig.sum(); //with (int'(item)) 
        assign array_avg = sum >> 'd12; //dividing by 4096 (size) to get mean of signal deviation
        
    integer max_array = ans_sig.max();
    integer error_val = 0.5*max_array;  
    always @(*)
        begin 
        if (array_avg < error_val) begin
            led <= 'b1; 
        end else begin
            led <= 'b0;
        end
    end
endmodule
模块比较\u块(时钟、结果、数据、led);
参数抽头=50//fir滤波器抽头数
参数数据_宽度=8//数据输入的宽度,包括符号位
参数coeff_width=32//系数的宽度,包括符号位
参数大小=4096;
输入时钟;
输入[(数据宽度+系数宽度+clog2(抽头)-1):0]结果//从过滤器
输入[(数据宽度-1):0]数据//预先计算的1Hz正弦波
输出led;
reg[(数据宽度+系数宽度+clog2(抽头)-1):0]过滤信号;
reg[(数据宽度-1):0]补偿信号;
reg[(数据宽度-1):0]ans\U sig;
整数i;
整数二;
整数和数组;
整数数组_平均值;
始终@(posedge clk)
开始

filt_sig[(数据宽度+系数宽度+$clog2(taps)-1):0]阵列缩减方法是为未打包的阵列定义的。您可以使用
$countones(ans\u sig)
代替
sum()
。我不确定您正在使用
max()
计算什么。可能您打算将
ansu sig
声明为未打包数组。

sum
max
是可用于未打包数组的方法;但您正在压缩阵列上使用它们。我不确定更改代码的最佳解决方案,但我不确定我是否完全理解它。