ianpo 0 31 июля Опубликовано 31 июля (изменено) · Жалоба Собственно, такой код, будет ли он корректно работать? reg A,B; if ( A == 1'b1 && B == 1'b0 ) действие1; else if ( A == 1'b1 && B == 1'b1 ) действие2; Меня смущает что во втором if A проверяется на ==1, будет ли оно проверяться или считается, что здесь A==0. По идее, надо делать общий if с проверкой A, а внутри проверять только B. Если сигналов много, то это затруднительно, поэтому вопрос (извините, если глупый). Изменено 31 июля пользователем ianpo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slkhome 0 31 июля Опубликовано 31 июля · Жалоба Будет Только нужно дописать always .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 31 июля Опубликовано 31 июля · Жалоба Соревноваться в оптимизации логических функций с синтезаторои бессмысленно. Он это сделает лучше вас. Пишите понятный человекочитаемый код. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 31 июля Опубликовано 31 июля · Жалоба 8 часов назад, ianpo сказал: Собственно, такой код, будет ли он корректно работать? reg A,B; if ( A == 1'b1 && B == 1'b0 ) действие1; else if ( A == 1'b1 && B == 1'b1 ) действие2; Меня смущает что во втором if A проверяется на ==1, будет ли оно проверяться или считается, что здесь A==0. По идее, надо делать общий if с проверкой A, а внутри проверять только B. Если сигналов много, то это затруднительно, поэтому вопрос (извините, если глупый). Это конструкция нежизнеспособна. И конструкция по идее тоже нежизнеспособна. Результаты будут разные, а какие сходу никто не скажет. Вы схему какую хотите получить. На базе д триггера или на базе д триггера с входом ena? На вход ena Вы хотите подать только а, или результат комбинаторной логики? Имеет смысл: if ( A == 1'b1 && B == 1'b0 ) действие1; if ( A == 1'b1 && B == 1'b1 ) действие2; Потому что они взаимоисключающие и введение приоритетности только добавляет неясности. Во что эту приоритетность превратит синтезатор, сходу никто не скажет. При этом если надо, можно перебрать оставшиеся не описанные комбинации условий. Или if ( A == 1'b1 && B == 1'b0 ) rg <= d; else if ( A == 1'b1 && B == 1'b1 ) rg <= e; else rg <= f; нужно перебрать оставшиеся не описанные комбинации условий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 19 31 июля Опубликовано 31 июля · Жалоба 7 часов назад, ianpo сказал: Собственно, такой код, будет ли он корректно работать? Так смоделируйте и проверьте. Каким симулятором до этого пользовались? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 1 августа Опубликовано 1 августа · Жалоба 17 hours ago, ianpo said: Меня смущает что во втором if A проверяется на ==1, будет ли оно проверяться или считается, что здесь A==0. Будет - так как в вашем выражении в ветку else можно попасть и при условии A=1 и при условии A=0 9 hours ago, sazh said: if ( A == 1'b1 && B == 1'b0 ) действие1; if ( A == 1'b1 && B == 1'b1 ) действие2; Потому что они взаимоисключающие и введение приоритетности только добавляет неясности. Во что эту приоритетность превратит синтезатор, сходу никто не скажет. Приведённая конструкция вполне жизнеспособна и даёт однозначный вариант в приоритете выполнения. Как впрочем и приведённый вами вариант f ( A == 1'b1 && B == 1'b0 ) действие1; if ( A == 1'b1 && B == 1'b1 ) действие2; Приоритет в данном случае однозначно определяется условиями под if потому как эти условия взаимоисключающие А если бы условия были неоднозначны то приоритет все равно был бы понятен - по принципу "кто последний присвоил того и тапки" ... Зная это не обязательно расписывать полные ветвистые деревья if else. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ianpo 0 1 августа Опубликовано 1 августа · Жалоба 2 hours ago, RobFPGA said: Будет - так как в вашем выражении в ветку else можно попасть и при условии A=1 и при условии A=0 Это я и хотел услышать. У меня была ситуация, когда второй if не работал. Видимо, я где-то напутал с условием, но так и не понял, где именно, и ошибочно решил, что это if так работает 😕 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 1 августа Опубликовано 1 августа · Жалоба 2 hours ago, ianpo said: У меня была ситуация, когда второй if не работал. Видимо, я где-то напутал с условием, но так и не понял, где именно, и ошибочно решил, что это if так работает 😕 В какой среде и на какой ПЛИС проверяли? У GoWin в ранних версиях среды (года 2 назад) такой код глючил от фазы луны. Были такие глюки: begin : BadCode rg <= 1; if (A) rg <= 0; end begin : GoodCode if (A) rg <= 0; else rg <= 1; end и такие: begin : BadCode if (A) rg <= 0; else if (B) rg <= 1; end begin : GoodCode if (A) rg <= 0; else begin if (B) rg <= 1; end end Потом они стали прокачивать свой синтезатор на предмет поддержки не только Verilog, но и SystemVerilog и видно обилие исходников криво собираемых подвигло на исправление синтезатора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться