Библиотеки, их описание на языке VHDL.
Для облегчения процесса проектирования описание объекта моделирования и различные варианты описания его архитектуры обычно размешают в библиотеках (они организованы как отдельные файлы). Это позволяет редактировать описание одних объектов, не затрагивая файлы, в которых расположены описания других объектов. Кроме того, библиотеки могут быть использованы в различных проектах, что позволяет лучше организовать повторное использование уже разработанных объектов.
В библиотеках также могут размешаться описания констант, переменных, типов, процедур, функций, а также декларации конфигураций.
Если описание архитектуры включает объекты, размешенные в библиотеках, то непосредственно перед описанием архитектуры необходимо указать имена библиотек, которые используются. Это имеет следующий синтаксис:
library имя библиотеки…
Для того чтобы в тексте модуля каждый раз не указывать имя библиотеки часто используемого объекта, можно описать условную ссылку. Она имеет следующий синтаксис:
use имя библиотеки (identifier | all)
Если в описании указано ключевое слово all, то все объекты, содержащиеся в библиотеке, становятся непосредственно видимыми.
Пакеты, их описание на языке VHDL.
При построении полноразмерных моделей проектируемых устройств есть большое число программных объектов. Их описания приходится многократно использовать как внутри одной модели, так и в разных моделях. Механизм пакетов позволяет сгруппировать некоторые описания в единую совокупность — пакет, который далее может многократно использоваться в проектах. Пакет может использоваться как в различных частях одной модели, так и в разных моделях.
Описание пакета состоит из декларативной части и тела пакета. Описание декларативной части пакета имеет следующий синтаксис:
package имя пакета is
…
end [package] [имя пакета];
Описание тела пакета имеет следующий синтаксис:
package body name is
(элементы тела пакета)
end [package body] [name];
Описание пакета может состоять только из декларативной части. Пример такого описания:
package epu_types is
constant word_size;
positive: =16;
subtype word is: bit_vector (word_size-l downto 0);
end package epu_types;
Обращение к объекту, расположенному в пакете, имеет следующий синтаксис:
Library_name. package_name. object_name.
где: library_name — имя процедуры, package_name — имя пакета, object_name — имя объекта.
Оператор генерации generate языка VHDL.
Структурное описание позволяет описать систему как совокупность компонентов — подсистем, объединенных сигналами.
Для того чтобы один объект моделирования мог быть включен в состав другого объекта, его необходимо декларировать как компонент.
Декларация компонента имеет следующий синтаксис:
Component имя компонента is [generic (generic_interface_list);]
[port (port_interface_list);]
end component [имя компонента];
Задав декларацию компонентов, мы описываем спецификацию проектируемого объекта, определив, какого типа компоненты в него входят.
Оператор генерации (generate).
Оператор генерации generate позволяет компактно описать модель из входящих в нее компонентов.
Оператор генерации имеет следующий синтаксис:
Group_label: for index in range generate
Element_label: component_name [generic map (generic_accosiation_list)]
[port map (port_accosiacion_list)]
end generate [Group__label];
Список Generic_association_list содержит фактические значения обобщающих констант.
Допускается вложенность операторов генерации
Задание конфигурации компонентов на языке VHDL. Конфигурационная спецификация и конфигурационная декларация.
В общем случае объект моделирования может иметь несколько описаний архитектуры.
entity LA3=> erc 1 bch 1 of LA3
erc 2 bch 2 of LA3
…..
Для задания нужного описания используется конфигурация, т. е. связывание объекта с одним из описаний его архитектуры. Использование конфигурации позволяет создавать гибкие модели.
Формы задания конфигурации:
1.)Конфигурация спецификации:
for(метка экземпляра компонента, all, others): имя_компонента
use entity имя_entity[(имя архитектуры тела)];
end for;
Пример:
for bit0, bit1:flipflop
use entity work. edge_triggered_dff(basic);
end for;
Изменение конфигурации спецификации приводит к изменению текста модели объекта, что неудобно.
2.) Конфигурация декларации содержит ту же информацию, что и спецификация но может быть расположена в отдельном файле.
configuration имя_конфигурации of имя_entity is
for имя конфигурации. описания
{for(…) end for;}
end for
end configuration имя_конфигурации.
Пример:
сonfiguration conf1 of ent_bit is
for ent_bits_struct
for bit0, bit1:flipflop
use entity work. edge_triggered_dff(basic);
end for;
end for;
end configuration conf1;
Задание конфигурации компонентов на языке VHDL. Правила связывания по умолчанию.
В общем случае объект моделирования может иметь несколько описаний архитектуры.
entity LA3=> erc 1 bch 1 of LA3
erc 2 bch 2 of LA3
…..
Для задания нужного описания используется конфигурация, т. е. связывание объекта с одним из описаний его архитектуры. Использование конфигурации позволяет создавать гибкие модели.
Формы задания конфигурации:
1.)Конфигурация спецификации:
for(метка экземпляра компонента, all, others): имя_компонента
use entity имя_entity[(имя архитектуры тела)];
end for;
Пример:
for bit0, bit1:flipflop
use entity work. edge_triggered_dff(basic);
end for;
Изменение конфигурации спецификации приводит к изменению текста модели объекта, что неудобно.
2.) Конфигурация декларации содержит ту же информацию, что и спецификация но может быть расположена в отдельном файле.
configuration имя_конфигурации of имя_entity is
for имя конфигурации. описания
{for(…) end for;}
end for
end configuration имя_конфигурации.
Пример:
сonfiguration conf1 of ent_bit is
for ent_bits_struct
for bit0, bit1:flipflop
use entity work. edge_triggered_dff(basic);
end for;
end for;
end configuration conf1;
Правила связывания по умолчанию:
a. Для компонентов автоматически имеется объект с тем же именем;
2.) если используется архитектура тел, то для связывания используется то, которое компилируется последним