
- •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.7.5 Операторы сравнения
Существует два типа операторов сравнения, используемых для сравнения групп и узлов: арифметические и логические. В таблице 3.6 приведены те операторы сравнения, которые могут использоваться в логических уравнениях.
Таблица 3.6 Операторы сравнения, используемые в логических выражениях
Оператор |
Пример |
Описание |
== (логический) |
addr[19..4] == H”B800” |
Проверка на равенство |
!= (логический) |
b1 != b3 |
Проверка на не равенство |
< (арифметический) |
fame[] < power[] |
Меньше |
<= (арифметический) |
money <= power[] |
Меньше либо равно |
> (арифметический) |
love[] > money[] |
Больше |
=> (арифметический) |
delta[] >= 0 |
Больше либо равно |
С помощью логических операторов сравнения можно сравнивать как отдельные узлы и группы, так и числа, не содержащие символов X (don’t care). При сравнении следует помнить о том, что сравниваемые группы должны быть одинаковой длины. Если в случае сравнения условие сравнения выполняется, то возвращается «Лог. 1» (VCC), если нет – «Лог. 0» (GND).
С помощью арифметических операторов сравнения групп одинаковой длины и чисел. В этом случае сравнение групп происходит следующим образом: сначала группы представляются в виде положительных двоичных чисел, а затем сравниваются.
Вы можете вместо операторов сравнения использовать функцию lpm_compare из библиотеки параметризированных модулей. Для получения более подробной информации по этому вопросу см. раздел «Assigning an Individual Logic Option or Synthesis Style» в помощи MAX+PLUS II.
3.7.6 Приоритеты логических операторов и операторов сравнения
Действия над операндами, разделенными арифметическими или логическими операторами, выполняются в порядке, определённом их приоритетами. Приоритет какой-либо части выражения можно изменить, заключив его в круглые скобки. В таблице 3.7 приведены приоритеты всех логических операторов.
Таблица 3.7 Приоритеты логических операторов
Приоритет |
Оператор |
1 |
- (указание на отрицательное число) |
1 |
! (инверсия) |
2 |
+ (сложение) |
2 |
- (вычитание) |
3 |
== (проверка на равенство) |
3 |
!= (проверка на не равенство) |
3 |
< (меньше) |
3 |
<= (меньше либо равно) |
3 |
> (больше) |
3 |
=> (больше либо равно) |
4 |
& (логическое И) |
4 |
!& (И-НЕ) |
5 |
$ (логическое исключающее ИЛИ) |
5 |
!$ (исключающее ИЛИ-НЕ) |
6 |
# (логическое ИЛИ) |
6 |
!# (логическое ИЛИ-НЕ) |
Множество арифметических операторов, разрешенных для использования в логических выражениях, является подмножеством множества всех арифметических операторов.
3.8 Мегафункции
Мегафункции MAX+PLUS II это набор логических функций, включенных в библиотеку параметризированных модулей (LPM – Library of Parameterized Modules). Функции, входящие в составLPMможно использовать в своих проектах.LPM-функции находятся в подкаталоге \maxplus2\max2lib\mega_lpm. Кроме того, в этом же каталоге расположены файлы прототипов для всех мегафункций.
Любые мегафункции могут быть использованы в проектах. На этапе компиляции MAX+PLUS IIанализирует логику работы устройства, и автоматический «выбрасывает» ненужные элементы, могущие снизить быстродействие.
В таблице 3.8 приведены все мегафункции MAX+PLUS II.
Таблица 3.8 Мегафункции MAX+PLUS II
Тип |
Имя |
Описание |
Вентили |
Lpm_and |
Элемент «И» |
Lpm_bustri |
Тристабильный буфер | |
Lpm_clshift |
Комбинационный сдвиговый модуль | |
Lpm_constant |
| |
Lpm_decode |
Декодер | |
Lpm_inv |
Инвертор | |
Lpm_mux |
Мультиплексор | |
Lpm_or |
Элемент «ИЛИ» | |
Lpm_xor |
Элемент «Исключающее ИЛИ» | |
Арифметические компоненты |
Lpm_abs |
Абсолютное значение |
Lpm_add_sub |
Элемент сложения (сумматор)/вычитания | |
Lpm_decode |
Элемент сравнения | |
Lpm_counter |
Счетчик | |
Lpm_mult |
Элемент умножения | |
Элементы памяти |
Lpm_dff |
D-триггер |
Lpm_latch |
Защелка | |
Lpm_ram_dq |
Синхронная или асинхронная память с раздельными портами ввода и вывода | |
Lpm_ram_io |
Синхронная или асинхронная память одним портом ввода/вывода | |
Lpm_rom |
Синхронный или асинхронный модуль ROM | |
Lpm_tff |
T-триггер | |
Csdpram |
Cycle-shared RAM | |
csfifo |
Cycle-shared FIFOбуфер | |
Другие |
a6502 |
Микропроцессор 6502 |
ntcs |
NTSC генератор | |
pll |
Детектор переднего и заднего фронтов сигналов |