- •Учебник по языку ahdl Оглавление
- •Введение
- •Общие положения
- •Как работает ahdl?
- •Элементы языкаAhdl
- •Зарезервированные слова
- •Зарезервированные идентификаторы
- •Символы
- •Строковые и символьные имена
- •Способы объявления шин
- •Диапазоны и поддиапазоны шин
- •Числа в ahdl
- •Арифметические выражения
- •Встроенные оценочные функции
- •Логические выражения
- •Операторы логических функций
- •Булевы операторы, использующие not
- •Булевы операторы, использующие and, nand, or, nor, xor, и xnor
- •Арифметические операторы
- •Компараторы
- •Приоритеты логических и арифметических операторов
- •Прототипы логических функций
- •Примитивы
- •Массивы примитивов
- •Макрофункции
- •Мегафункции и библиотеки параметризуемых модулей
- •Не используемые входы примитивов, мегафункций и макрофункций
- •Типы портов:
- •Порты экземпляров
- •Структура описания проекта на языкеAhdl
- •Общая структура
- •Раздел Variable
- •Определение заголовка описания (оператор Title)
- •Определение включаемого текста (оператор Include)
- •Определение констант (оператор Constant)
- •Обозначение арифметических выражений (оператор Define)
- •Определение параметров (оператор Parameters)
- •Определение прототипов логических функций (операторFunctionPrototype).
- •Определение порядка следования битов (оператор Options)
- •Контроль арифметических выражений (оператор Assert)
- •Раздел интерфейса проекта (Subdesign)
- •Раздел переменных проекта (Variable)
- •Раздел Variable может включать следующие операторы и конструкции:
- •Раздел Variable может также содержать операторы If Generate, которые могут быть использованы для генерирования объектов, узлов, регистров, конечных автоматов, и псевдоимен конечных автоматов.
- •Раздел Variable имеет следующие характеристики:
- •Объявление объектов (Instance Declarations)
- •Объявление узлов (Node Declarations)
- •Объявление регистров (Register Declarations)
- •Объявление конечных автоматов (State Machine Declarations)
- •Объявления псевдоимен конечных автоматов (Machine Alias Declaration)
- •Раздел тела проекта (Logic)
- •Задание исходных значений (Defaults Statment)
- •Булевские выражения (Boolean Equations)
- •Управляющие булевские выражения (Boolean Control Equations)
- •Оператор проверки списка (Case.)
- •Оператор проверки логического выражения (If Then.)
- •Оператор проверки логического выражения (If Generate )
- •Оператор цикла (For Generate)
- •Использование ссылок на прототипы функций (In-Line Logic Function Reference)
- •Определение таблицы истинности (Truth Table)
- •Применение языкаAhdl
- •Использование шаблонов ahdl
- •Создание текстового выходного файла
- •Использование чисел
- •Использование констант и оценочных функций
- •Использование итеративно-генерируемой логики
- •Использование условно-генерируемой логики
- •Выполнение контроля выражений с помощью оператора Assert
- •Управление логическим синтезом с помощью примитивов lcell & soft
- •Реализация комбинационной логики
- •Реализация логических выражений и уравнений
- •Именование логических операторов и компараторов
- •Использование узлов
- •Использование шин
- •Реализация условной логики
- •Оператор If Then
- •Оператор Case
- •Оператор If Then против оператора Case
- •Создание дешифраторов
- •Использование значений переменных по умолчанию
- •Реализация логики с активными низкими уровнями
- •Реализация двунаправленных выводов
- •Реализация тристабильных шин
- •Реализация последовательностной логики
- •Объявление регистров
- •Объявление регистровых выходов
- •Создание счетчиков
- •Конечные автоматы
- •Реализация конечных автоматов
- •Управление записью, сбросом и разрешением (Clock, Reset & Enable)
- •Присваивание состояний
- •Конечные автоматы с синхронными выходами
- •Конечные автоматы с асинхронными выходами
- •Выход из некорректных состояний
- •Реализация запоминающих устройств
- •Реализация иерархических проектов
- •Использование непараметрических функций
- •Использование параметрических функций
- •Использование заказных мега- и макрофункций
- •Импорт и экспорт конечных автоматов
- •Синтаксис языкаAhdl
- •Стилизация описаний на языкеAhdl
- •"Золотые" правила использования языкаAhdl
- •Контекстно-зависимая справка по языкуAhdl
Реализация иерархических проектов
TDF файлы, написанные на языке AHDL, можно смешивать с другими файлами в проектную иерархию. Файлы низкого уровня могут быть или файлами, поставляемыми Altera-ой, или мега и макрофункциями, определенными пользователем.
Использование непараметрических функций
MAX+PLUS II включает библиотеки примитивов и непараметрических макрофункций. Все логические функции MAX+PLUS II можно использовать для создания иерархических проектов. Мега и макрофункции автоматически устанавливаются в подкаталогах каталога \maxplus2\max2lib, созданного во время инсталляции. Логика примитивов встроена в AHDL.
Существует два способа использовать (т.е. вставлять экземпляр) непараметрическую функцию в языке AHDL:
Объявить переменную для функции, т.е. имя экземпляра, в разделе VariableобъявленияInstanceи использовать порты экземпляра функции в разделеLogic.
Использовать ссылку на логическую функцию в разделе Logic TDF файла.
Объявления Instanceобеспечивают именование узлов, которые полезны для ввода присваиваний ресурсов и моделирования проекта. С другой стороны с помощью ссылок на логические функции, имена узлов, основанные на ID номерах, можно менять при изменениях логики проекта.
Входы и выходы мега и макрофункций должны объявляться с помощью оператора прототипа функции (Function Prototype). Прототипы функций не требуются для примитивов. MAX+PLUS II снабжена файлами включения (Include Files), которые содержат прототипы для всех мега и макрофункций MAX+PLUS II в каталогах \maxplus2\max2lib\mega_lpm и \maxplus2\max2inc, соответственно. С помощью оператора Include, Вы можете передавать содержимое Include файла в файл TDF, для объявления прототипа мега или макрофункции MAX+PLUS II.
Файл macro1.tdf, приведенный ниже, демонстрирует 4-битный счетчик, соединенный с дешифратором 4 в 16. Экземпляры этих функций создаются с помощью объявлений Instanceв разделеVariable.
INCLUDE "4count";
INCLUDE "16dmux";
SUBDESIGN macro1
(
clk : INPUT;
out[15..0] : OUTPUT;
)
VARIABLE
counter : 4count;
decoder : 16dmux;
BEGIN
counter.clk = clk;
counter.dnup = GND;
decoder.(d,c,b,a) = counter.(qd,qc,qb,qa);
out[15..0] =decoder.q[15..0];
END;
Этот файл использует операторы Include, для импортирования прототипов функций для двух макрофункций: 4count и 16dmux. В разделеVariableпеременная counter объявлена как экземпляр функции 4count, а переменная decoder объявлена как экземпляр функции 16dmux. Входные порты функций, в формате <имя экземпляра>.<имя порта>, определены с левой стороны булевых уравнений в разделеLogic, а выходные порты с правой стороны.
Файл macro2.tdf, приведенный ниже, имеет такую же функциональность как и macro1.tdf, но создает экземпляры двух функций с помощью ссылок и узлов q[3..0]:
INCLUDE "4count";
INCLUDE "16dmux";
SUBDESIGN macro2
(
clk : INPUT;
out[15..0] : OUTPUT;
)
VARIABLE
q[3..0] : NODE;
BEGIN
(q[3..0], ) = 4count (clk, , , , , GND, , , , );
% эквивалент подставляемой ссылки со связью по имени порта %
% (q[3..0], ) = 4count (.clk=clk, .dnup=GND); %
% эквивалент подставляемой ссылки со связью по имени порта %
% и предложением RETURNS, определяющим требуемый выход %
% q[3..0] = 4count (.clk=clk, .dnup=GND) %
% RETURNS (qd, qc, qb, qa); %
out[15..0] = 16dmux (.(d, c, b, a)=q[3..0]);
% эквивалент подставляемой ссылки со связью по положению порта %
% out[15..0] = 16dmux(q[3..0]); %
END;
Прототипы функций 4count.inc и 16dmux.inc приведены ниже:
FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a)
RETURNS (qd, qc, qb, qa, cout);
FUNCTION 16dmux (d, c, b, a)
RETURNS (q[15..0]);
Ссылки на 4count и 16dmux появляются в первом и втором булевых уравнениях в разделе Logic, соответственно. Ссылка на 4count использует связь по положению порта, тогда как ссылка на 16dmux использует связь по имени порта. Входные порты обоих макрофункций определяются с правой стороны ссылки, а выходные порты с левой.
Комментарии демонстрируют эквивалентные ссылки для различных видов связи с портом. В ссылке порты с правой стороны символа равенства (=) можно перечислять с помощью или связи по положению или по имени порта. Порты с левой стороны символа равенства всегда используют связь по положению. При использовании связи по положению важен порядок портов, так как существует соответствие один в один между порядком портов в прототипе функции и портами, определенными в разделе Logic. В ссылке на 4count запятые используются как разделители для портов, которые не соединяются точно.
Предложение RETURNSявляется дополнительным с ссылке.RETURNSможно использовать для перечисления подмножества выходов функции, которые используются в экземпляре.
Примитивы и макрофункции всегда имеют значения по умолчанию для не подсоединенных входов. Напротив, мегафункции необязательно имеют их.