RobFPGA 35 19 декабря, 2019 Опубликовано 19 декабря, 2019 · Жалоба Приветствую! О чем спорим? И я хочу 23 hours ago, Nick_K said: logic r_cnt = 0; wire s_cnt = r_cnt++; Плохой пример. Нельзя в continuous assignment использовать ++. Вообще в любом языке можно найти undefined behavioral или неоднозначности в реализации. Тем более в таком "гибком" как Verilog/SV. И разработчик должен знать где эти грабли лежат. Тем более для разных вариантов реализаций - симуляции и синтза. В примере TC: для сима вариант с cnt <= cnt++; не работает. Вернее перемененная cnt меняет свое значение на несколько delta циклов. Так как сначала запоминаем текущее значение cnt для неблокирующего присвоения, затем блокирующее изменяет актуальное значение cnt. И затем сразу же неблокирующее устанавливает запомненное значение. Но поймать event смены состояния cnt в симе при этом запросто, так что можно устроить коллегам веселый квест Вариант с cnt <= ++cnt; работает! и оно и понятно почему. Сначала блокирующее поменяли cnt, а потом еще раз присвоили себе же. Для синтеза же оба варианта понятное дело недопустимы. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 декабря, 2019 Опубликовано 19 декабря, 2019 · Жалоба 2 minutes ago, RobFPGA said: Плохой пример. Нельзя в continuous assignment использовать ++. А я и не использую) Задание было написать счётчик с конструкцией ++. В реальном коде я таким не страдаю, а тут написал как получилось. Опять же - на истинну не претендую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 19 декабря, 2019 Опубликовано 19 декабря, 2019 · Жалоба 1 час назад, Nick_K сказал: То есть Вас не смущает, что на синтезированной схеме физически будет именно 2 сигнала Нет, результат синтеза меня не мущает. Один и тот же результат можно получить из разного исходного кода. Зачем вместо "интуитивно понятной" конструкции вида always_ff @(posedge clk) r_cnt <= r_cnt + 1; писать нечто иное, мне непонятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 декабря, 2019 Опубликовано 19 декабря, 2019 · Жалоба 40 minutes ago, andrew_b said: Зачем вместо "интуитивно понятной" конструкции вида always_ff @(posedge clk) r_cnt <= r_cnt + 1; писать нечто иное, мне непонятно. Quote Мы же в контексте Верилога ведём обсуждение? Покажите правильный счётчик на Верилоге с использованием оператора ++? Как поставлено ТЗ, так и сделан проект Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 67 20 декабря, 2019 Опубликовано 20 декабря, 2019 · Жалоба 21 час назад, Nick_K сказал: Как поставлено ТЗ, так и сделан проект Э-э, пардоньте! Так называемое "ТЗ" возникло из вашей фразы: В 19.12.2019 в 13:47, Nick_K сказал: В Верилоге же всё донозначно и единообразно: i++ ровно как и ++i будет синтезированно в счётчик После чего вам и было предложено продемонстрировать счётчик на операторе ++, который реализует блокирующее присваивание в то время как реализация счётчика требует использования неблокирующего. Это был вопрос с подвохом на ваше утверждение (см. цитату), а никакое не "ТЗ". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 20 декабря, 2019 Опубликовано 20 декабря, 2019 · Жалоба 4 hours ago, dxp said: После чего вам и было предложено продемонстрировать счётчик на операторе ++, который реализует блокирующее присваивание в то время как реализация счётчика требует использования неблокирующего. Это было вопрос с подвохом на ваше утверждение (см. цитату), а никакое не "ТЗ". Так а в чем проблема написать always_ff @(posedge clk) cnt++; ? Будут, конечно, нюансы использования этого cnt, но сам по себе это будет вполне счетчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 67 20 декабря, 2019 Опубликовано 20 декабря, 2019 · Жалоба 28 минут назад, alexadmin сказал: Так а в чем проблема написать Написать не проблема. Проблемы могут возникать из-за того, что блокирующие присваивания используются для описания последовательсной логики. Выше уважаемый @RobFPGAуже объяснил разницу. Обновление этого счётчика будет происходить не как положено в NBA регионе планировщика, а в Active регионе, из-за чего могут возникать очень подлые косяки на синхронизации. Конкретно я столкнулся с такой ситуацией. Причины проблем и пояснения там в последнем посте. Если не хочется себе проблем на разные места, лучше соблюдать правила, их же не просто так придумали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться