Jump to content
    

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Цитата

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

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

7 minutes ago, Flip-fl0p said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Quote

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

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

...

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

 

Share this post


Link to post
Share on other sites

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

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

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


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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Edited by MrGalaxy

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Edited by Самурай

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Цитата

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...