
- •1. Введение 3
- •2. Использование ahdl 13
- •3. Элементы ahdl 64
- •4. Структура проекта 83
- •1. Введение
- •1.1 Описание устройства с помощью ahdl
- •1.1.1 Как работает ahdl?
- •1.2 Структура ahdl-файла
- •1.2.1 Разделы ahdl-файла
- •1.2.2 Иерархические проекты
- •1.2.3 Подключение библиотек
- •1.3.1 Шаблоны и примеры ahdl
- •1.3.2 Контекстно-зависимая помощь
- •1.3.3 Выделение цветом групп символов
- •1.3.4 Локализация ошибок
- •1.4 Компиляция ahdl-проектов
- •1.5 Советы
- •2. Использование ahdl
- •2.1 Введение
- •2.1.1 Использование чисел
- •2.1.2 Использование констант и вычисленных функций
- •2.1.3 Вставка ahdl-шаблона
- •2.1.4 Примеры ahdl
- •2.2 Комбинационные устройства
- •2.2.1 Описание комбинационных устройств с помощью логических уравнений
- •2.2.2 Объявление узлов
- •2.2.3 Описание групп
- •2.2.4 Использование операторов ветвления
- •Использование оператора if…then
- •Использование оператора case
- •Сравнение операторов if…then и case
- •2.2.5 Создание декодеров
- •2.2.6 Использование значений «по умолчанию» для переменных
- •2.2.7 Описание активно-низкой логики
- •2.2.8 Двунаправленные выводы
- •2.2.9 Описание тристабильных выводов
- •2.3 Устройства с памятью
- •2.3.1 Использование регистров
- •2.3.2Определение регистровых входов
- •2.3.3 Создание счетчиков
- •2.4 Графы переходов
- •2.4.1 Описание графа переходов
- •2.4.2 Назначение автомату сигналов синхронизации, сброса, разрешения по входу
- •2.4.3 Кодирование состояний автомата
- •2.4.4 Описание автомата Мура (Moore machine)
- •2.4.5 Описание автомата Мили (Mealy machine)
- •2.5 Создание иерархического проекта
- •2.5.1 Использование не параметризированных функций
- •2.5.2 Использование параметризированных функций
- •2.5.3 Создание и использование макрофункций
- •2.5.4 Экспорт и импорт графов переходов автоматов
- •2.6 ИспользованиеLcell иSofTпримитивов
- •2.8 Перегрузка имени оператора
- •2.9 Использование циклически генерируемой логики
- •2.10 Использование условно генерируемой логики
- •3. Элементыahdl
- •3.1 Ключевые слова и идентификаторы
- •3.1.1 Ключевые слова
- •3.1.2 Зарезервированные идентификаторы
- •3.2 Символы
- •3.3 Имена вAhdl, использование кавычек
- •3.4 Группы
- •3.4.1 Способы объявления и записи групп
- •3.4.2 Размеры групп и подгрупп
- •3.5 Числа вAhdl
- •3.6 Арифметические выражения
- •3.7 Логические выражения
- •3.7.1 Логические операторы
- •3.7.2 Использование оператораNot
- •3.7.3 Использование операторовAnd, nand, or, nor, xor, xnor
- •3.7.4 Использование арифметических операторов в логических выражениях
- •3.7.5 Операторы сравнения
- •3.7.6 Приоритеты логических операторов и операторов сравнения
- •3.8 Мегафункции
- •3.9 Порты
- •3.9.1 Порты файла
- •3.9.2 Использование портов
- •4. Структура проекта
- •4.1 Введение
- •4.2 Заголовок (Title Statement)
- •4.2 Раздел объявления параметров (Parameters Statement)
3.9 Порты
Портом в MAX+PLUS IIназывается вход или выход логической функции. С описанием порта вы можете встретиться в двух случаях:
При описании входов или выходов проекта
При использовании входов/выходов примитивов в логической секции
3.9.1 Порты файла
Порты, являющиеся входами/выходами текущего файла проекта, описываются в разделе «определения устройства» в следующем виде:
<имя порта>:<тип порта>[=<значение «по умолчанию»>]
Существуют следующие типы портов:
INPUT MACHINE INPUT
OUTPUT MACHINE OUTPUT
BIDIR
В том случае, когда текущий файл является верхним файлов в иерархии, имена портов совпадают с именами контактов ПЛИС. Значение «по умолчанию» (VCC или GND) могут присваиваться портам, имеющим типINPUTили BIDIR. Это значение будет использоваться только в том случае, когда порту не было присвоено никакого значения.
В следующем примере показан способ описания портов:
SUBDESIGN top
(
foo, bar, clk1, clk2, c[4..0][6..0] : INPUT = VCC;
a0, a1, a2, a3 : OUTPUT;
b[7..0] : BIDIR;
)
Вы можете осуществлять импорт и экспорт графов переходов при помощи портов типа MACHINE INPUTи MACHINE OUTPUT.
Входы/выходы
типаMACHINE
INPUT
илиMACHINE
OUTPUTне могут использоваться в
файле верхнего уровня проекта.
3.9.2 Использование портов
В следующем примере будет показан один из способов соединения портов с переменной:
VARIABLE
reg : DFF;
BEGIN
reg.clk = clock;
reg.d = data_input;
output = reg.q;
END;
В данном случае выражение, соединяющее порт и переменную может быть записано в виде:
<имя примитива>.<имя порта>=<имя узла>, где
<имя примитива> – имя, определенное пользователем для примитива
<имя порта> – имя входа/выхода примитива
Кроме вышеизложенного способа соединения порта с переменной существует еще 2способа:
FUNCTION 21mux (s, a, b)
RETURNS (y);
.
.
.
BEGIN
output = 21mux (.s=select, .b = dataB, .a = dataA);
END;
В данном примере узлы output,select, dataB иdataAсоединяются соответственно с портамиy, s, b, a.В этом примере выражение, соединяющее порт и переменную может быть записано в общем виде так:
.<имя порта>=<имя узла>
Два вышеизложенных способа соединения портов устройства с переменными относятся к разряду поименных, т.е. в том и в другом случае в общей формуле соединения участвует имя порта.
Третий способ относится к разряду поименных. Рассмотрим пример:
BEGIN
Output = 21mux(select, dataA, dataB);
END;
В этом случае на этапе компиляции портам, указанным в прототипе функции, ставиться в соответствие набор узлов. Поэтому в данном случае порядок указания узлов крайне важен.
В таблице 3.9 приведены имена портов стандартных примитивов:
Таблица 3.9 Имена портов стандартных примитивов
Имя порта |
Описание |
.q |
Выход триггера или защелки |
.d |
Информационный вход D-триггера или защелки |
.t |
Вход T-триггера |
.j |
JвходJK-триггера |
.k |
KвходJK-триггера |
.s |
Вход установки RS-триггера |
.r |
Вход сброса RS-триггера |
.clk |
Синхровход |
.ena |
Вход сигнала разрешения синхронизации |
.prn |
Инверсный сигнал установки триггера |
.clrn |
Инверсный сигнал сброса триггера |
.reset |
Сигнал сброса для графа перехода |
.oe |
Порт сигнала разрешения выдачи |
.in |
Вход примитива |
.out |
Выход примитива |
Для
получения более подробной информации
см. следующие разделы:
Имена в AHDL, использование кавычек
“Port Syntax” помощи по MAX+PLUS II