реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Тонкость со счетчиком
shtunder
сообщение Jul 15 2014, 15:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 14-07-14
Пользователь №: 82 243



Доброго времени суток!
Я создаю 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 и непонятно, во что они преобразуются после синтеза.

Верно ли это???
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jul 15 2014, 16:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Если уж Вы написали в списке чувствительности процесса c_in, то и в теле его же, а не clk.
Про переменные - известно, во что они синтезируются, но нужно это хорошо понимать. С сигналами гораздо проще. В данном случае использование сигналов обязательно.
Go to the top of the page
 
+Quote Post
DuHast
сообщение Jul 15 2014, 16:30
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(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;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016