
- •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 Логические выражения
Любое логическое выражение состоит из операндов, разделённых между собой логическими и арифметическими операторами.
Примеры логических выражений:
Пример операндов
a, b[5..1], 7, VCC
Вызов функции
Out[15..0] = 16dmux(q[3..0]);
Префиксный оператор (! или –), примененный к логическому выражению
!с
Два логических выражения, разделенных бинарным оператором
d1 $ d3
Логическое выражение, заключенное в скобки
(!foo & bar)
Длина результата в каждом логическом выражении равна длине операндов. Вы можете использовать возможность перегрузки имени оператора с целью придания группе действий какого-либо смыслового имени (см. раздел «Перегрузка имени оператора»).
3.7.1 Логические операторы
В таблице 3.4 приведены логические операторы, которые могут использоваться в логических выражениях.
Таблица 3.4 логические операторы, используемые в логических выражениях
Оператор |
Пример |
Описание |
! NOT |
!tomb NOT tomb |
Инвертор |
& AND |
bread & butter bread AND butter |
Логическое И |
!& NAND |
a[3..1] !& b[5..3] a[3..1] NAND b[5..3] |
И-НЕ |
# OR |
trick # tick trick OR tick |
Логическое ИЛИ |
!# NOR |
c[8..5] !# d[7..4] c[8..5] NOR d[7..4] |
ИЛИ-НЕ |
$ XOR |
foo $ bar foo XOR bar |
Логическое Исключающее ИЛИ |
!$ XNOR |
x2 !$ x4 x2 XNOR x4 |
Исключающее ИЛИ-НЕ |
Каждый логический оператор представляет собой вентиль с 2-мя входами (кроме оператора NOT– это логический элемент с одним входом). При составлении логических выражений вы можете использовать как имя оператора, так и его символ. Логическое выражение будет интерпретироваться по-разному в зависимости от типа операндов (узел, группа, число).
Вы можете использовать возможность перегрузки имени оператора с целью придания группе действий какого-либо смыслового имени (см. раздел «Перегрузка имени оператора»).
Для
получения более подробной информации
см. следующие разделы:
Использование арифметических операторов в логических выражениях
Приоритеты логических операторов и операторов сравнения
Операторы сравнения
Описание комбинационных устройств с помощью логических уравнений
Логические операторы
Числа в AHDL
3.7.2 Использование оператораNot
Оператор NOT(!) – префиксный оператор инверсии. Результат инверсии зависит от типа используемого операнда.
Три типа операндов могут использоваться вместе с оператором NOT(!):
Операция инверсии возможна, если в качестве операнда используется узел, константы GND иVCC. Например выражение!аозначает, что сигналапрошел через инвертор.
Если в качестве операнда выступает группа, то каждый член этой группы проходит через инвертор. Например, выражение !a[4..1]интерпретируется как(!a4, !a3, !a2, !a1).
Если в качестве операнда выступает некоторое число, то оно рассматривается как двоичное значение, каждые бит которого инвертируется. Например, выражение !9 (9в двоичной системе счисления = 1001)будет преобразовано в выражениеB”0110”.