Перейти к содержанию
    

If-else vs тернарный оператор - вне блока always

Почему тернарный оператор разрешен вне блока always, а if-else (и case) - нет?
В чем скрытый смысл такого ограничения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"?" - комбинационный мультиплексор.

"if/else, case" - последовательный мультиплексор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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...". 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

1 hour ago, flammmable said:

Почему тернарный оператор разрешен вне блока always, а if-else (и case) - нет?
В чем скрытый смысл такого ограничения?

Наверное смысл тот же что и в правилах русского языка при написании И после Ж, Щ.

IMHO - оные правила должны способствовать  однозначности понимания написанного, а if|case можно написать без ветви else|default (в отличии от тернарного оператора).  И что в таком случае присваивать переменной в assign?

Хотя и сейчас if и case можно использовать вне блока always ... в блоке generate да и то с некоторыми ограничениями. 

Удачи! Rob.

  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 или в том, что на эту фичу языка забили создатели. Если забили - следует смириться. Если это идеологический момент, то желательно его понять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, flammmable сказал:

Причина может быть или в идеологии verilog или в том, что на эту фичу языка забили создатели.

Видимо, создатели просто крепко забили, когда выдумывали верилог. Ибо находясь в трезвом уме, такой корявый язык придумать невозможно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, andrew_b said:

Видимо, создатели просто крепко забили, когда выдумывали верилог. Ибо находясь в трезвом уме, такой корявой язык придумать невозможно.

 

Ура, началось! ;)

Ищущих логику в верилоге я всегда спрашиваю, почему после module() ставится ";", а после endmodule - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 обоим этим языкам как до африки пешком)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да вообще все HDL - фтопку! Схемы - вот то великое, с чего всё началось. Отказались от схем, теперь пожинают плоды! Это ж надо было додуматься схемы буквами описывать. "Дебилы, б.." (с).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, dxp said:

Да вообще все HDL - фтопку! Схемы - вот то великое, с чего всё началось. Отказались от схем, теперь пожинают плоды! Это ж надо было додуматься схемы буквами описывать. "Дебилы, б.." (с).

Вот вы смеетесь, а что-то в этом есть. Те же альтера и Хилинкс не заморачиваются всякими там интерфейсами систем-верилога, которые позволяют вместо 5000 строк писать всего 1000, а сделали Qsys и IP Integrator, где достаточно мышкой 5 минут потыркать. Порядок бьет класс!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это потому, что там тулза генерит эти стопятсот тыщ строк. А эти "заморочки" языков нужны для человеческого выражения замыслов. Тулзой ессно куда проще нагененить тыщи строк, чем сделать так, чтобы она выдавала красивый, читабельный и сопровождаемый в дальнейшем код. Я бы, кстати, предпочёл именно этот вариант, а не эти тонны говнокода, которые выдают генераторы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

24 minutes ago, alexadmin said:

Те же альтера и Хилинкс не заморачиваются всякими там интерфейсами систем-верилога

Кроме них полно контор, которые интерфейсами заморачиваются, особенно в VIP. Хотя бы по той причине, что нужно обеспечить переносимость кода, как минимум, между разными тулами - от MG, Synopsys, Cadence. То есть, неплохо бы помнить, что HDL - не для ПЛИСов писались, хоть в них и используются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я понимаю что без чувства сарказма, в этом мире жить плохо. Но, на этом предлагаю закончить всем холиварную тему (с) Модератор

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...