- •Описание цифровых устройств в среде пакета WebPack ise на языке vhdl
- •1. Язык описания схем vhdl
- •2. Структура программы
- •2.1. Описание интерфейса
- •2.2. Архитектурные тела
- •2.3. Операторы блоков
- •2.4. Процессы
- •3.1. Типы, переменные и константы
- •3.3. Процедуры и функции
- •3.4. Библиотеки и пакеты
- •3.2. Атрибуты
- •3.5. Операторы управления
- •3.6. Задержки сигналов
- •3.7. Моделирование схемных соединений
- •4. Пример программирования дешифратора для семисегментных индикаторов
- •5. Практическая часть.
- •Литература:
- •Наглядные материалы и пособия:
2.1. Описание интерфейса
В языке VHDL логическая схема представляется как объект проекта. Представляемая логическая схема может быть достаточно сложной, как, например, микропроцессор или весьма простой, как логический вентиль 2И-НЕ. Каждый объект проекта в свою очередь имеет два различных типа описаний: описание интерфейса и одно или более архитектурные тела.
В табл. 1 представлен синтаксис объявления объекта. Целью объявления объекта, помимо присвоения объекту имени, является определение сигналов внешнего интерфейса или портов (ports) в части объявления объекта, которая называется объявлением портов (port declaration). Кроме ключевых слов entity, is, port и end, объявление объекта содержит следующие элементы:
Entity_name – выбираемое пользователем имя объекта;
Signal_names – список выбираемых пользователем имен сигналов внешнего интерфейса, состоящий из одного имени или из большего числа имен, разделенных запятой;
Mode – одно из четырех зарезервированных слов, определяющих направление передачи сигнала:
а) in сигнал на входе объекта;
б) out сигнал на выходе объекта; заметьте, что значение такого сигнала нельзя «прочитать» внутри структуры объекта; он доступен только объектам, использующим данный объект;
в) buffer сигнал на выходе объекта, такой что его значение можно читать также внутри структуры данного объекта;
г) inout сигнал, который может быть входным или выходным для данного объекта; обычно этот режим используется применительно к входам-выходам ПЛУ с тремя состояниями;
Signal_type – встроенный или определенный пользователем тип сигнала.
Замечание. Обратите внимание, что после заключительного signal_ type нет точки с запятой; изменение порядка следования закрывающей скобки и точки с запятой после нее типичная синтаксическая ошибка программиста, начинающего писать на языке VHDL.
Таблица 1. Синтаксис объявления объекта на языке VHDL.
entity |
entity_name is |
port |
(signal_names: mode signal_type; |
|
signal_names: mode signal_type; |
|
………………………………….. |
|
signal_names: mode signal_type); |
end |
entity_name |
Порты объекта, а также направление передачи и типы сигналов – это все, что видят другие модули, использующие данный модуль.
Проиллюстрируем это понятие на примере. Описание интерфейса для схемы дешифратора, которая преобразует входной четырехразрядный код в напряжение низкого уровня на одном из 10 выходов.
entity Id_1 is
port(A: in bit_vector(0 to 3); Y: out bit_vector(0 to 9));
end Id_1;
2.2. Архитектурные тела
Описание интерфейса по существу определяет только входы-выходы объекта проекта. Кроме этого необходимо иметь средства описания поведения объекта. В языке VHDL для этой цели служит так называемое архитектурное тело. Это тело может определять поведение объекта непосредственно или представлять структурную декомпозицию на более простые компоненты.
В табл. 2 представлен синтаксис объявления архитектурного тела.
Таблица 2. Синтаксис определения архитектуры на языке VHDL.
architecture |
Architecture_name of entity_name is |
|
type declarations |
|
signal declarations |
|
constant declarations |
|
function definitions |
|
procedure definitions |
|
component declarations |
begin |
|
|
Concurrent_statement |
|
………………………… |
|
Concurrent_statement |
end |
Architecture_name; |
Имя объекта (entity_name) в этом определении должно быть таким же, какое раньше было присвоено объекту в объявлении объекта. Имя архитектуры (architecture_name) – это выбираемый пользователем идентификатор, обычно так или иначе связанный с именем объекта; при желании имя архитектуры может быть тем же самым, что и имя объекта.
Сигналы внешнего интерфейса архитектуры (порты) наследуются от той части объявления соответствующего объекта, где объявляются порты. У архитектуры могут быть также сигналы и другие объявления, являющиеся для нее локальными, подобно тому, как это имеет место в других языках высокого уровня. В отдельном «пакете», используемом несколькими объектами, можно сделать объявления, общие для этих объектов.
Объявления в табл. 2 могут располагаться в произвольном порядке. Начать легче всего с объявления сигнала (signal declaration), которое сообщает ту же самую информацию о сигнале, какую содержит объявление порта, за исключением того, что вид сигнала не задается:
signal signal_names : signal_type;
В архитектуре может быть объявлено любое число сигналов, начиная с нуля, и они приблизительно соответствуют поименованным соединениям в принципиальной схеме. Их можно считывать и записывать внутри определения архитектуры и, подобно другим локальным элементам, на них можно ссылаться только в пределах данного определении архитектуры.
Переменные (variables) в языке VHDL похожи на сигналы, за исключением того, что, как правило, они не имеют никакого физического смысла в схеме. Переменные используются в функциях, процедурах и процессах языка VHDL. Объявление переменной выглядит следующим образом:
variable variable_names : variable_type;
Ниже, в качестве примера, показано архитектурное тело для дешифратора Id_1:
Architecture DC of Id_1 is
Begin
Process(A)
Begin Y<=”1111111111”
Case A(0 to 3) is
when(“0000”) => Y <=”0111111111”
when(“1000”) => Y <=”1011111111”
when(“0100”) => Y <=”1101111111”
when(“1100”) => Y <=”1110111111”
when(“0010”) => Y <=”1111011111”
when(“1010”) => Y <=”1111101111”
when(“0110”) => Y <=”1111110111”
when(“1110”) => Y <=”1111111011”
when(“0001”) => Y <=”1111111101”
when(“1001”) => Y <=”1111111110”
end case;
end process;
end DC;
В архитектурном
теле отсутствует программный цикл,
осуществляющий сканирование входов от
до
,
вместо этого применен оператор выбора
case,
в котором управляющее выражение –
битовый вектор. В зависимости от значений
входного вектора
,
определяется значение выходного вектора
.
Нумерация разрядов в векторе осуществляется
слева направо.
