- •Учебник по языку 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
Применение языкаAhdl
В данном разделе описывается как разрабатывать проект на AHDL и предлагаются советы по созданию успешных проектов.
Использование шаблонов ahdl
Текстовой редактор позволяет Вам вставить шаблон любого из операторов или разделов AHDL в текущий файл. Шаблоны AHDL - это простой способ ввода синтаксических конструкций языка AHDL, увеличивающий скорость и точность ввода проекта.
Для вставки шаблона AHDL в текущую позицию ввода:
Откройте диалоговое окно AHDL Templateс помощью команды менюTemplate.
Выберите имя в окне Template Section.
Нажмите OK.
После ввода шаблона в Ваш TDF файл, Вы должны заместить все переменные в шаблоне на Вашу собственную логику. Каждое ключевое слово AHDL выделено заглавными буквами, а каждое имя переменной начинается с двух символов подчеркивания (_ _) чтобы помочь Вам идентифицировать их.
Создание текстового выходного файла
Вы можете создать один или больше текстовых выходных файлов проекта (Text Design Output Files (.tdo)), которые содержат AHDL эквивалент полностью оптимизированной логики для устройства, применяющегося в проекте. Кроме того Компилятор создает также один или больше выходных файлов назначения и конфигурации (Assignment & Configuration Output Files (.aco)).
Вы можете сохранить TDO файл как текстовой файл проекта, отредактировать его, определить его как проект с помощью команд меню File: Project NameилиProject Set Project to Current Fileи перекомпилировать проект (Вы должны также сохранить ACO файл как файл Assignment & Configuration File если Вы хотите сохранить распределения для устройства).
TDO файлы облегчают обратную аннотацию и сохраняют имеющийся логический синтез проекта. Для проекта с несколькими устройствами TDO файлы позволяют Вам зафиксировать проект и схему расположения выводов каждого устройства в проекте.
Для создания TDO файла для проекта:
Включите опцию Generate AHDL TDO Fileв команде меню Processing.
Для начала компиляции выберите кнопку Startв окне компилятора или одну из команд в менюFile: Project Save & Compile или Project Save, Compile & Simulate в любом из приложений MAX+PLUS II.
Использование чисел
Числа применяются для определения значений констант в булевских выражениях и уравнениях, в арифметических выражениях, а также значения параметров. AHDL поддерживает все комбинации десятичных, двоичных, восьмеричных и шестнадцатеричных чисел.
Файл decode1.tdf, приведенный ниже, описывает дешифратор адреса, который генерирует активный высокий сигнал разрешения кристалла, когда адрес равен 370 Hex.
SUBDESIGN decode1
(
address[15..0] : INPUT;
chip_enable : OUTPUT;
)
BEGIN
chip_enable = (address[15..0] == H"0370");
END;
В этом простом примере десятичные числа 15 и 0 используются для определения битов шины адреса. Шестнадцатеричное число H"0370" определяет декодируемый адрес.
Использование констант и оценочных функций
Вы можете использовать константу в AHDL файле, давая ей дескриптивное имя на число или текстовую строку. Аналогичным образом Вы можете использовать оценочную функцию, давая ей дескриптивное имя на арифметическое выражение. Это имя, которое можно использовать по всему файлу, может быть более информативным и читаемым, чем число, строка или арифметическое выражение. Например, числовая константа UPPER_LIMIT более информативна, чем число 130.
Константы и оценочные функции особенно полезны, если одно и тоже число, строка или арифметическое выражение повторяются несколько раз в файле: если оно изменяется, то требуется изменить только один оператор. В AHDL константы реализуются с помощью оператора Constant, а оценочные функции с помощью оператораDefine.
AHDL снабжен также предопределенными оценочными функциями USED, CEIL, и FLOOR.
Файл decode2.tdf, приведенный ниже, имеет туже самую функциональность как и decode1.tdf, но использует константу IO_ADDRESS вместо числа H"0370".
CONSTANT IO_ADDRESS = H"0370";
SUBDESIGN decode2
(
a[15..0] : INPUT;
ce : OUTPUT;
)
BEGIN
ce = (a[15..0] == IO_ADDRESS);
END;
Вы можете определить константы и оценочные функции с помощью арифметических выражений. Компилятор оценивает арифметические операторы в арифметическом выражении и сокращает их до числовых значений. Логика для этих выражений не создается.
Файл strcmp.tdf, приведенный ниже, определяет константу FAMILY и использует ее в операторе Assertдля проверки того, является ли текущее семейство устройств FLEX 8000.
PARAMETERS
(
DEVICE_FAMILY
% DEVICE_FAMILY является предопределенным параметром %
);
CONSTANT FAMILY = "FLEX8000";
SUBDESIGN strcmp
(
a : INPUT;
b : OUTPUT;
)
BEGIN
IF (DEVICE_FAMILY == FAMILY) GENERATE
ASSERT
REPORT "Обнаружена компиляция для FLEX8000 "
SEVERITY INFO;
b = a;
ELSE GENERATE
ASSERT
REPORT " Обнаружена компиляция для % семейства"
DEVICE_FAMILY
SEVERITY ERROR;
b = a;
ENDGENERATE;
END;
Файл minport.tdf, приведенный ниже, определяет оценочную функцию MAX, которая гарантирует минимальную ширину порта в разделе Subdesign.
PARAMETERS (WIDTH);
DEFINE MAX(a,b) = (a > b) ? a : b;
SUBDESIGN minport
(
dataA[MAX(WIDTH,0)..0] : INPUT;
dataB[MAX(WIDTH,0)..0] : OUTPUT;
)
BEGIN
dataB[] = dataA[];
END;