Verilog:值与数组范围不匹配,模拟不匹配

时间:2014-03-06 05:33:02

标签: verilog xilinx hdl

以下代码据我所知正确合成和模拟,但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中的错误吗?

1 个答案:

答案 0 :(得分:5)

我创建了example on EDAplayground,它在没有警告的情况下运行。

我通常不会使用parameter s的宽度,如果你这样做,你可能希望与reg定义保持一致。

尝试:

  1. parameter data = 48'h123456789ABC;
  2. parameter [47:0] data = 48'h123456789ABC;
  3. 我认为我以前没有以这种方式使用参数,但声明常量reg意味着相同的逻辑,这可能会避免警告。

    1. reg [47:0] data = 48'h123456789ABC;
    2. 注意:优良作法是使用大写字母表示常量(parameterlocalparam)。

      或者转换为案例陈述:

      always @* begin
        case (sel)
          3'd0: data_out = 6'dx;
          3'd1: data_out = 6'dx;
          // ...
          default :  data_out = 6'd0;
        endcase
      end