【问题标题】:What happens when an integer goes out of range in VHDL?当整数超出 VHDL 的范围时会发生什么?
【发布时间】:2013-12-18 16:39:16
【问题描述】:

假设您有一个信号定义如下:

signal test_count : integer range 0 to 11;

现在,如果 test_count 在模拟中低于 0 或高于 11,它将导致模拟立即崩溃。我想知道的是,当它被合成时会发生什么?如果 test_count 增加超过 11 或减少到 0 以下会怎样?综合工具会强制信号回绕吗?请注意,我选择了一个不容易返回到 0000 的示例。

【问题讨论】:

    标签: vhdl synthesis


    【解决方案1】:

    该工具假定信号保持在设计范围内,因此这种情况 如果这不是真的,电路可以在内部总线上提供任何输出,用于 实现整数值。在这种情况下,对于 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 结果:

    所以在这种情况下,综合结果是一个 4 位计数器,具有递增和 从信号 clr_i 选择的 mux 中清除值,并且没有任何范围 查看。因此,如果控制clr_i 信号的设计没有保持该值 在 0 到 11 的范围内,它可能会输出声明的 0 到 11 范围之外的值, 因此偶数在 12 到 15 之间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多