范围溢出如何影响模拟和综合?

时间:2015-02-28 03:12:50

标签: verilog

module dut ( a,b_out,array,c);
input [2:0] a;
input [3:0] array;
input       c;
output reg  b_out;
always@( a or c or array) begin
  if(c)
    b_out = 1'b0;
  else
  b_out = array[a]; 
  end
endmodule

上述RTL中可能存在范围溢出,它如何影响模拟和合成?

1 个答案:

答案 0 :(得分:3)

a > 3!c然后b_out在模拟中为undef时,因为对向量的越界访问会返回undef(即1'bx)。参见IEEE Std 1364-2005中的5.2.1:

  

任何类型的部分选择,用于处理一系列位   完全超出了net,reg,integer,time的地址范围   变量,或参数或部分选择是x或z应产生   读取时的值x,对存储的数据没有影响   书面。当部分选择部分超出范围时   读取,返回x表示超出范围的位,并且何时   写入,只影响范围内的位。

在综合中,这种不关心的东西将被转化为综合工具认为最有效的东西。很可能这意味着a中仅使用array[a]的底部两位,即它与array[a[1:0]]相同。但是无法保证这一点,并且创建一个例如在a[2]为高时始终返回1或0的电路同样正确。