当一个整数在VHDL中超出范围时会发生什么?

7
假设您有一个被定义如下的信号:
signal test_count : integer range 0 to 11;

现在,如果测试计数器在模拟过程中低于0或高于11,将立即导致模拟崩溃。我想知道的是,在综合时会发生什么?如果测试计数器增加到11以上或减少到0以下会发生什么?综合工具会强制该信号进行循环吗?请注意,我选择了一个不容易回归到0000的示例。
1个回答

12
工具默认信号设计在范围内,因此如果不是这种情况,电路可以在用于实现整数值的内部总线上给出任何输出。在这种情况下,对于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选择的mux作为增量和清除值,并且没有任何范围检查。因此,如果控制clr_i信号的设计未将值保持在0至11的范围内,则可能输出超出0至11声明范围的值,因此甚至包括12至15的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接