在 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
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