- •Язык 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.
- •Синтаксис
- •Стилизация
- •Золотые правила
- •Контекстно-зависимая помощь
Реализация lcell & soft примитивов
Вы можете ограничить размер (масштаб) логического синтеза путем изменения переменных NODEнаSOFTиLCELLпримитивы.NODEпеременные иLCELLпримитивы обеспечивают наибольшее управление всем логическим синтезом.SOFTпримитивы не предусмотрены для управления всем логическим синтезом.
NODEпеременные, объявленные с помощью объявленияNodeв разделе Variable налагают несколько ограничений на логический синтез. Во время синтеза логический синтезатор заменяет каждый экземпляр переменнойNODEлогикой, которая представляет переменную. Затем он минимизирует логику для подгонки в одну логическую ячейку. Обычно этот метод дает самую большую скорость, но может приводить к слишком сложной логике.
SOFTбуферы обеспечивают больший контроль по использованию ресурсов, чемNODEпеременные. Логический синтезатор выбирает, когда заместить экземплярыSOFTпримитивов с помощьюLCELLпримитивов.SOFTбуферы могут помочь в исключении слишком сложной логики и упрощении подгонки проекта, но могут увеличить использование логических ячеек и уменьшить быстродействие.
LCELLпримитивы обеспечивают наибольшее управление. Логический синтезатор минимизирует всю логику, которая управляетLCELLпримитивом, так что она занимает только одну логическую ячейку.LCELLпримитивы всегда реализуются в логической ячейке и никогда не удаляются из проекту даже если они запитываются одним входом. В последнем случае Вы можете использоватьSOFTпримитив вместоLCELLпримитива, который будет удаляться во время логического синтеза.
MAX+PLUS II обеспечивает несколько логических опций, которые автоматически вставляют или удаляют SOFTиLCELLбуферы в соответствующих местах проекта.
Следующая иллюстрация демонстрирует два варианта TDF файла: один реализуется с помощью NODEпеременных, а другой сSOFTпримитивами. В nodevar переменная odd_parity объявлена какNODEи затем ей присвоено значение булева выражения d0 $ d1 $ ... $ d8. В softbuf компилятор замещает некоторыеSOFTпримитивы наLCELLпримитивы во время обработки для улучшения использования устройства.
TDF с NODE переменными: TDF с SOFT примитивами:
SUBDESIGN nodevar SUBDESIGN softbuf
( (
) )
VARIABLE VARIABLE
odd_parity : NODE; odd_parity : NODE;
BEGIN BEGIN
odd_parity = odd_parity =
d0 $ d1 $ d2$ SOFT(d0 $ d1 $ d2) $
d3 $ d4 $ d5$ SOFT(d3 $ d4 $ d5) $
d6 $ d7 $ d8; SOFT(d6 $ d7 $ d8);
END; END;
Реализация ram & rom
MAX+PLUS II (и AHDL) снабжены несколькими LPM и мегафункциями, которые позволяют Вам реализовать RAM и ROM в устройствах MAX+PLUS II. Универсальная, масштабируемая природа каждой из этих функций гарантирует, что Вы можете использовать их для реализации любых поддерживаемых типов RAM или ROM в MAX+PLUS II.
Altera не рекомендует создавать заказные логические функции для реализации памяти. Вы должны использовать поставляемые Altera функции во всех случаях, где Вы хотите реализовать RAM или ROM.
Можно использовать следующие мегафункции для реализации RAM и ROM в MAX+PLUS II:
Имя |
Описание |
lpm_ram_dq |
Синхронная или асинхронная память с раздельными портами ввода вывода |
lpm_ram_io |
Синхронная или асинхронная память с единственным портов I/O |
lpm_rom |
Синхронная или асинхронная память только для считывания |
csdpram |
Двухпортовая память |
csfifo |
Буфер FIFO |
В этих LPM функциях параметры используются для определения ширины входных и выходных данных; количество запоминаемых слов; регистровые или нет входы данных, адреса, управления и выхода; должен ли включаться файл начального содержимого памяти для блока RAM и т.д.