Перейти к содержанию
    

Не понимаю код счётчика

5 minutes ago, dxp said:

Кстати, а вот тут может работа в 32-битных (интах) целых может оказаться эффективнее для симулятора - не надо эмулировать нестандартную ширину.

Может быть. Но для обычного logic это не сильно ускоряет, ведь  значений у каждого бита может быт 4.  Именно для этого и ввели bit и производный от него int. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ругаться на разрядость нужно и правильно. Ибо ошибки при переполнениях разрядностей - одни из самых сложно обнаруживаемых. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С чего это переполнение разрядности является ошибкой? Часто это штатное поведение - например, тот же банальный free-running counter.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, dxp сказал:

С чего это переполнение разрядности является ошибкой? Часто это штатное поведение - например, тот же банальный free-running counter.

Когда это осознано переполняется - это не ошибка. Как Ваш пример с счетчиком. Когда происходит переполнение из-за того, что разрядность была неверно рассчитана - то это очень больно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И как вы будете эти случаи различать?

 

А если по логике задания сигнал может быть только 5 и 10, а 7 и 2 быть не может, это ошибка, то как эту ситуацию обходить?

 

То, что вы хотите, на SV достигается с помощью SVA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 minutes ago, Flip-fl0p said:

Когда это осознано переполняется - это не ошибка. Как Ваш пример с счетчиком. Когда происходит переполнение из-за того, что разрядность была неверно рассчитана - то это очень больно.

Очень  больно это будет если не верифицировать дизайн,  а надеется что "...и так сойдет" и язык не даст ошибиться. :cray: И не только из за переполнения.  
В том то и проблема что формально синтезатору очень тяжело определить есть ли тут опасное переполнение или так и задумано дизайнером.
Отсюда разные подходы  - либо ошибкой считается все что явно не разрешено как в VHDL,  либо по умолчанию приведение разрядности как в V/SV (и максимум варнинг по желанию капризного тулза).
 
IMHO может подход VHDL и был оправдан в прошлом (или для очень ответственных применений со строгой формализацией), но в текущей действительности при развитии технологии и методик верификации дизайна и симуляторов как по мне получается лишняя работа и нагрузка разработчику. Которая перекрывается правильно организованной верификацией.


Популярность же обоих подходов среди разработчиков вы можете наблюдать по числу вакансий  для того или другого языка :biggrin:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 минуты назад, RobFPGA сказал:

Очень  больно это будет если не верифицировать дизайн,  а надеется что "...и так сойдет" и язык не даст ошибиться. :cray: И не только из за переполнения.  
В том то и проблема что формально синтезатору очень тяжело определить есть ли тут опасное переполнение или так и задумано дизайнером.
Отсюда разные подходы  - либо ошибкой считается все что явно не разрешено как в VHDL,  либо по умолчанию приведение разрядности как в V/SV (и максимум варнинг по желанию капризного тулза).
 
IMHO может подход VHDL и был оправдан в прошлом (или для очень ответственных применений со строгой формализацией), но в текущей действительности при развитии технологии и методик верификации дизайна и симуляторов как по мне получается лишняя работа и нагрузка разработчику. Которая перекрывается правильно организованной верификацией.


Популярность же обоих подходов среди разработчиков вы можете наблюдать по числу вакансий  для того или другого языка :biggrin:

 

VHDL местами сильно утомляет. Особенно строчки вида :

 

if (TX_ena = '1') then 
    PHS_TX_o(to_integer(CH_cnt))  <= std_logic_vector(unsigned(PHS_TX(to_integer(CH_cnt))) + PHS_cnt);
end if;

Хотелось бы конечно в VHDL иметь более простую и компактную запись как в SV/V

if (TX_ena = '1') then 
    PHS_TX_o[CH_cnt]  <= PHS_TX[CH_cnt] + PHS_cnt;
end if;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, dxp said:

А Quartus вполне приличный тул, и поддержка того же SV в нём началась раньше и была лучше, чем в Synplify

Так как я не сильно пользовался Квартусом, не могу предъявить сильные аргументы против него (но могу сказать, что Sinplify и вправду хорош).

Но ребята пользуются Альтеровскими чипами и говорят, что там даже банальное always_comb не работает как нужно (есть подозрение, что это про какие-то вложенные конструкции).

Из-за чего во всём коде после прототипинга стоят always@*, которые потом синтезируются трудноуловимыми Латчами.

Вот такие дела)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, Nick_K said:

Но ребята пользуются Альтеровскими чипами и говорят, что там даже банальное always_comb не работает как нужно (есть подозрение, что это про какие-то вложенные конструкции).

Из-за чего во всём коде после прототипинга стоят always@*, которые потом синтезируются трудноуловимыми Латчами.

99% понаделают структур, с разными присваиваниями полей, вот и не проходят проверку. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 минут назад, Flip-fl0p сказал:

VHDL местами сильно утомляет. Особенно строчки вида :

 


if (TX_ena = '1') then 
    PHS_TX_o(to_integer(CH_cnt))  <= std_logic_vector(unsigned(PHS_TX(to_integer(CH_cnt))) + PHS_cnt);
end if;

Просто интереса для: а что мешает сразу сделать CH_cnt типом integer, а PHS_TX типом unsigned?:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10.02.2022 в 14:17, МАСТЕР LO сказал:

По-скольку я начинающий, мне просто не хватает знаний, что бы понять код элементарного двоичного счётчика.

Рекомендую навернуть этот плейлист

https://www.youtube.com/playlist?list=PL4UMfOeGYsvblwrP3VYKHq11xgkxVqoUj

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, Самурай сказал:

Просто интереса для: а что мешает сразу сделать CH_cnt типом integer, а PHS_TX типом unsigned?:)

PHS_TX - формируется IP ядром virtual_IO. Тип данных std_logic_vector.

CH_cnt = это полный счетчик от 0 до 7. Описание такого счетчика через integer требует обязательного условия обнуления, иначе на моделировании будут выходить ошибки о том, что превышен диапазон:

CH_cnt <= CH_cnt + 1; -- Будет ошибка ухода за диапазон значений 0 to 7

 

Просто так писать нельзя, потому-что мы добавляем доп. условие сброса, которое синтезатор не выкинет, а оно по сути не нужно

if (CH_cnt = 7) then  -- Ошибки не будет. Но будет лишнее условие сброса, которое синтезатором не оптимизируется
    CH_cnt <= 0;
else
    CH_cnt <= CH_cnt + 1;
end if;

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, des00 said:

99% понаделают структур, с разными присваиваниями полей, вот и не проходят проверку. 

а чем грозит такой подход? у меня как раз в одном месте такое. Поля типа logic. Какие то поля делаю always (clk)  .field <= value_1, а какие то поля assign .field = value_2

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Flip-fl0p сказал:

PHS_TX - формируется IP ядром virtual_IO. Тип данных std_logic_vector.

CH_cnt = это полный счетчик от 0 до 7. Описание такого счетчика через integer требует обязательного условия обнуления, иначе на моделировании будут выходить ошибки о том, что превышен диапазон

Понятно, спасибо! С integer-ом известная проблема, но как по мне, лучше добавить проверку и сброс в самом счетчике, да и кратность степени двойки это частный случай, особенно если потом максимальное значение может быть изменено...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, Самурай сказал:

Понятно, спасибо! С integer-ом известная проблема, но как по мне, лучше добавить проверку и сброс в самом счетчике, да и кратность степени двойки это частный случай, особенно если потом максимальное значение может быть изменено...

Зачем усложнять систему ненужными вещами ? Просто приходится делать больше преобразований типов, от чего код становится некрасивым. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...