MrGalaxy 10 April 7, 2020 Posted April 7, 2020 · Report post 1 минуту назад, sorok-odin сказал: Думается мне, если заданный диапазон не кратен степени двойки, счетчик скорее всего обнулится позже, при превышении диапазона созданного вектора. К примеру, если диапазон был 0..12, то обнуление 4-битного вектора будет после значения 15. Т.е. не "всё хорошо". Вы правильно думаете. Quote Share this post Link to post Share on other sites More sharing options...
Flip-fl0p 4 April 7, 2020 Posted April 7, 2020 · Report post 8 минут назад, blackfin сказал: А если ещё напрячься и почитать стандарт IEEE Std 1364, то на стр. 32 можно увидеть замечательную фразу: Так что формально, делать счетчик на integer нельзя. Где Вы увидели запрет. Если Вы понимаете что пишите и как это синтезируется, то хоть в перечисляемых типах пишите. Цитата Думается мне, если заданный диапазон не кратен степени двойки, счетчик скорее всего обнулится позже, при превышении диапазона созданного вектора. К примеру, если диапазон был 0..12, то обнуление 4-битного вектора будет после значения 15. Т.е. не "всё хорошо". Нормальный симулятор сразу-же пошлет. И правильно сделает. В VHDL не просто так строгая типизация была придумана. Жаль что большинство разработчиков применяют везде только std_logic\std_logic_vector. Quote Share this post Link to post Share on other sites More sharing options...
MrGalaxy 10 April 7, 2020 Posted April 7, 2020 · Report post 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. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 59 April 7, 2020 Posted April 7, 2020 · Report post 7 minutes ago, Flip-fl0p said: Где Вы увидели запрет. Если Вы понимаете что пишите и как это синтезируется, то хоть в перечисляемых типах пишите. Так это как раз то, за что постоянно критикуют Verilog - недостаточно строгая типизация. В итоге, один понимает под типом integer одно, а другой - другое. А потом Боинги падают в море. Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 April 7, 2020 Posted April 7, 2020 · Report post 9 минут назад, blackfin сказал: А если ещё напрячься и почитать стандарт IEEE Std 1364, то на стр. 32 можно увидеть замечательную фразу А если напрячься два раза, то можно заметить, что речь давно уже идет за VHDL, к которому стандарт IEEE Std 1364 совсем не при делах:))) Quote Share this post Link to post Share on other sites More sharing options...
sorok-odin 5 April 7, 2020 Posted April 7, 2020 · Report post 6 минут назад, Flip-fl0p сказал: Нормальный симулятор сразу-же пошлет. И правильно сделает. В VHDL не просто так строгая типизация была придумана. Жаль что большинство разработчиков применяют везде только std_logic\std_logic_vector. На поведенческом моделировании - пошлет конечно, а на временном после P&R уже не факт, не уверен. Quote Share this post Link to post Share on other sites More sharing options...
MrGalaxy 10 April 7, 2020 Posted April 7, 2020 · Report post 5 минут назад, Flip-fl0p сказал: Нормальный симулятор сразу-же пошлет. Даже если не пошлёт, счётчик без условия сброса, всё же, ИМХО стоит использовать в редких случаях. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 59 April 7, 2020 Posted April 7, 2020 · Report post 8 minutes ago, Самурай said: А если напрячься два раза, то можно заметить, что речь давно уже идет за VHDL, к которому стандарт IEEE Std 1364 совсем не при делах:))) Тогда напрягитесь три раза и сходите по ссылке: вопрос MrGalaxy Quote Коллеги, позвольте нубский вопрос. У ТС простой счётчик i на 4 разряда, я в таких случаях обхожусь без if: ... На Верилоге такое возможно? Посмотрел учебник, там переменная может быть только integer 32-разрядная. Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 April 7, 2020 Posted April 7, 2020 · Report post 11 минут назад, Flip-fl0p сказал: Но хочу обратить ваше внимание на строчку cnt <= cnt + "1"; Наша единичка в кавычках заключена не просто так. А потому-что ранее счетчик объявлен как signal cnt : unsigned(max_width - 1 downto 0) := (others => '0'); Ибо я ярый поклонник библиотеки IEEE.numeric_std.all; Взгляд зацепился за выделенное и возник вопрос: а разве библиотека numeric_std мешает писать единичку без кавычек в данном случае (да и в других тоже) ?:) Quote Share this post Link to post Share on other sites More sharing options...
MrGalaxy 10 April 7, 2020 Posted April 7, 2020 (edited) · Report post 4 минуты назад, blackfin сказал: Тогда напрягитесь три раза и сходите по ссылке: вопрос MrGalaxy Там в ответах упор на Верилог не делался. Мне писали, что такой код в принципе не работоспособен. Edited April 7, 2020 by MrGalaxy Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 April 7, 2020 Posted April 7, 2020 · Report post 1 минуту назад, blackfin сказал: Тогда напрягитесь три раза Четыре, Вы должны в таком случае напрячься четыре раза, ибо Вы отвечали andrew_b, который речь толкал именно про VHDL:) Quote Share this post Link to post Share on other sites More sharing options...
blackfin 59 April 7, 2020 Posted April 7, 2020 · Report post 2 minutes ago, Самурай said: Четыре, Вы должны в таком случае напрячься четыре раза, ибо Вы отвечали andrew_b, который речь толкал именно про VHDL:) Из чего это следует? Давайте конкретную цитату из поста andrew_b.. Quote Share this post Link to post Share on other sites More sharing options...
Самурай 13 April 7, 2020 Posted April 7, 2020 (edited) · Report post 4 минуты назад, blackfin сказал: Из чего это следует? Читайте внимательно эту тему и тему, на которую дал ссылку MrGalaxy. И таких вопрос тогда не возникнет:) Edited April 7, 2020 by Самурай Quote Share this post Link to post Share on other sites More sharing options...
Flip-fl0p 4 April 7, 2020 Posted April 7, 2020 · Report post 12 минут назад, Самурай сказал: Взгляд зацепился за выделенное и возник вопрос: а разве библиотека numeric_std мешает писать единичку без кавычек в данном случае (да и в других тоже) ?:) А я уже и забыл про то, что так можно. Я просто давно для себя решил что для сетчиков в типе unsigned буду писать инкремент в кавычках. Как напоминание, что это unsigned тип. Т.е для integer\natural у меня только cnt <= cnt + 1 Для типа unsigned у меня только cnt <= cnt + "1" Хотя Вы правы абсолютно. Ничего не запрещает для unsigned писать так: cnt <= cnt + 1 Цитата Так это как раз то, за что постоянно критикуют Verilog - недостаточно строгая типизация. В итоге, один понимает под типом integer одно, а другой - другое. А потом Боинги падают в море. По работе приходится сталкиваться с Verilog. Мало того, что постоянные begin end уродуют код. Так ещё он позволяет соединять между собой шины разных разрядностей. А вот этого я ему простить не могу. Ибо искать такие ошибки крайне трудно и долго. А они нет, нет, да и проскочат.... Quote Share this post Link to post Share on other sites More sharing options...
blackfin 59 April 7, 2020 Posted April 7, 2020 · Report post 2 minutes ago, Самурай said: Читайте внимательно эту тему и тему, на которую дал ссылку MrGalaxy. И таких вопрос тогда не возникнет:) Прочитал. Вопросы все еще возникают. Прямая цитата на andrew_b будет? Или продолжаем трёп? Quote Share this post Link to post Share on other sites More sharing options...