在 Verilog 中,向量 reg 数组的 Part-select 是非法的

In verilog Part-select of vector reg array is illegal

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' 的部分-select 是非法的

阻塞赋值的右侧非法

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

您将 coeff 定义为系数向量,我不确定您希望 coeff[3:0] 到 return 是什么? 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 已经建议的。

除了@Morgan 代码外,还应使用verilog 中的assign 语句为电线赋值。

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