
- •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)
2.5.2 Использование параметризированных функций
MAX+PLUS IIсодержит множество параметризированных мегафункций и библиотеку параметризированных модулей (LPM – Library of Parameterized Modules). Так, например, параметры могут быть использованы для указания ширины входной шины элемента «И» и т.д. Параметризированные функции могут включать в себя другие модули, которые могут быть как параметризированными, так и не параметризированными. При установкеMAX+PLUS IIбиблиотеки мега- и макрофункций были скопированы в подкаталог\maxplus2\max2lib.
Объявление и использование параметризированных функций подобно использованию не параметризированных функций (см. предыдущий раздел) за исключением некоторых особенностей:
Описание переменной типа параметризированной функции должно содержать ключевое слово WITH,за которым следует определение значений параметров.
Необходимо убедится в том, что всем обязательным портам назначены необходимые значения
Входы и выходы вашей макро- и мега-функции должны быть объявлены в разделе объявления прототипов функций (Function Prototype Statement). Прототипы стандартных мега- и макрофункций находятся в подкаталогах\maxplus2\max2lib\mega_lmp и\maxplus2\max2inc соответственно. С помощью директивы «INCLUDE» вы можете подключать примитивы к своему проекту.
Далее будет показан способ использования параметризированных функций на примере создания 8-битного сумматора.
Прототип функции lpm_add_sub, находящийся в файлеlpm_add_sub.inc имеет вид:
FUNCTION lpm_add_sub (cin, dataa[LPM_WIDTH-
1..0], datab[LPM_WIDTH-1..0], add_sub, clock, aclr)
WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION,
LPM_PIPELINE, ONE_INPUT_IS_CONSTANT)
RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
Впримере 2.33 будет спроектировано то же
устройство, что и в примере 2.32, но при
этом будет использован другой способ
объявления параметризированной функции.
2.5.3 Создание и использование макрофункций
На языке AHDL вы можете создавать, а затем использовать собственные мега- и макрофункции.
После того как вы описали свою функцию необходимо выполнить несколько операций, для того чтобы её можно было использовать в других файлах проекта:
Скомпилируйте и протестируйте работу функции
Если вы планируете использовать какую-либо функцию в нескольких проектах, то вам необходимо будет добавить путь к файлу, в котором описана функция, к списку пользовательских библиотек с помощью команды User Libraries(менюOptions). Если вы намерены использовать данную функцию только в текущем проекте, то сохраните её в том же каталоге что и проект.
В текстовом редакторе необходимо будет создать файл, содержащий прототип функции, и символьный файл, необходимый для использования функции в графическом редакторе. Для этого:
Для создания файла, содержащего прототип функции (файл с расширением .inc) необходимо выполнить командуCreate Default Include File (менюFile). После создания такого файла вы можете использовать описанную функцию в файлах проекта более высокого уровня при помощи директивы «INCLUDE»
Для создания символьного файла, необходимого для использования функции в графическом редакторе, выполните команду Create Default Symbol (менюFile)
После того как вы выполните вышеуказанные операции, станет возможным использование описанной функции в любых файлах текущего и других проектов.