在verilog中,部分选择向量reg数组是非法的

时间:2016-02-24 17:39:09

标签: arrays filter signal-processing verilog xilinx

reg [data_width-1:0]coeff[0:order-1];
wire[3:0]lsbcoeff;
wire [7:4]msbcoeff;

 lsbcoeff = coeff[3:0];
 msbcoeff = coeff[7:4];

在上面的代码行中,我得到了错误

向量reg数组'coeff'的部分选择是非法的

阻止作业的非法右侧

请指导我,如何克服这个问题? Xilinx v14.2 Verilog编码

2 个答案:

答案 0 :(得分:2)

你将coeff定义为系数的向量,我不确定你期望coeff[3:0]返回什么? LSBS的矢量?我认为你想要的是coeff[0][3:0]选择第一个向量的LSB。下面的代码显示了这样做的可能方法:

module tb;

    localparam data_width = 8;
    localparam order      = 2;

    reg  [data_width-1:0]coeff[0:order-1];
    reg [3:0] lsbcoeff;
    reg [7:4] msbcoeff;
    reg [7:0] this_coeff;

    always @* begin
      lsbcoeff   = coeff[0][3:0];
      msbcoeff   = coeff[0][7:4];
    end

endmodule

现在我已经阅读了评论,我看到这是@Greg已经提出的建议。

答案 1 :(得分:0)

除@Morgan代码外,还应使用verilog中的assign语句为线路分配值。

always @(*) begin
  assign    lsbcoeff   = coeff[0][3:0];
  assign    msbcoeff   = coeff[0][7:4];
end