─ Ключевые слова, имена и числа должны разделяться соответствующими символами или операторами и/или одним или более пробелами.
─ Комментарии должны быть заключены в символы процента (%). Комментарий может включать любой символ, кроме символа %, поскольку компилятор системы MAX+PLUS II игнорирует всё, заключённое в эти символы. Комментарии не могут быть вложенными.
─ При соединении одного примитива с другим используйте только “разрешённые” связи между ними, не все примитивы могут соединяться друг с другом.
─ Используйте только макрофункции EXPDFF, EXPLATCH, NANDLTCH и NORLTCH, входящие в макробиблиотеку системы MAX+PLUS II. Не создавайте свои собственные структуры перекрёстных связей. Избегайте многократного связывания вместе EXPDFF, EXPLATCH, NANDLTCH и NORLTCH. Многочисленные примеры этих макрофункций должны всегда разделяться примитивами LCELL.
Общие “золотые правила” ввода проекта:
─ Если многочисленные двунаправленные или выходные выводы связаны вместе, разработчик не может использовать оператор Pin Connection для соединения выводов при функциональном моделировании с аппаратной поддержкой или функциональном тестировании.
─ Нет необходимости создавать прототипы функций для примитивов. Однако разработчик может переопределить примитивы в объявлениях прототипов функций для изменения порядка вызова входов в TDF файле.
─ Не редактируйте файл Fit. Если разработчик желает отредактировать назначения для проекта, необходимо сохранить сначала файл Fit как TDF-файл или сделать обратное назначение с помощью команды Project Back-Annotate и отредактировать их с помощью команд Chip to Device, Pin/LC/Chip и Enter Assignments.
─ Если разработчик хочет загрузить регистр по определённому фронту глобального тактового сигнала Clock, фирма Altera рекомендует, когда регистр загружен, использовать для управления вход Clock Enable одного из триггеров типа Enable: DFFE, TFFE, JKFFE или SRFFE.
─ Когда разработчик начинает работать с новым файлом проекта, сразу же необходимо задать семейство ПЛИС, на которые ориентирован проект, с помощью конструкции Family для того, чтобы в дальнейшем иметь возможность воспользоваться макрофункциями, специфичными для данного семейства. Если разработчик не задаст семейство, оно будет считаться таким же, как и в текущем проекте.
─ Используйте опцию Design Doctor для проверки надёжности логики проекта во время компиляции.
─ Предоставляемые по умолчанию фирмой Altera стили для логического синтеза имеют разные установки для разных семейств устройств, что обеспечивает более эффективное использование архитектуры каждого устройства. Когда разработчик использует какой-нибудь из этих стилей, его установки изменятся при переходе к другому семейству устройств. После смены семейства необходимо проверить новые установки стиля.
2.3.2 Элементы языка AHDL
2.3.2.1 Зарезервированные ключевые слова
Зарезервированные ключевые слова используются для следующих целей:
─ для обозначения начала, конца и переходов в объявлениях языка AHDL;
─ для обозначения предопределённых констант, то есть GND и VCC.
Ключевые слова можно использовать как символические имена только если они заключены в одинарных кавычках. Их можно также использовать в комментариях.
Для того чтобы получить контекстную помощь по ключевому слову, нужно убедиться, что текущий файл сохранён с расширением .tdf, затем нажать Shift+F1 в окне текстового редактора Text Editor и щёлкнуть левой кнопкой мыши на ключевом слове.
Altera рекомендует все ключевые слова набирать прописными буквами.
Список всех зарезервированных ключевых слов языка AHDL: FUNCTION; CASE; BITS; DFF; DFFE; ELSE; END; EXP; AND; BEGIN; BURIED; BIDIR; CARRY; CASCADE; CLIQUE; CONNECTED_PINS; CONSTANT; DEFAULTS; DESIGN; DEVICE; ELSIF; OTHERS; TABLE; SRFFE; VCC; WHEN; WITH; XNOR; XOR; GLOBAL; GND; INPUT; IF; IS; JKFF; LATCH; LCELL; MACHINE; MACRO; MCELL; NAND; OF; JKFFE; INCLUDE; NODE; NOR; NOT; OPTIONS; OR; OUTPUT; RETURNS; SOFT; SRFF; STATES; SUBDESIGN; TFF; TFFE; THEN; TITLE; TRI; VARIABLE.
2.3.2.2 Символы
Ниже приведены символы, имеющие определённое значение в языке AHDL. В этот перечень не включены символы, используемые в булевых выражениях как операторы и для операций сравнения.
Таблица 2.4 – Символы AHDL
Символ | Функция |
_ (подчёркивание) | Используемые пользователем идентификаторы. |
- (тире) | Символы в символических именах. |
-- (два тире) | Начинает комментарий в стиле VHDL, который продолжается до конца строки. |
% (процент) | Заключает с двух сторон комментарий стиля AHDL. |
() (круглые скобки) | Заключают и определяют последовательные имена групп. Заключают имена выводов в секции подпроекта (Subdesign Section) и в прототипах функций. Заключают (необязательно) входы и выходы таблиц в объявлении Truth Table (таблицы истинности). Заключают состояния в объявлении цифрового автомата State Machine. Заключают более приоритетные операции в булевых выражениях. Заключают необязательные варианты в секции проекта Design Section (внутри объявления назначения ресурсов Assignment) |
[ ] (квадратные скобки) | Заключают диапазон значений в десятичном имени группы. |
‘…’ (одинарные кавычки) | Заключают символические имена. |
"…" (двойные кавычки) | Заключают строку в объявлении названия Title. Заключают цифры в не десятичных номерах. Заключают путь в объявлении Include. Могут заключать имя проекта и устройства в секции проекта Design Section. Могут заключать имя в объявлении назначения клики графа Clique Assignment. |
. (точка) | Отделяет символические имена переменных в макрофункции или примитиве от имён портов. Отделяет имя файла от расширения. |
… (многоточие) | Разделяет наименьшее и наибольшее значение в диапазонах. |
; (точка с запятой) | Заканчивает объявления и секции в языке AHDL. |
, (запятая) | Разделяет элементы последовательных групп и списков. |
: (двоеточие) | Отделяет символические имена от типов в объявлениях и назначениях ресурсов. |
продолжение таблицы 2.4
Символ | Функция |
@ (собака) | Присваивает символические узлы выводам устройства и логическим ячейкам в объявлениях назначения ресурсов Resource Assignment. |
= (равенство) | Присваивает значения по умолчанию GND и VCC входам в секции подпроекта Subdesign. Присваивает установочные значения в вариантах. Присваивает значения состояниям в машине в машине состояний. Присваивает значения в булевых уравнениях. |
=> (стрелка) | Отделяет входы от выходов в объявлениях таблицы истинности Truth Table. Отделяет предложения с WHEN от булевых выражений в операторе Case. |
2.3.2.3 Имена в кавычках и без кавычек
В языке AHDL есть три типа имён.
─ Символические имена – это определяемые пользователем идентификаторы. Они используются для обозначения следующих частей TDF:
─ внутренних и внешних узлов (вершин);
─ констант;
─ переменных цифрового автомата, битов состояний, имён состояний;
─ примеров (Instance).
─ Имена подпроекта – это определяемые пользователем имена для файлов проекта более низкого уровня. Имя подпроекта должно быть таким же, как имя файла TDF.
─ Имена портов – это символические имена, идентифицирующие вход или выход примитива или макрофункции.
В файле Fit проекта могут появиться генерируемые компилятором имена выводов с символом “тильда” (~). Этот символ зарезервирован для имён, генерируемых компилятором, пользователю запрещается его использовать для обозначения имён выводов, узлов (вершин), групп (шин).
Существует две формы записи для всех трёх типов-имён (символических, проекта и портов): в кавычках (¢) и без кавычек. Если разработчик создаёт символ по умолчанию
для файла TDF, который включает в себя имена портов в кавычках, собственно кавычки не входят в имена выводов. Ниже, в таблице 2.5 указаны все возможные варианты записи имён в языке AHDL.
Таблица 2.5 – Варианты записи имён в AHDL
Разрешённые символы | Имя подпроекта | Символическое имя | Имя порта | |||
Без кавычек | В кавычках | Без кавычек | В кавычках | Без кавычек | В кавычках | |
A-Z | + | + | + | + | + | + |
a-z | + | + | + | + | + | + |
0-9 | + | + | + | + | + | + |
Подчёркивание(_) | + | + | + | + | + | + |
Косая черта (/) | – | – | + | + | + | + |
Тире (–) | – | + | – | + | – | + |
Только цифры(0-9) | + | + | – | + | + | + |
Ключевое слово | – | + | – | + | – | + |
Максимальное число символов | 8 | 8 | 32 | 32 | 32 | 32 |
2.3.2.4 Числа в языке AHDL