Configuration (Конфигурация)

Конфигурация – это первичный блок проекта.

Синтаксис:

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 проанализирована.