
- •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.2.1 Описание комбинационных устройств с помощью логических уравнений
Логическое
выражение – набор узлов, чисел, констант
и других логических выражений, разделенных
между собой операторами. Логическое
уравнение присваивает некоторому узлу
или группе значение логического
выражения.
В этом примере сигнал на выходе out1управляется «логическим И» сигналовa0и инверсным сигналомa1. Сигнал на выходеout1 управляется «логическим ИЛИ» двух сигналовout1 иb.
На рисунке 2.2 представлена схема устройства, описанного в примере 2.6.
Для
получения более подробной информации
см. раздел:
Логические выражения
2.2.2 Объявление узлов
Узел (Node), объявленный в разделе переменных, может быть использован для хранения промежуточного значения выражения.
Узлы очень удобны, если одно и тоже выражение используется большое количество раз, т.к. при этом оно может быть заменено именем узла.
Пример, рассмотренный ниже эквивалентен примеру boole1.tdf, но имеет один выход.
Вэтом примере присутствует определение
узла с именемa_equals_2и присвоение ему значения выраженияa1
& !a0. Использование узлов позволяет
более экономично использовать ресурсы
устройства, если эти узлы используются
в нескольких выражениях.
На рисунке 2.3 представлена схема устройства, описанного в примере 2.6.
2.2.3 Описание групп
Структура, которая может содержать до 256 членов (или бит) и рассматриваемая как совокупность узлов называется группой. Группа может быть как одномерной, двумерной так и n-мерной (см. пример ниже).
В логических выражениях группа может быть использована для присвоения ей значения некоторого выражения, для присвоения ей некоторой другой группы, некоторого узла, «Лог. 1», «Лог. 0», VCCилиGND. Структура Options может быть использована для указания старшего (MSB – Most Significant Bit) и младшего (LSB – Least Significant Bit) битов группы.
После
того как группа определена, ее длину
можно не указывать в выражениях. Например,
группаa[4..1] в
выражениях может
быть использована как
a[]. В следующем примере будут объявлены
несколько групп и показаны простейшие
операции с ними:
В данном примере структура Options использована для указания того, что самый правый бит каждой группы является старшим битом. Таким образом, если на вход а[]подать00то на выходеb[] будет значение1(десятичное).
Основные правила использования групп:
Когда одна группа присваивается другой, равной ей по размеру то каждый бит группы, стоящей справа присваивается соответствующему биту группы, стоящей слева.
В следующем примере каждый бит первой группы присваивается соответствующему биту второй группы. Бит d2присваивается битуq8, битd1– битуq7, а битd0– битуq6:
d[2..0] = q[8..6]
В следующем примере точно также каждый бит первой группы присваивается соответствующему биту второй группы. Бит d1_1присваивается битуq10, битd1_0– битуq9, битd0_1– битуq8, а битd0_0– битуq7:
d[1..0][1..0] = q[10..7]
Когда группе присваивается некоторый узел, то все биты группы «соединяются» с узлом. В следующем примере d2, d1 и d0 «соединяются» с n:
d[2..0] = n
Когда группе присваивается значение VCCилиGND, то все биты группы становятся равны присваиваемому значению. В следующем примереd2, d1 и d0 принимают значениеVCC:
d[2..0] = VCC
Когда группе присваивается какое-либо десятичное значение, например 1, то только младшему биту группы присваивается значение «Лог. 1», всем остальным битам группы присваивается значение «Лог. 0». В следующем примере только d2 станет равным «Лог. 1», а d1 и d0 принимают значение «Лог. 0», т.к 1 = B”001”:
d[2..0] = 1
Когда две группы различного размера присваиваются друг другу, то при этом должно выполняться следующее условие: число бит группы, стоящей в левой части выражения, должно нацело делиться на число бит группы, стоящей в правой части выражения. При этом присвоение будет происходить так как показано в примере:
a[4..1] = b[2..1]
a4 = b2
a3 = b1
a2 = b2
a1 = b1
Для
получения более подробной информации
см. разделы:
Группы
Использование значений «по умолчанию» для переменных
Арифметические выражения