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编码
答案 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