
- •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.3 Использование операторовAnd, nand, or, nor, xor, xnor
Результат операций AND, NAND, OR, NOR, XOR, XNORзависит от типа используемых операндов.
Если оба операнда являются константами (VCC, GND) или узлами, то выполняется обычная операция логического И, ИЛИ и т.д., например: (a & b)
Если оба операнда являются группами, то операция применяется к соответствующим элементам обеих групп, при этом группы должны быть одинакового размера. Например,выражение(a, b, c) # (d, e, f)преобразуется как(a # d, b # e, c # f).
Если один из операндов является константой (VCC или GND) или узлом, а второй – группа, то при этом логическая операция будет применяться следующим образом:a & b[4..1] будет преобразовано в: (a & b4, a & b3, a & b2, a & b1).
Если оба операнда являются числами, то операция будет применена к соответствующим разрядам двоичной записи этих чисел.Например, операция(3 # 8)будет выполняться так: числа 3 и 8 будут преобразованы в двоичную систему счисления:32 = B”0011”, 82 = B”1000”, а затем непосредственно будет выполнена операция «Логическое ИЛИ» и в результате получим:B”1011”.
Если один из операндов является числом, а второй – группа, то операция будет выполняться так: число будет переведено в двоичную систему счисления и затем операция будет применена к соответствующими разрядами числа и элементам группы. Например, операция (a, b, c)&1будет выполняться так: 1 будет переведена в двоичную систему счисления (12= 001), а затем будет выполнена операция «Логическое И»:(a, b, c) & (0, 0, 1)что эквивалентно следующему:(a&0 , b&0, c&1).
Использование константы VCCотличается от использования константы1. Это отличие будет показано на примерах:
(a, b, c) & 1 = (0, 0, c)
(a, b, c) & VCC = (a, b, c)
3.7.4 Использование арифметических операторов в логических выражениях
Арифметические операторы могут использоваться в логических выражениях для реализации операций сложения, вычитания чисел и групп. В таблице 3.5 приведены те операторы, которые могут использоваться в логических уравнениях.
Таблица 3.5 Арифметические операторы, используемые в логических выражениях
Оператор |
Пример |
Описание |
+ (унарный) |
+1 |
Указание на положительную величину |
- (унарный) |
-a[4..1] |
Указание на отрицательную величину |
+ |
count[7..0] + delta[7..0] |
Сложение |
- |
rightmost_x[] – leftmost_y[] |
Вычитание |
Унарные операторы «+» и «–» являются префиксными операторами. Оператор «+», стоящий перед числом никак не влияет на интерпретацию числа, он необходим для явного указания положительных величин.
Следующие правила применимы к использованию арифметических операторов:
Все арифметические операции определены для двух операндов, являющихся группами или числами
Если оба операнда являются группами, то они должны быть одинаковой длины
Если оба операнда являются числами, то наиболее короткий операнд будет расширен до более длинного
Если один операнд является числом, а второй – группой, то первый операнд (число) будет представлен в двоичном в виде с числом знаков равным длине группы. Если при преобразовании произойдет потеря значимых бит, то компилятор MAX+PLUS IIвыдаст сообщение об ошибке.
В
ы можете использовать возможность перегрузки имени оператора с целью придания группе действий какого-либо смыслового имени (см. раздел «Перегрузка имени оператора»).
Множество арифметических операторов, разрешенных для использования в логических выражениях, является подмножеством множества всех арифметических операторов.