- •Учебник по языку 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
Определение параметров (оператор Parameters)
Оператор Parameters позволяет определять один и более параметров, управляющих экземпляром (an instance)параметрической мега- или макрофункции. Следующий пример демонстрирует использование оператора Parameters:
PARAMETERS
(
FILENAME= "myfile.mif", --optionaldefaultvaluefollows"="sign
WIDTH,
AD_WIDTH = 8,
NUMWORDS = 2^AD_WIDTH
);
При использовании оператора Parameters необходимо соблюдать следующие правила:
Оператор Parameters начинается с ключевого слова PARAMETERS, за которым следует список из одного или более параметров и необязательных значений по умолчанию. Весь список заключается в круглые скобки.
Параметры в списке отделяются друг от друга запятыми; имена параметров отделяются от необязательных значений по умолчанию символом (=). В примере, показанном выше, только параметр WIDTH не имеет предопределенного значения.
Имена параметров могут представлять собой либо имена, определенные пользователем, либо имена, предопределенные фирмой Altera .
Значения параметров могут представлять собой текстовые строки, заключенные в двойные кавычки. В том случае, если значения параметров не заключены в двойные кавычки, компилятор пытается интерпретировать их как арифметические выражения; если это не удается, они интерпретируются как строки.
Оператор Parameters заканчивается символом (;).
После того, как параметр был определен, он может использоваться во всем текстовом файле проекта.
Параметр может быть использован лишь после того, как он был определен.
Имена параметров должны быть уникальными.
Имя параметра не должно содержать пробелов. Для разделения слов и лучшего восприятия необходимо пользоваться символом подчеркивания.
Оператор Parameters может использоваться произвольное количество раз в рамках одного текстового файла проекта.
Oператор Parameters должен быть расположен за пределами других разделов языка AHDL.
Параметры, используемые для определения других параметров, должны быть определены ранее.
Использование круговых ссылок недопустимо. Следующий пример демонстрирует использование недопустимой круговой ссылки:
PARAMETERS
(
FOO = BAR;
BAR = FOO;
);
На этапе компиляции текстового файла проекта, компилятор осуществляет поиск значений параметров в следующей последовательности:
Производится анализ экземпляра(an instance)логической функции. Например, в текстовом файле проекта, вобъекте (an instance), созданном путемобъявления объекта (Instance Declaration)илиподставляемой ссылкой (in-line reference), можно определить те параметры, которые будут использоваться, а также в необязательном порядке определить их значения. В графическом файле проекта (GDF - Graphic Design File) можно выбрать символ и, используя командуEdit Ports/Parameters из менюSymbol, присвоить значения параметров для этого объекта.
Производится анализ экземпляралогической функции более высокого уровня иерархии. Значения параметровэкземпляралогической функции более высокого уровня иерархии распространяются на подфункции данной логической функции, еслиэкземплярыэтих логических подфункций не имеют своих значений для данных параметров.
Производится анализ глобальных значений параметров проекта по умолчанию, определенных командой Global Project Parameters из менюAssign. Эти значения хранятся в файле установок и конфигурации (Assignment&Configuration file - .acf) проекта.
Просматриваются необязательные значения по умолчанию, указываемые в разделе Parameters текстового файла проекта (TDF), или с помощью примитива PARAM в графическом файле проекта, описывающем логическую функцию. Эти значения по умолчанию используются только в том файле, в котором они приводятся и не распространяются на подпроекты, входящие в данный проект.