
- •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.3 Имена вAhdl, использование кавычек
В языке есть три типа имен:
Имена переменных, заданные пользователем. Имена переменных используются для обозначения следующих структур языка
Внутренних и внешних узлов и групп
Констант
Графов переходов
Параметров
Перегруженных операторов
Сегментов памяти
Имена устройств проекта. Имя устройства должно совпадать с именем .tdfфайла.
Имена портов – символьные имена, идентифицирующие входы и выходы логических функций.
Возможны два вида записи символьных имен: обычна (без кавычек) и заключенная в одинарные кавычки (‘). Если вы создаете символьный файл с целью последующего использования его в текстовом редакторе, то кавычки, встречающиеся в именах портов, в символьный файл не включаются.
В таблице 3.2 приведены характеристики имен устройств, имен портов ввода/вывода и имен переменных.
Таблица 3.2 Характеристики имен устройств, портов ввода/вывода и переменных
Допустимые символы |
Имя устройства |
‘Имя устройства’ |
Имя переменной |
‘Имя переменной' |
‘Имя порта’ |
‘Имя порта’ |
A–Z |
|
|
|
|
|
|
a–z |
|
|
|
|
|
|
0-9 |
|
|
|
|
|
|
Подчерки-вание (_) |
|
|
|
|
|
|
Слеш (/) |
|
|
|
|
|
|
Тире (-) |
|
|
|
|
|
|
Только цифры(0-9) |
|
|
|
|
|
|
Ключевое слово |
|
|
|
|
|
|
Идентифи-катор |
|
|
|
|
|
|
Макс. Число символов |
32 |
32 |
32 |
32 |
32 |
32 |
Пример синтаксически правильных символьных имен:
A /a1 ‘-bar’ ‘table’ ‘1221’
Пример синтаксически неправильных символьных имен:
-foo node 55 ‘bowling4$’ ‘a_name_more_then_32_charecters’ ‘has a space’
3.4 Группы
Имена переменных одного типа могут быть объявлены и использованы в выражениях как группы.
Группы, содержащие до 256 членов (ли бит), рассматриваются как набор узлов, операции над которыми производятся как над одним целым.
3.4.1 Способы объявления и записи групп
В AHDLгруппы могут быть объявлены и записаны следующими 3-мя способами:
Имя линейной группы (вектора) состоит из символьного имени группы, за которым следует ее длина в квадратных скобках, например a[4..1].
После того как группа была объявлена, ее размерность в выражениях можно не указывать, так, например, следующие две записи полностью эквивалентны друг другу a[4..1]иa[].
Одно число может быть использовано для указания размерности группы, например a[5]. Однако, такое описание указывает не на группу, а на единственную переменную с именемa5.
Имя группы, представляющей собой матрицу, состоит из собственно имени и размеров группы (матрицы), заключенных в квадратные скобки, например d[6..0][2..0]. При описании группы следует помнить, что имя группы вместе с описанием ее размеров не должно превышать 32 символов.
Матрицы наиболее часто используются при реализации шин в проектах с двумерной топологией. После того как группа была объявлена, ее размерность в выражениях можно не указывать, так, например, следующие две записи полностью эквивалентны друг другу d[6..0][2..0] иd[][].
Отдельный узел name[x][y], принадлежащий группе, в выражении может быть указан какnamex_y, гдеx и y координаты узла в матрице.
Существует еще один способ задания группы – указать полный перечень её элементов через запятую и заключит его в круглые скобки. Например: (a, b, c[5..1]).
Ниже будут приведены различные способы задания и использования групп:
b[5..0]
(b5, b4, b3, b2, b1, b0)
b[]
b[log2(256)..1+2-1]
b[2^8..3 mod 1]
b[2*8..8 div 2]