port (список_идентификаторов_входных_сигналов: in тип;
список_идентификаторов_выходных_сигналов: out тип);
Фактически списки идентификаторов — это списки сигналов или, что то же самое, имен цепей, соединяющих схему с внешним окружением. Словом in отмечен список входных, словом out — список выходных сигналов, словом inout помечаются цепи, которые могут быть как входными, так и выходными.
Но кроме сигналов, связь с внешним окружением может характеризоваться и рядом других величин, примерами которых могут служить такие параметры, как температура, количество выводов компонента схемы, временные задержки и т.п. Для их описания используется декларация generic:
generic (<список_параметров>);
Конкретные значения параметров могут быть заданы непосредственно в этой декларации, например:
generic (T1: Time := 20 ns; T2: Time := 5 ns; numb: integer := 12);
Здесь Time и integer — типы соответствующих данных.
В декларациях
архитектурного тела объявляются типы, фигурирующие в данном архитектурном теле. Ими могут быть используемые типы компонентов (объекты), параметры и сигналы. В декларации могут входить также описания процедур, функций, типов данных.
Рис. 1. Фрагмент логической схемы
В качестве примера рассмотрим структурное описание схемы рис. 1:
entity schema is
port (a,b,c,d,e: in BIT; y: out BIT);
end schema;
architecture str of schema is
component AND OR
generic (delay1: Time);
port (i1,i2,i3,i4: in BIT; a: out BIT);
end component AND OR;
component OR2
generic (delay2: Time);
port (i1,i2: in BIT; a: out BIT);
end component OR2;
signal z1,z2: BIT;
begin
E1: AND OR
generic map (delay1 := 4 ns);
port map (a,c,b,c,z1);
E2: AND OR
generic map (delay1 := 5 ns);
port map (d,c,e,c,z2);
E3: OR2
generic map (delay2 := 3 ns);
port map (z1,z2,y);
end str;
Из примера видно, что в декларации port перечисляются формальные сигналы, а в port map — фактические сигналы, причем последовательность перечисления в обоих местах должна быть согласованы. Допускается и произвольный порядок перечисления при использовании в port map списка с ключевой записью, например, для E3 последнего примера такой список имеет вид:
port map (a => y, i1 => z1, i2 => z2);
Аналогична роль деклараций generic map, используемых, если конкретные значения параметров различны для разных экземпляров компонентов.
Сигналы в цепях, не являющихся входными или выходными для описываемой схемы, должны быть перечислены в декларации архитектурного тела после слова signal.
Структурные описания для сложных объектов являются иерархическими.
Структурные описания сложных схем могут стать чрезмерно громоздкими, если все экземпляры компонентов описывать по отдельности. Чтобы устранить этот недостаток, в язык введен оператор generate, порождающий копии компонентов. Например, если схема состоит из 10 экземпляров двухвходового компонента Device, то ее архитектурное тело может выглядеть следующим образом:
architecture example of schema is
component Device
port (i1,i2: in BIT; y: out BIT);
end component;
signal X1,X2,Y: BIT_VECTOR (0 to 9);
begin
for i in 0 to 9 generate
En: Device
port map (i1=>X1(i), i2=>X2(i), y=>Y(i));
end generate;
end example;