
- •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.4.2 Размеры групп и подгрупп
Размеры линейной группы или группы-матрцы могут состоять из чисел или арифметических выражений, разделенных «..» и заключенных в квадратные скобки. Например:
a[4..1] |
Группа с членами a4, a3, a2, a1 |
d[B”10”..B”00”] |
Группа с членами d2, d1, d0 |
b[2*2..2-1] |
Группа с членами b4, b3, b2, b1. В данном случае размеры групп заданы с помощью арифметического выражения |
q[MAX..0] |
Группа, верхняя граница которой задана с помощью константы MAX, предварительно объявленной в разделе констант |
c[MIN(a, b)..0] |
Группа, верхняя граница которой задана с помощью функции MIN, предварительно объявленной в разделе Define |
Подгруппа – подмножество узлов объявленной группы. Подгруппы некоторой группы могут быть, так же как и сама группа, использованы в выражениях. Например, если вы объявили группу c[5..1], то вы можете использовать следующие её подгруппы:
c[3..1]
c[4..2]
c4
c[5]
(c2, , c4)
Обычно границы группы указываются в убывающем порядке. Если вы хотите изменить этот порядок, то вы должны будете переопределить опцию BIT0в разделе опций.
Для
получения более подробной информации
см. разделы:
Арифметические выражения
Имена в AHDL, использование кавычек
Использование констант и вычисленных функций
Описание групп
3.5 Числа вAhdl
Вы можете использовать двоичную, восьмеричную, десятичную и шестнадцатеричную систему счисления для представления чисел вAHDL. Синтаксис записи чисел в различных системах счисления представлен ниже:
Система счисления |
Числа |
Десятичная |
<набор чисел от 0 до 9> |
Двоичная |
B”<набор 0 (нулей), 1(единиц), Х (Х = безразличное состояние – “don’t care”)>” |
Восьмеричная |
Q”< набор чисел от 0 до 7>” O”< набор чисел от 0 до 7>” |
Шестнадцатеричная |
X”< набор чисел от 0 до 9 и от А до F>” H”< набор чисел от 0 до 9 и от А до F>” |
Примеры чисел:
B”0110X1X10”
Q”4671223”
H”123AECF”
Следующие правила применимы к числам языка:
Компилятор MAX+PLUS IIвсегда интерпретирует числа, стоящие в логических уравнениях, как последовательность бит; числа указывающие границу групп интерпретируются как десятичные значения.
В логических выражениях числа не могут быть присвоены одному узлу, для этого существуют константы VCC иGND.
Для
получения более подробной информации
см. разделы:
Арифметические выражения
Использование чисел
Логические выражения
3.6 Арифметические выражения
Арифметические выражения могут использоваться для описания функции в разделе объявление (Define), для описания констант, для указания границ групп.
В следующем примере граница группы указана с помощью арифметического выражения:
SUBDESIGN foo
(
a[4..2+1-3+8] : INPUT;
)
В следующих примерах, константа и функция описаны с помощью арифметических выражений:
CONSTANT foo = 1 + 2 DIV 3 + LOG2(256);
DEFINE MIN(a, b) = ((a < b) ? a : b);
Операторы и компараторы, стоящие в этих выражениях, позволяют выполнять основные действия над числами. В таблице 3.3 приведен список всех арифметических операторов языка.
Таблица 3.3 Арифметические операторы языка AHDL
Оператор |
Пример |
Описание |
Приоритет |
+ (унарный) |
+1 |
Указание на положительное число |
1 |
- (унарный) |
-1 |
Указание на отрицательное число |
1 |
! |
!a |
Отрицание |
1 |
^ |
а ^ 2 |
Возведение в степень |
1 |
MOD |
4 MOD 2 |
|
2 |
DIV |
4 DIV 2 |
Деление |
2 |
* |
a * 2 |
Произведение |
2 |
LOG2 |
LOG2(4-3) |
Логарифм по основанию 2 |
2 |
+ |
1 + 1 |
Сложение |
3 |
- |
1 – 1 |
Вычитание |
3 |
== |
5 == 5 |
Численное равенство |
4 |
== |
“a”==“b” |
Строковое равенство |
4 |
!= |
5 != 4 |
Неравенство |
4 |
> |
5 > 4 |
Больше |
4 |
>= |
5 >= 5 |
Больше либо равно |
4 |
< |
a < b+2 |
Меньше |
4 |
<= |
a <= b+2 |
Меньше или равно |
4 |
& AND |
a & b a AND b |
И |
5 |
!& NAND |
1 !& 0 1 NAND 0 |
И-НЕ |
5 |
$ XOR |
1 $ 1 1 XOR 1 |
Исключающее ИЛИ |
6 |
!$ XNOR |
1 !$ 1 1 XNOR 1 |
Исключающее ИЛИ – НЕ |
6 |
# OR |
a # b a OR b |
ИЛИ |
7 |
!# NOR |
a # b a NOR b |
ИЛИ-НЕ |
7 |
? |
(5<4) ? 5:4 |
Выбор |
8 |
Унарные операторы «+» и «–» являются префиксными операторами. Оператор «+», стоящий перед числом никак не влияет на интерпретацию числа, он необходим для явного указания положительных величин.
Кроме всего прочего, в арифметических выражениях вы можете использовать две предопределенные функции CEIL и FLOOR, округляющие соответственно до ближайшего большего и ближайшего меньшего числа. Например:
CEIL(LOG2(255)) = 8
FLOOR(LOG2(255)) = 7
Следующие правила применимы к арифметическим выражениям:
В арифметических выражениях вы должны оперировать положительными числами
В случае когда результат функции LOG2не является целым числом, он автоматически округляется до следующего целого числа. НапримерLOG2(257) = 9
Для
получения более подробной информации
см. разделы:
Числа в AHDL