Прикольно всё таки реализована в VHDL (язык) или Quartus-е (среда разработки) условная компиляция.
Если проводить аналог с классическими языками программирования - вызовы процедуры анализируются на предмет значений параметров и если какая то часть процедуры зависит от конкретного параметра, а с таким значением параметра ни одного вызовы процедуры нет - то эта часть кода просто не компилируется. Ну понятно, что это возможно, когда такой параметр всегда используется в вызовах в виде константы.
В классических языках программирования условная компиляция (по крайне мере то, что вспоминается) реализована совершенно отдельными конструкциями языка.
Плюсы такого подхода - синтезированное описание содержит только то, что в данном проекте используется. Минусы - нет понятия откомпилированных библиотечных модулей (или я пока про них не знаю) и синтезатор (язык не поворачивается назвать его компилятором) должен иметь доступ ко ВСЕМ ИСХОДНЫМ текстам.
Хотя есть ещё понятие IP cores - они слегка напоминают библиотечные модули, но пока мой опыт работы с ним говорит о том, что я от использования их на выходе получаю описание в VHDL (или Verilog), который потом опять же обрабатывается синтезатором