
- •Язык 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.
- •Синтаксис
- •Стилизация
- •Золотые правила
- •Контекстно-зависимая помощь
Установка сигналов Clock, Reset & Enable
Сигналы Clock, Reset, и Clock Enable управляют триггерами регистра состояний конечного автомата. Эти сигналы определяются с помощью булевых уравнений управления в разделе Logic.
В файле simple.tdf, приведенном ниже, Clock конечного автомата управляется входом clk. Сигнал асинхронного сброса конечного автомата Reset управляется сигналом reset, который является активным высоким. В этом файле проекта объявление входа ena в разделе Subdesignи булева уравнения ss.ena = ena в разделеLogicподсоединяет сигнал Clock Enable.
SUBDESIGN simple
(
clk, reset, ena, d : INPUT;
q : OUTPUT;
)
VARIABLE
ss: MACHINE WITH STATES (s0, s1);
BEGIN
ss.clk = clk;
ss.reset = reset;
ss.ena = ena;
CASE ss IS
WHEN s0 =>
q = GND;
IF d THEN
ss = s1;
END IF;
WHEN s1 =>
q = VCC;
IF !d THEN
ss = s0;
END IF;
END CASE;
END;
Присваивание состояний
Бит состояния - это выход триггера, который используется конечным автоматом для запоминания однобитного значения. В большинстве случаев Вы должны разрешить компилятору MAX+PLUS II присвоить биты состояния и значения для минимизации требующихся логических ресурсов: логический синтезатор автоматически минимизирует количество необходимых битов состояния, оптимизируя как использование устройства так и производительность.
Однако некоторые конечные автоматы могут работать быстрее, используя значения состояний, которые требуют больше чем минимальное количество битов состояния. Кроме того, Вы можете захотеть, чтобы определенные биты состояния являлись выходами конечного автомата. Для управления этими случаями Вы можете объявить биты конечного автомата и значения в объявлении конечного автомата.
Команда Global Project Logic Synthesis(меню Assign) включает опциюOne-Hot State Machine Encoding(позиционное кодирование состояний), которая автоматически реализует этот тип кодирования для проекта. Кроме того, компилятор автоматически реализует позиционное кодирование для устройств FLEX 6000, FLEX 8000, и FLEX 10K, несмотря на то, включена или нет эта опция. Если Вы точно назначили биты состояния, в добавление к использованию автоматического позиционного кодирования, логика Вашего проекта может быть реализована неэффективно.
Файл stepper.tdf, приведенный ниже, реализует контроллер шагового двигателя.
SUBDESIGN stepper
(
clk, reset : INPUT;
ccw, cw : INPUT;
phase[3..0] : OUTPUT;
)
VARIABLE
ss: MACHINE OF BITS (phase[3..0])
WITH STATES (
s0 = B"0001",
s1 = B"0010",
s2 = B"0100",
s3 = B"1000");
BEGIN
ss.clk = clk;
ss.reset = reset;
TABLE
ss, ccw, cw => ss;
s0, 1, x => s3;
s0, x, 1 => s1;
s1, 1, x => s0;
s1, x, 1 => s2;
s2, 1, x => s1;
s2, x, 1 => s3;
s3, 1, x => s2;
s3, x, 1 => s0;
END TABLE;
END;
В этом примере выходы phase[3..0], объявленные в разделе Subdesign, также объявлены как биты конечного автомата ss в объявлении конечного автомата. Заметьте, что ccw и cw никогда не должны одновременно равняться 1 в одной и той же таблице. AHDL предполагает, что только одно условие в таблице истинности является истинным в одно и тоже время, следовательно, перекрытие комбинаций битов может привести к непредсказуемым результатам.