Конфигурация – это первичный блок проекта.
Синтаксис:
configuration имя_конфигурации of имя_entity is for имя_конфигурации for метка: имя_компонента use entity имя_библиотеки.имя_entity(имя_архитектуры); for имя_архитектуры ... ... end for; end for; end for; end имя_конфигурации; configuration имя_конфигурации of имя_entity is for имя_архитектуры for метка: имя_компонента use configuration имя_библиотеки.имя_конфигурации; end for; end for; end имя_конфигурации;
Правила и примеры:
В первой форме конфигурации компонента, представленной выше, вся иерархия может быть сконфигурирована за одну декларацию.
Вторая форма использует дерево конфигураций, каждая из которых отвечает точке в иерархии.
В отсутствии явной конфигурации для любой части модели, ей будет сопоставлена конфигурация по умолчанию. Для каждого, не сконфигурированного компонента, будет выбрано entity, чьё имя, имя портов, вид портов и т.д., будут совпадать с отвечающей декларацией компонента. В тех entity , где более одной архитектуры, будет выбрана последняя проанализированная архитектура.
Ключевое слово all может быть использовано для соотнесения со всеми компонентами:
configuration CFG_FULLADD of FULLADD is for STRUCTURAL for all : HALFADD use entity work.HALFADD(BEHAVE); end for; end for; end CFG_FULLADD;
Ключевое слово others может быть использовано для соотнесения со всеми компонентами, неявно упомянутыми.
В случае если имена портов в entity не совпадают с именами в декларации компонента, можно включить port map в конфигурацию:
configuration CFG_FULLADD_DELAY of FULLADD is for STRUCTURAL for all : HALFADD use entity work.HA(B) port map(X => A, Y => B, S => SUM, C => CARRY); end for; end for; end CFG_FULLADD_DELAY;
Особенности синтеза:
Конфигурация не всегда поддерживается системами синтеза. Пользователь должен убедиться, что имена компонента и entity , порты совпадают, а также, что только одна архитектура для entity проанализирована.