
- •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.8 Двунаправленные выводы
MAX+PLIS II позволяет описывать двунаправленные выводы для устройств фирмы Altera. Двунаправленные выводы могут быть описаны при помощи ключевых словBIDIR иTRI.
В следующем примере показано, как описывать двунаправленные выводы.
В данном примере вход D-триггера используется как двунаправленный вход.
На рисунке 2.8 представлена схема устройства bus_reg2.tdf.
2.2.9 Описание тристабильных выводов
Вы можете создать тристабильный вывод при помощи объединения примитива TRIиOUTPUTпри помощи узла типаTRI_STATE_NODE. При использовании тристабильных выводов необходимо быть уверенным, что хотя бы один выход проектируемого устройства, в данный момент времени, не находиться в высокоимпедансном состоянии.
В следующем примере будет показано, как описывать тристабильные выводы при помощи TRI_STATE_NODE.
В данном примере значения, присваиваемые узлу tnodeобъединяются вместе.
Тип TRI_STATE_NODEиспользуется чаще чем типNODEдля описания тристабильных шин, потому значения присваиваемые переменной типаNODEобъединяются по И или ИЛИ, а значения присваиваемые переменной типаTRI_STATE_NODEпросто замещают друг друга.
Для
получения более подробной информации
см. разделы:
Описание комбинационных устройств с помощью логических уравнений
Объявление узлов
Двунаправленные выводы
2.3 Устройства с памятью
Дискретный автомат, у которого состояние выходных сигналов зависит не только от состояния входных сигналов и от последовательности их подачи, называется дискретным автоматом с памятью. Все устройства с памятью должны иметь хотя бы один триггер. На AHDL автоматы с памятью могут быть описаны при помощи графов состояний или регистров,но наиболее часто используются графы состояний автомата.
В данном разделе будут рассмотрены следующие вопросы:
Использование регистров
Использование регистровых выходов
Создание счетчиков
Для
получения более подробной информации
см. разделы:
Графы переходов
Использование условно генерируемой логики
Использование циклически генерируемой логики
2.3.1 Использование регистров
Регистры предназначены для хранения и выдачи информации. Синхронизация регистра происходит сигналом на входе Clock. Объявления регистров находятся в разделе переменных.
После объявления регистра вы можете соединить его с другой логикой при помощи его портов.
Следующий пример показывает способ описания регистров и основные операции с ним. В примере описан регистр, имеющий восемь входов и восемь выходов. Загрузка информации в регистр происходит по сигналу LOAD, синхронизация –CLK.
В данном примере регистр описан с помощью восьми D-триггеров с разрешением по входу (DFFE). Первое уравнение соединяет входCLK устройстваbur_reg.tdf с синхровходами триггеров. Второе уравнение соединяет входLOADс водами разрешения синхронизации триггеров. Третье уравнение соединяет входы устройства (d[7..0]) с входами триггеров (ff[7..0].d). Четвертое уравнение соединяет выходы триггеров (ff[7..0].q) с выходами устройства (q[7..0]). Вы можете также описыватьT, JKиRSтриггеры с целью последующего их использования. Например, дляT-триггера (TFF) вы должны изменить описание регистра на следующее:
ff[7..0]:TFF;
и третье уравнение изменить так:
ff[].t = d[];
Аналогично для JK-триггера с разрешением по входу (JKFFE) вы должны изменить описание регистра на следующее:
ff[7..0]:JKFFE;
а третье уравнение заменить двумя, соединяющими входы J (ff[].j) иK (ff[].k)с соответствующими сигналами.
Вследующем примере (lpm_reg.tdf)
будет спроектировано тоже устройство
с помощью функцииlpm_dffиз библиотеки параметризированных
модулей.
На
рисунке 2.9 представлена схема устройства,
описанного в примерах 2.19 и 2.20.