Verilog 矢量线部分选择中的最高有效位操作数是非法的

Verilog 矢量线部分选择中的最高有效位操作数是非法的,verilog,Verilog,我想在xilinix上用verilog制作一个参数化FIR滤波器。这是我的代码: module FIRFilter(xInput, clock, reset, filterCoeff, yOutput); parameter inputBits = 8, lengthOfFilter = 4, coeffBitLength = 8, lengthOfCoeff = lengthOfFilter + 1, outputBitWdth = 2 * inputBits; input [(coeffBi

我想在xilinix上用verilog制作一个参数化FIR滤波器。这是我的代码:

module FIRFilter(xInput, clock, reset, filterCoeff, yOutput);
parameter inputBits = 8, lengthOfFilter = 4, coeffBitLength = 8, lengthOfCoeff = lengthOfFilter + 1, outputBitWdth = 2 * inputBits;
input [(coeffBitLength * lengthOfCoeff) - 1 : 0] filterCoeff;
input clock, reset;
input [inputBits - 1 : 0] xInput;
reg [outputBitWdth - 1 : 0] addWires [lengthOfFilter - 1 : 0];
output reg [outputBitWdth - 1 : 0] yOutput;
reg [inputBits - 1 : 0] registers [lengthOfFilter - 1 : 0];
integer i, j;
always @ (posedge clock, posedge reset)
begin
    if(reset)
    begin
        for(i = 0; i < lengthOfFilter; i = i + 1)
        begin
            registers[i] <= 0;
        end
    end
    else
    begin
        registers[0] <= xInput;
        for(i = 1; i < lengthOfFilter; i = i + 1)
        begin
            registers[i] <= registers[i - 1];
        end
    end
end
always @ (posedge clock)
begin
    addWires[0] = filterCoeff[(lengthOfFilter * coeffBitLength) - 1 : (lengthOfFilter - 1) * coeffBitLength] * xInput;
    for(j = 1; j < lengthOfFilter; j = j + 1)
    begin
        addWires[j] = (filterCoeff[((j + 1) * coeffBitLength) - 1 : j * coeffBitLength] * registers[j - 1]) + addWires[j - 1];
    end
    yOutput = (filterCoeff[coeffBitLength - 1 : 0] * registers[lengthOfFilter - 1]) + addWires[lengthOfFilter - 1];
end
endmodule
我在网上搜索解决方案,但没有得到满意的答案。
有人能帮我一下吗?

Verilog不允许部分选择
信号[msb:lsb]
,其中
msb
lsb
不是常量。您可以使用另一种称为“索引零件选择”的构造,在该构造中,您可以指定恒定宽度,但可以指定可变偏移量
信号[offset+:width]

addWires[0] = filterCoeff[(lengthOfFilter * coeffBitLength) +:coeffBitLength] * xInput;
addWires[0] = filterCoeff[(lengthOfFilter * coeffBitLength) +:coeffBitLength] * xInput;