- •Язык ahdl
- •Введение
- •Как пользоваться языком ahdl
- •Вставка шаблонов ahdl
- •Создание текстового выходного файла
- •Использование чисел
- •Использование констант и оценочных функций
- •Комбинаторная логика
- •Реализация булевых выражений и уравнений
- •Именование булевых операторов и компараторов
- •Объявление узлов
- •Определение шин
- •Реализация условной логики
- •Оператор If Then
- •Оператор Case
- •Оператор If Then против оператора Case
- •Создание дешифраторов
- •Использование для переменных значений по умолчанию
- •Реализация логики с активными низкими уровнями
- •Реализация двунаправленных выводов
- •Реализация тристабильных шин
- •Последовательностная логика
- •Объявление регистров
- •Объявление регистровых выходов
- •Создание счетчиков
- •Конечные автоматы
- •Реализация конечных автоматов
- •Установка сигналов Clock, Reset & Enable
- •Присваивание состояний
- •Конечные автоматы с синхронными выходами
- •Конечные автоматы с асинхронными выходами
- •Выход из некорректных состояний
- •Реализация иерархических проектов
- •Использование непараметрических функций
- •Использование параметрических функций
- •Использование заказных мега и макро функций
- •Импорт и экспорт конечных автоматов
- •Реализация lcell & soft примитивов
- •Реализация ram & rom
- •Использование итеративно-генерируемой логики
- •Использование условно-генерируемой логики
- •Использование оператора Assert
- •Элементы
- •Зарезервированные слова
- •Зарезервированные идентификаторы
- •Символы
- •Строковые и символьные имена
- •Диапазоны и поддиапазоны шин
- •Числа в ahdl
- •Арифметические выражения
- •Встроенные оценочные функции
- •Булевы выражения
- •Логические операторы
- •Булевы операторы, использующие not
- •Булевы операторы, использующие and, nand, or, nor, xor, и xnor
- •Арифметические операторы в булевых выражения
- •Компараторы
- •Приоритеты булевых операторов и компараторов
- •Логические функции
- •Мегафункции/lpm
- •Макрофункции
- •Примитивы
- •Структура проекта.
- •Раздел Variable
- •Оператор Title
- •Оператор Parameters
- •Оператор Include
- •Оператор Constant
- •Оператор Define
- •Оператор Function Prototype.
- •Оператор Options
- •Оператор Assert
- •Раздел Subdesign
- •Раздел Variable
- •Раздел Variable может включать следующие операторы и конструкции:
- •Раздел Variable имеет следующие характеристики:
- •Описание объектов.
- •Описание узлов.
- •Объявление регистров.
- •Объявление конечных автоматов.
- •Объявления псевдоимен конечных автоматов.
- •Раздел Logic
- •Булевские выражения.
- •Управляющие булевские выражения.
- •Оператор Case.
- •Оператор Defaults.
- •Оператор If Then.
- •Оператор If Generate
- •Оператор For Generate.
- •Подставляемая ссылка для реализации логической функции (In-Line Logic Function Reference).
- •Оператор Truth Table.
- •Синтаксис
- •Стилизация
- •Золотые правила
- •Контекстно-зависимая помощь
Комбинаторная логика
Комбинационная логика реализуется на языке AHDL с помощью булевых выражений и уравнений, таблиц истинности, и множества мега и макрофункций. Примеры комбинационных функций включают дешифраторы, мультиплексоры и сумматоры.
Реализация булевых выражений и уравнений
Булевы выражения являются набором узлов, чисел, констант и других булевых выражений, разделенных операторами и/или компараторами и дополнительно сгруппированных с помощью скобок. Булево уравнение устанавливает узел или шину равной величине булевого выражения.
Файл boole1.tdf, приведенный ниже, демонстрирует два простых булевых выражения, представляющие два логических вентиля.
SUBDESIGN boole1
(
a0, a1, b : INPUT;
out1, out2 : OUTPUT;
)
BEGIN
out1 = a1 & !a0;
out2 = out1 # b;
END;
В этом файле выход out1 является логическим И входов а1 и инверсии а0, а выход out2 логическим ИЛИ out1 и b. Порядок следования их в файле не важен.
Именование булевых операторов и компараторов
Вы можете именовать булевы операторы и компараторы для облегчения ввода присваивания ресурсов и интерпретации раздела уравнений в файле отчета проекта.
Файл boole3.tdf, приведенный ниже, идентичен с файлом boole1.tdf, но использует именованные операторы. Имя оператора отделяется от оператора знаком двоеточия; имя может содержать до 32 символов.
SUBDESIGN boole3
(
a0, a1, b : INPUT;
out1, out2 : OUTPUT;
)
BEGIN
out1 = a1 tiger:& !a0;
out2 = out1 panther:# b;
END;
Следующие отрывки из файла отчета показывают различие между boole3.rpt и boole1.rpt для первых двух уравнений.
-- boole3.rpt equations:
-- Node name is 'out1' from file "boole3.tdf" line 7, col 2
-- Equation name is 'out1', location is LC3_A1, type is output
out1 = tiger~0;
-- Node name is 'tiger~0' from file "boole3.tdf" line 7, column 18
-- Equation name is 'tiger~0', location is LC2_A1, type is buried
tiger~0 = LCELL( _EQ002);
_EQ002 = !a0 & a1;
-- boole1.rpt equations:
-- Node name is 'out1' from file "boole1.tdf" line 7, col 2
-- Equation name is 'out1', location is LC3_A1, type is output
out1 = _LC2_A1;
-- Node name is ':33' from file "boole1.tdf" line 7, col 12
-- Equation name is '_LC2_A1', type is buried
LC2_A1 = LCELL( _EQ001);
_EQ001 = !a0 & a1;
В зависимости от логики уравнения именованный оператор может представлять несколько имен узлов, однако, все имена относятся к имени оператора и, поэтому, узлы легче распознаются в файле отчета. В файле boole3.rpt единственный узел, tiger~0, создается для первого уравнения. В файле boole1.tdf компилятор связывает цепь ID :33 с тем же самым узлом.
После того, как Вы откомпилировали проект Вы можете использовать имена узлов, приведенные в файле отчета, для введения присваивания ресурса для дальнейшей компиляции, даже если логика проекта изменена. Имена логических ячеек, созданные из именованных операторов, остаются постоянными, если Вы изменили несвязанную с ними логику в файле. Например, Вы можете ввести присваивание для узла tiger~0. В противоположность этому, если операторы неименованы, доступны только ID номера цепей, и эти имена произвольно переназначаются при каждой компиляции.