Что происходит, когда целое число выходит за пределы диапазона в VHDL?

Допустим, у вас есть сигнал, определенный следующим образом:

signal test_count : integer range 0 to 11;

Теперь, если test_count когда-либо опускается ниже 0 или выше 11 в симуляции, это немедленно приведет к сбою симуляции. Что мне интересно, что происходит, когда это синтезируется? Что произойдет, если test_count увеличивается после 11 или уменьшается ниже 0? Будут ли инструменты синтеза заставлять сигнал оборачиваться? Обратите внимание, что я выбрал пример, в котором нелегко вернуться к 0000.

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и без какой-либо проверки диапазона. Так что, если дизайн, контролирующий clr_i Сигнал не сохраняет значение в диапазоне от 0 до 11, он может выводить значения вне заявленного диапазона от 0 до 11, таким образом, даже значения в диапазоне от 12 до 15.

Другие вопросы по тегам