Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тонкость со счетчиком
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
shtunder
Доброго времени суток!
Я создаю 30 разрядный счетчик.

Код
architecture count of counter is -- архитектура данного счетчика
begin
  process (c_in, res_c)
  variable cnt : integer range 0 to 1073741824;
  begin
    if (res_c='0') then
      cnt:=0;
    elsif (rising_edge(clk)) then
      if (enab_c='1') then
        cnt:=cnt+1;
     end if;
   end if;
c_out<=cnt;
end process;
end count;


c_in => clk,
enab_c => enab, -- разрешение счета
res_c => res, --сброс
c_out => counter_out --выход


Вот что мне ответили:
Цитата
Советую переменные не использовать вообще. Только сигналы. Переменные использовать можно, но они видны через ChipScope и непонятно, во что они преобразуются после синтеза.

Верно ли это???
Alex11
Если уж Вы написали в списке чувствительности процесса c_in, то и в теле его же, а не clk.
Про переменные - известно, во что они синтезируются, но нужно это хорошо понимать. С сигналами гораздо проще. В данном случае использование сигналов обязательно.
DuHast
Цитата(shtunder @ Jul 15 2014, 19:58) *
variable cnt : integer range 0 to 1073741824;

Смущает эта строка.
1073741824 = b 1000000000000000000000000000000 - 31 разряд.

симулятор выдаст Вам ошибку, когда досчитает до 1073741824 (если дождётесь),
а фиттер создаст 31 разрядный счётчик, который будет считать до 2^31-1, т.е. до 2147483647.

Замените 1073741824 на 1073741823 = 2^30-1, а лучше используйте std_logic_vector вместо integer. Тогда и симулятор ругаться не будет.
А переменную использовать можно, вы же потом присваиваете её значение сигналу.

Цитата(shtunder @ Jul 15 2014, 19:58) *
c_out<=cnt;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.