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

verilog из наглядного i<=i+1 счетчика синтезировать быстрый

1 минуту назад, sorok-odin сказал:

Думается мне, если заданный диапазон не кратен степени двойки, счетчик скорее всего обнулится позже, при превышении диапазона созданного вектора. К примеру, если диапазон был 0..12, то обнуление 4-битного вектора будет после значения 15. Т.е. не "всё хорошо".

Вы правильно думаете. :good:

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


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

8 минут назад, blackfin сказал:

А если ещё напрячься и почитать стандарт IEEE Std 1364, то на стр. 32 можно увидеть замечательную фразу:

Так что формально, делать счетчик на integer нельзя.

Где Вы увидели запрет. Если Вы понимаете что пишите и как это синтезируется, то хоть в перечисляемых типах пишите.

Цитата

Думается мне, если заданный диапазон не кратен степени двойки, счетчик скорее всего обнулится позже, при превышении диапазона созданного вектора. К примеру, если диапазон был 0..12, то обнуление 4-битного вектора будет после значения 15. Т.е. не "всё хорошо".

Нормальный симулятор сразу-же пошлет. И правильно сделает. В VHDL не просто так строгая типизация была придумана. Жаль что большинство разработчиков применяют везде только std_logic\std_logic_vector.

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


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

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

Но хочу обратить ваше внимание на строчку  cnt <= cnt + "1"; 

Наша единичка в кавычках заключена не просто так. А потому-что ранее счетчик объявлен как 


signal cnt : unsigned(max_width - 1 downto 0) := (others => '0');

Ибо я ярый поклонник библиотеки IEEE.numeric_std.all; И никаких сторонних библиотек у меня найти невозможно. Ну разве что в исключительных случаях пользую    IEEE.math_real.all

Это другое дело.

Тем не менее, никаких граблей в моём коде нет, он рабочий. Библиотека самая что ни на есть дефолтная ieee.std_logic_1164.all.

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


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

7 minutes ago, Flip-fl0p said:

 Где Вы увидели запрет. Если Вы понимаете что пишите и как это синтезируется, то хоть в перечисляемых типах пишите.

Так это как раз то, за что постоянно критикуют Verilog - недостаточно строгая типизация. В итоге, один понимает под типом integer одно, а другой - другое. А потом Боинги падают в море.

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


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

9 минут назад, blackfin сказал:

А если ещё напрячься и почитать стандарт IEEE Std 1364, то на стр. 32 можно увидеть замечательную фразу

А если напрячься два раза, то можно заметить, что речь давно уже идет за VHDL, к которому стандарт IEEE Std 1364 совсем не при делах:)))

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


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

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

Нормальный симулятор сразу-же пошлет. И правильно сделает. В VHDL не просто так строгая типизация была придумана. Жаль что большинство разработчиков применяют везде только std_logic\std_logic_vector.

На поведенческом моделировании - пошлет конечно, а на временном после P&R уже не факт, не уверен.

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


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

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

Нормальный симулятор сразу-же пошлет.

Даже если не пошлёт, счётчик без условия сброса, всё же, ИМХО стоит использовать в редких случаях.

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


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

8 minutes ago, Самурай said:

А если напрячься два раза, то можно заметить, что речь давно уже идет за VHDL, к которому стандарт IEEE Std 1364 совсем не при делах:)))

Тогда напрягитесь три раза и сходите по ссылке: вопрос MrGalaxy

Quote

Коллеги, позвольте нубский вопрос.

У ТС простой счётчик i на 4 разряда, я в таких случаях обхожусь без if:

...

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

 

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


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

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

Но хочу обратить ваше внимание на строчку  cnt <= cnt + "1"; 

Наша единичка в кавычках заключена не просто так. А потому-что ранее счетчик объявлен как 


signal cnt : unsigned(max_width - 1 downto 0) := (others => '0');

Ибо я ярый поклонник библиотеки IEEE.numeric_std.all;

Взгляд зацепился за выделенное и возник вопрос: а разве библиотека numeric_std мешает писать единичку без кавычек в данном случае (да и в других тоже) ?:)

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


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

4 минуты назад, blackfin сказал:

Тогда напрягитесь три раза и сходите по ссылке: вопрос MrGalaxy

Там в ответах упор на Верилог не делался. Мне писали, что такой код в принципе не работоспособен.

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

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


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

1 минуту назад, blackfin сказал:

Тогда напрягитесь три раза

Четыре, Вы должны в таком случае напрячься четыре раза, ибо Вы отвечали andrew_b, который речь толкал именно про VHDL:)

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


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

2 minutes ago, Самурай said:

Четыре, Вы должны в таком случае напрячься четыре раза, ибо Вы отвечали andrew_b, который речь толкал именно про VHDL:)

Из чего это следует? Давайте конкретную цитату из поста andrew_b..

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


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

4 минуты назад, blackfin сказал:

Из чего это следует?

Читайте внимательно эту тему и тему, на которую дал ссылку MrGalaxy. И таких вопрос тогда не возникнет:)

Изменено пользователем Самурай

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


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

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

Взгляд зацепился за выделенное и возник вопрос: а разве библиотека numeric_std мешает писать единичку без кавычек в данном случае (да и в других тоже) ?:)

А я уже и забыл про то, что так можно. Я просто давно для себя решил что для сетчиков в типе unsigned буду писать инкремент в кавычках. Как напоминание, что это unsigned тип.

Т.е для integer\natural у меня только cnt <= cnt + 1

Для типа unsigned у меня только cnt <= cnt + "1"

Хотя Вы правы абсолютно. Ничего не запрещает для unsigned писать так: cnt <= cnt + 1

Цитата

Так это как раз то, за что постоянно критикуют Verilog - недостаточно строгая типизация. В итоге, один понимает под типом integer одно, а другой - другое. А потом Боинги падают в море.

По работе приходится сталкиваться с Verilog. Мало того, что постоянные begin end уродуют код. Так ещё он позволяет соединять между собой шины разных разрядностей. А вот этого я ему простить не могу. Ибо искать такие ошибки крайне трудно и долго. А они нет, нет, да и проскочат....

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


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

2 minutes ago, Самурай said:

Читайте внимательно эту тему и тему, на которую дал ссылку MrGalaxy. И таких вопрос тогда не возникнет:)

Прочитал. Вопросы все еще возникают. Прямая цитата на andrew_b будет? Или продолжаем трёп?

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


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

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

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

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

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

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

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

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

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

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