当整数超出VHDL范围时会发生什么?

时间:2013-12-18 16:39:17

标签: vhdl synthesis

假设您的信号定义如下:

signal test_count : integer range 0 to 11;

现在,如果test_count在模拟中低于0或高于11,则会导致模拟立即崩溃。我想知道的是合成时会发生什么?如果test_count增加到11或减少到0,会发生什么?合成工具会强制信号环绕吗?请注意,我选择了一个不能轻松回到0000的示例。

1 个答案:

答案 0 :(得分:8)

该工具假设信号在设计范围内,所以情况就是如此 如果不是这样,电路可以在内部总线上给出任何输出 实现整数值。在这种情况下,对于0到11,它将是一个4位总线, 如果设计没有将值保持在0到11的范围内,那么即使是“非法的” 在合成的电路中可以给出范围12到15的值。

此外,在值增加到11以上的情况下,应该是计数器 然后饱和,或包裹?它根本没有定义。

计数器的Altera QII的结果清楚如下:

architecture syn of mdl is  -- Counter with clear
  signal test_count : integer range 0 to 11;
begin

  process (clk_i) is
  begin
    if rising_edge(clk_i) then
      if clr_i = '1' then  -- Clear
        test_count <= 0;
      else  -- Increment
        test_count <= test_count + 1;
      end if;
    end if;
  end process;

  z_o <= std_logic_vector(to_unsigned(test_count, 4));

end architecture;

在此图中显示为RTL结果:

enter image description here

因此,在这种情况下,合成结果是一个4位计数器,具有增量和 通过信号clr_i选择的多路复用器的清除值,并且没有任何范围 校验。因此,如果控制clr_i信号的设计不能保持该值 在0到11的范围内,它可以输出声明范围0到11之外的值, 因此,即使是12到15的值。