以下代码据我所知正确合成和模拟,但XST仍然提供以下警告: value(s) does not match array range, simulation mismatch.
我有什么遗漏?
使用的工具:Xilinx ISE Project Navigator(合成器:XST) FPGA:SPARTAN 3E
module error_example(
input [47:0] data,
input [2:0] sel,
output [5:0] data_out
);
assign data_out = data[sel*6 +: 6];
endmodule
WARNING:Xst:790 - "error_example.v" line 8: Index value(s) does not match array range, simulation mismatch.
就像我说的,这是有效的,我已经完成了数学运算:
sel
的值可以是0到7,
如果sel
为0,则data_out = data[5:0]
...
如果sel
为7,则为data_out = data[47:42]
我应该在这里采取不同的做法吗?这是XST中的错误吗?
答案 0 :(得分:5)
我创建了example on EDAplayground,它在没有警告的情况下运行。
我通常不会使用parameter
s的宽度,如果你这样做,你可能希望与reg定义保持一致。
尝试:
parameter data = 48'h123456789ABC;
parameter [47:0] data = 48'h123456789ABC;
我认为我以前没有以这种方式使用参数,但声明常量reg
意味着相同的逻辑,这可能会避免警告。
reg [47:0] data = 48'h123456789ABC;
注意:优良作法是使用大写字母表示常量(parameter
,localparam
)。
或者转换为案例陈述:
always @* begin
case (sel)
3'd0: data_out = 6'dx;
3'd1: data_out = 6'dx;
// ...
default : data_out = 6'd0;
endcase
end