
- •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.5.4 Экспорт и импорт графов переходов автоматов
Вы можете производить импорт и экспорт графов переходов автомата (т.е. самих автоматов) путем указания специальных входных и выходных портов:MACHINE INPUT иMACHINE OUTPUT в разделе описания входов и выходов устройства. Прототип функции, являющийся «отображением» устройства должен указывать какие входы имеют типMACHINE INPUT илиMACHINE OUTPUT с помощью ключевого словаMACHINEперед именем входа/выхода.
Входы/выходы
типаMACHINE
INPUT
илиMACHINE
OUTPUTне могут использоваться в
файле верхнего уровня проекта.
Вы можете переименовать автомат на промежуточное имя путем введения псевдонима в разделе объявления переменных. Затем вы можете использовать это имя вместо оригинального имени автомата.
В
SUBDESIGN
ss_def ( clk,
reset, count : INPUT; ss_out :
MACHINE OUTPUT; ) VARIABLE ss:
MACHINE WITH STATES (s1, s2, s3, s4, s5); BEGIN ss_out
= ss;
CASE
ss IS WHEN
s1=> IF
count THEN ss = s2; ELSE ss = s1; END IF; WHEN
s2=> IF
count THEN ss = s3; ELSE ss = s2; END IF; WHEN
s3=> IF
count THEN ss = s4; ELSE ss = s3; END IF; WHEN
s4=> IF
count THEN ss = s5; ELSE ss = s4; END IF;
Впримереss_use.tdf показан прием
импортирования автомата через входMACHINE INPUT.
В примере top1.tdf используются уже описанные функцииss_def иss_use. Обратите внимание на то, что прототипы функцийss_def иss_useсодержат ключевое словоMACHINE, предназначенного для идентификации порта типаMACHINE INPUT илиMACHINE OUTPUT.
На рисунке 2.17показана схема устройстваtop1.tdf (из примера 2.36)
Другой способ соединения файлов ss_def иss_use(эквивалентный способу из примераtop1.tdf) показан в примереtop2.tdf.
Для
получения более подробной информации
см. разделы:
Графы переходов
Использование параметризированных функций
Использование не параметризированных функций
Создание и использование макрофункций
2.6 ИспользованиеLcell иSofTпримитивов
Вы можете ограничить степень логического синтеза путем замены переменных типа NODEна примитивыLCELLиSOFT. Переменные типаNODEи примитивыLCELLпозволяют полностью контролировать процесс логического синтеза, примитивыSOFTдают меньший контроль над этим процессом.
Переменные типа NODE, объявленные в разделе объявления переменных, оказывают малое влияние на процесс логического синтеза. Во время синтеза программа заменяет каждое вхождение переменной логикой, которую эта переменная представляет. Затем происходит минимизация логических функций с целью помещения их в одну логическую ячейку. При использовании этого метода обычно получается выигрыш в скорости работы проектируемого устройства.
SOFTбуфера позволяют получить больший контроль на использованием ресурсов. На этапе логического синтеза компилятор решает, какиеSOFTбуфера заменитьLCELL примитивами. При использованииSOFTпримитивов упрощается процесс помещения устройства в конкретную микросхему, но при этом несколько уменьшается скорость работы устройства.
LCELL примитивы позволяют получить наибольший контроль за процессом логического синтеза.
Впримере 2.38 приведены два видаTDF,
в одном из них показан способ примененияLCELLпримитивов, а в другом переменных типаNODE.В
примереnodevar
объявлена переменная типаNODEи ей присвоено значение логического
выраженияd0
$ d1 $ . . . $ d8. В примереnodevar
объявлена переменнаяodd_parity
типаNODEи ей присвоено значение логического
выраженияd0
$ d1 $ . . . $ d8. В примереsoftbufкомпилятор на этапе логического синтеза
некоторыеSOFTпримитивы заменитLCELL
примитивами.
2.7 RAM & ROM
MAX+PLUS II (и AHDL) имеет несколько функций в библиотеке LPM, позволяющих реализовывать модули RAM и ROM.
Корпорация Altera не рекомендует создавать свои функции, реализующие модули RAM и ROM, а предлагает пользоваться стандартными.
Следующие мегафункции могут быть использованы для реализации устройств памяти:
Название функции |
Описание |
lpm_ram_dq |
Синхронная или асинхронная память с раздельными портами ввода и вывода |
lpm_ram_io |
Синхронная или асинхронная память одним портом ввода/вывода |
lpm_rom |
Синхронный или асинхронный модуль ROM |
csdpram |
Cycle-shared RAM |
csfifo |
Cycle-shared FIFOбуфер |
При использовании этих модулей вам будет необходимо назначить ширину входных и выходных данных, число слов данных помещенных в память, указать когда входы данных, адреса, управления являются регистровыми, а когда нет и т.д.