flammmable 0 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба Почему тернарный оператор разрешен вне блока always, а if-else (и case) - нет? В чем скрытый смысл такого ограничения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nieve 0 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба "?" - комбинационный мультиплексор. "if/else, case" - последовательный мультиплексор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба 8 minutes ago, Nieve said: "?" - комбинационный мультиплексор. "if/else, case" - последовательный мультиплексор. Что такое "последовательный мультиплексор"? Просто я набил в Гугле "logic mux is" и первая ссылка говорит, что "The multiplexer, shortened to “MUX” or “MPX”, is a combinational logic circuit designed to...". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 23 ноября, 2018 Опубликовано 23 ноября, 2018 · Жалоба Приветствую! 1 hour ago, flammmable said: Почему тернарный оператор разрешен вне блока always, а if-else (и case) - нет? В чем скрытый смысл такого ограничения? Наверное смысл тот же что и в правилах русского языка при написании И после Ж, Щ. IMHO - оные правила должны способствовать однозначности понимания написанного, а if|case можно написать без ветви else|default (в отличии от тернарного оператора). И что в таком случае присваивать переменной в assign? Хотя и сейчас if и case можно использовать вне блока always ... в блоке generate да и то с некоторыми ограничениями. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 26 ноября, 2018 Опубликовано 26 ноября, 2018 · Жалоба Quote И что в таком случае присваивать переменной в assign? module some_module (input A, output B); always @(A) begin if(A) B<=1; end endmodule А что присваивать "переменной" B в случае если А равно нулю? То, что у тернарного оператора обязана быть ветвь else - это важное замечание. Но не ясна связь с запретом на использование if-else. Даже если причина была бы в этом (хотя как тогда работает вышеприведенный пример?), то почему ограничение проведено так жестко? Т.е. ну и разрешили бы использовать if-else/case вне блоков, но только с наличием ветви else/default. Явно, компилятор бы не треснул. Я чего спрашиваю. Причина может быть или в идеологии verilog или в том, что на эту фичу языка забили создатели. Если забили - следует смириться. Если это идеологический момент, то желательно его понять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 26 ноября, 2018 Опубликовано 26 ноября, 2018 · Жалоба Приветствую! 54 minutes ago, flammmable said: module some_module (input A, output B); always @(A) begin if(A) B<=1; end endmodule А что присваивать "переменной" B в случае если А равно нулю? То, что у тернарного оператора обязана быть ветвь else - это важное замечание. Но не ясна связь с запретом на использование if-else. Даже если причина была бы в этом (хотя как тогда работает вышеприведенный пример?), то почему ограничение проведено так жестко? Т.е. ну и разрешили бы использовать if-else/case вне блоков, но только с наличием ветви else/default. Явно, компилятор бы не треснул. ... Ничего - поскольку переменная B в этом контексте должна быть storage type (с сохранением состояния) типа reg, integer ..., то она сохранит свое предыдущее состояние. 54 minutes ago, flammmable said: ... То, что у тернарного оператора обязана быть ветвь else - это важное замечание. Но не ясна связь с запретом на использование if-else. Даже если причина была бы в этом (хотя как тогда работает вышеприведенный пример?), то почему ограничение проведено так жестко? Т.е. ну и разрешили бы использовать if-else/case вне блоков, но только с наличием ветви else/default. Явно, компилятор бы не треснул.Я чего спрашиваю. Причина может быть или в идеологии verilog или в том, что на эту фичу языка забили создатели. Если забили - следует смириться. Если это идеологический момент, то желательно его понять. А какая разница почему - на сколько я понимаю идеологию языка разрабатывают его создатели воплощая свои хотелки и базируясь на доступных технологиях разработки компиляторов. IMHO - основное различие тут именно в типе переменных назначения wire и reg - первая не сохраняет состояние а лишь обозначает связь (в оригинале verilog физическую!) между вторыми. Отсюда и идеология применения IF и ?. Не может быть связь неопределенной (а иначе можно что-то и подхватить 8-() ... например undefined behavior ;). 54 minutes ago, flammmable said: ... Если забили - следует смириться. Если это идеологический момент, то желательно его понять. Не миритесь! - Придумайте свое расширение идеологии и синтаксиса применения IF - напишите реализацию компиляторов для симуляции и синтеза реализующую это (и при этом не ломающее все ранее написанное). Ну и протолкните все это через комитет стандартизации языка чтобы все ведущие компании включили это в свои релизы софта. И через 5 -10 лет мы будет вам признательны за это (наверное :) ) Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 26 ноября, 2018 Опубликовано 26 ноября, 2018 · Жалоба 1 час назад, flammmable сказал: Причина может быть или в идеологии verilog или в том, что на эту фичу языка забили создатели. Видимо, создатели просто крепко забили, когда выдумывали верилог. Ибо находясь в трезвом уме, такой корявый язык придумать невозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 26 ноября, 2018 Опубликовано 26 ноября, 2018 · Жалоба Just now, andrew_b said: Видимо, создатели просто крепко забили, когда выдумывали верилог. Ибо находясь в трезвом уме, такой корявой язык придумать невозможно. Ура, началось! ;) Ищущих логику в верилоге я всегда спрашиваю, почему после module() ставится ";", а после endmodule - нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 26 ноября, 2018 Опубликовано 26 ноября, 2018 · Жалоба 15 минут назад, alexadmin сказал: почему Там много других приколов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 26 ноября, 2018 Опубликовано 26 ноября, 2018 · Жалоба 1 hour ago, flammmable said: Я чего спрашиваю. Причина может быть или в идеологии verilog или в том, что на эту фичу языка забили создатели. Если забили - следует смириться. Если это идеологический момент, то желательно его понять. RTFM (!!!) IEEE Std 1364-2001 (IEEE Standard Verilog ® Hardware Description Language) -> 6. Assignments -> 6.1 Continuous assignments vs 6.2 Procedural assignments 58 minutes ago, andrew_b said: Видимо, создатели просто крепко забили, когда выдумывали верилог. Ибо находясь в трезвом уме, такой корявый язык придумать невозможно. скажу более того, до гениальной простоты и понятливости AHDL обоим этим языкам как до африки пешком) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 31 27 ноября, 2018 Опубликовано 27 ноября, 2018 · Жалоба Да вообще все HDL - фтопку! Схемы - вот то великое, с чего всё началось. Отказались от схем, теперь пожинают плоды! Это ж надо было додуматься схемы буквами описывать. "Дебилы, б.." (с). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 27 ноября, 2018 Опубликовано 27 ноября, 2018 · Жалоба 4 hours ago, dxp said: Да вообще все HDL - фтопку! Схемы - вот то великое, с чего всё началось. Отказались от схем, теперь пожинают плоды! Это ж надо было додуматься схемы буквами описывать. "Дебилы, б.." (с). Вот вы смеетесь, а что-то в этом есть. Те же альтера и Хилинкс не заморачиваются всякими там интерфейсами систем-верилога, которые позволяют вместо 5000 строк писать всего 1000, а сделали Qsys и IP Integrator, где достаточно мышкой 5 минут потыркать. Порядок бьет класс! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 31 27 ноября, 2018 Опубликовано 27 ноября, 2018 · Жалоба Это потому, что там тулза генерит эти стопятсот тыщ строк. А эти "заморочки" языков нужны для человеческого выражения замыслов. Тулзой ессно куда проще нагененить тыщи строк, чем сделать так, чтобы она выдавала красивый, читабельный и сопровождаемый в дальнейшем код. Я бы, кстати, предпочёл именно этот вариант, а не эти тонны говнокода, которые выдают генераторы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 27 ноября, 2018 Опубликовано 27 ноября, 2018 · Жалоба 24 minutes ago, alexadmin said: Те же альтера и Хилинкс не заморачиваются всякими там интерфейсами систем-верилога Кроме них полно контор, которые интерфейсами заморачиваются, особенно в VIP. Хотя бы по той причине, что нужно обеспечить переносимость кода, как минимум, между разными тулами - от MG, Synopsys, Cadence. То есть, неплохо бы помнить, что HDL - не для ПЛИСов писались, хоть в них и используются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 27 ноября, 2018 Опубликовано 27 ноября, 2018 · Жалоба Я понимаю что без чувства сарказма, в этом мире жить плохо. Но, на этом предлагаю закончить всем холиварную тему (с) Модератор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться