Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Example 1



entity INVERTER is generic (PropTime: TIME:= 5 ns); port (IN1: in BIT; OUT1: out BIT); end INVERTER; architecture STRUCT_I of INVERTER is begin OUT1 <= not IN1 after PropTime; end STRUCT_I; entity TEST_INV is end TEST_INV; architecture STRUCT_T of TEST_INV is signal S1, S2: BIT:= '1'; -- INV_COMP component declaration: component INV_COMP is -–объявление компонента generic (TimeH: TIME); port (IN_A: in BIT; OUT_A: out BIT); end component; for LH: INV_COMP -- спецификация конфигурации (specification configuration) связывающая компонент с родительским проектом, т.е. с описанием компонента use entity INVERTER (STRUCT_I) -- indicates generic and port aspects: generic map (PropTime => TimeH) port map (IN1 => IN_A, OUT1 => OUT_A); begin -- instantiation of INV_COMP component (внедрение компонента): LH: INV_COMP generic map (10 ns) port map (S1, S2); end STRUCT_T;

Architecture STRUCT_T entity TEST_INV использует component INV_COMP. Прикрепление component к entity INVERTER и архитектуры (architecture) STRUCT_I реализовано спецификацией configuration, которая появляется в декларативной части тела architecture.

Important notes:

· Конфигурация назначает одну и только одну структуру тела архитектуры к данному объекту.

· Инструментальные средства Синтеза вообще не поддерживают конфигурации.

· Для конфигурации некоторого проекта, оба – объект (entity) и конфигурация configuration имя конфигурации of имя проекта is должны быть объявлены в той же самой библиотеке.

4. Примеры использование оператора конфигурации (configuration …is…) при создании структурных проектов с применением компонентного стиля проектирования

При построении иерархических VHDL проектов часто проходится уточнять какой именно вспомогательный VHDL проект будет использоваться в качестве компонента в головном проекте. Причем, часто требуется уточнять не только имя (entity) вспомогательного проекта, а также имя архитектуры, связанной в текущий момент с именем вспомогательного проекта. Это обстоятельство возникает по той причине, что в языке VHDL одному имени entity проекта могут соответствовать несколько архитектур, Каждая из которых содержит свой вариант описания работы проектируемого цифрового устройства. Эта задача решается при помощи оператора конфигурации. Этот оператор имеет сложное конструктивное устройство.

Таким образом, Оператор конфигурации (configuration …is) дает возможность уточнить, какой реально существующий вспомогательный проект будет внедряться в качестве компонента в головной проект. Наличие оператора конфигурации расширяет возможность маневра при разработке проектов. Дело в том, что интерфейсы используемых для внедрения разных компонентов могут быть одинаковыми, т.е. могут совпадать с интерфейсами многих других проектов, причем работа каждого отдельного проекта может также описываться разными архитектурами. В то же время один и тот же проект VHDL может иметь несколько архитектур. Поэтому оператор конфигурации дает возможность уточнить какой конкретно проект вы желаете использовать в качестве компонента, и какая архитектура должна ему соответствовать в текущем головном проекте.

Итак, пусть требуется разработать VHDL проект цифрового устройства, содержащего некоторые компоненты (см. рис. 5.5). Причем, при создании VHDL проекта требуется уточнить, какие именно компоненты (подпроекты) и с какими архитектурами будут использованы при построении цифрового устройства. (Обратите внимание, что все компоненты, содержащиеся в структурной схеме рис. 5.5, имеют одинаковые интерфейсы.)

Рис. 5.5

Головной проект (Вариант 1. - Списочное связывание портов) Головной проект entity conf_gat сохранен в поддиректории conf_gat_dir.

library work;

entity conf_gat is

port (A, B: in bit;

Y: out bit);

end conf_gat;

architecture conf_gat_a of conf_gat is

component and_e is

port (x1, x2: in bit;

y: out bit);

end component and_e;

component nand_e is

port (x1, x2: in bit;

y: out bit);

end component nand_e;

signal Y_s1, Y_s2: bit;

Begin

U1: and _e port map (A, B, Y_s1);

U2: nand _e port map (A, B, Y_s2);

U3: and _e port map (Y_s1,Y_s2, Y);

end conf_gat_a;

-- оператор конфигурации проекта

configuration conf_gat_c of conf_gat is

for conf_gat_a

for U1: and_e use entity work.and_e (and_a);

end for;

for U2: nand_e use entity work.nand_e (nand_a);

end for;

for U3: and_e use entity work.and_e (and_a);

end for;

end for;

end configuration conf_gat_c;

Головной проект (Вариант 2. Именованное связывание портов)

Library work;

entity conf_gat is

port (A, B: in bit;

Y: out bit);

end conf_gat;

architecture conf_gat_a of conf_gat is

component and_e is

port (x1, x2: in bit;

y: out bit);

end component and_e;

component nand_e is

port (x1, x2: in bit;

y: out bit);

end component nand_e;

signal Y_s1, Y_s2: bit;

Begin

U1: and _e port map (x1 => A, x2 => B, y => Y_s1);

U2: nand _e port map (x1 => A, x2 => B, y => Y_s2);

U3: and _e port map (x1 => Y_s1, x2 => Y_s2, y => Y);

end conf_gat_a;

-- оператор конфигурации проекта

configuration conf_gat_c of conf_gat is

for conf_gat_a

for U1: and_e use entity work.and_e (and_a);

end for;

for U2: nand_e use entity work.nand_e (nand_a);

end for;

for U3: and_e use entity work.and_e (and_a);

end for;

end for;

end configuration conf_gat_c;





Дата публикования: 2014-11-03; Прочитано: 298 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...