- •Предисловие
- •1. Структура проекта на ahdl
- •Оператор options
- •Оператор assert
- •Раздел variable используется для описания и/или генерации переменных, используемых в разделе Logic.
- •Раздел Variable может также содержать операторы If Generate, которые могут быть использованы для генерирования объектов, узлов, регистров, конечных автоматов, и псевдоимен конечных автоматов.
- •2. Элементы языка ahdl
- •2.1. Зарезервированные слова и идентификаторы
- •2.2. Символы
- •2.3. Строковые и символьные имена
- •2.4. Числа
- •2.5. Арифметические и логические выражения
- •2.6. Встроенные оценочные функции
- •2.7. Шины (группы), диапазоны и поддиапазоны шин
- •3. Примитивы и мегафункции
- •3.1. Обращение к примитивам и мегафункциям
- •1. Непосредственное обращение
- •2. Использование элемента как переменной
- •3.2. Примитивы
- •Примитивы триггеров
- •3.3. Библиотека параметризуемых функций (lpm)
- •1. Пример использования lpm_and, _or, _xor, _inv функций
- •2. Пример использования функции lpm_decode
- •3. Пример использования функций lpm_mux, busmux, mux
- •Пример использования функций lpm_counter, _latch, _ff,
- •5. Пример использования функций lpm_add_sub, _compare, _mult
- •6. Пример использования функции lpm_ram_dq
- •4. Описание логических схем
- •4.1. Операторы Оператор if then
- •Оператор case
- •Оператор defaults
- •Оператор if generate
- •Оператор for generate
- •Оператор truth table
- •4.2. Конечные автоматы
- •5. Основы проектирования плис с
- •Текстовой редактор
- •Литература
- •Прототипы примитивов буферов
- •Приложение 2 Прототипы примитивов триггеров
- •Приложение 3 Прототипы мегафункций
- •Содержание
- •Основы языка описания аппаратуры
- •Методические указания
- •630092, Г. Новосибирск, пр. К. Маркса, 20
Оператор options
предназначен для определения значения опции BIT0, указывающего в отношении группы, является ли бит с наименьшим номером битом с наибольшим весом (MSB - Most Significant Bit), битом с наименьшим весом (LSB - Least Significant Bit) или с весом, зависящим от места расположения индекса данного бита при описании группы (ANY).
Пример: OPTIONS BIT0 = MSB
Оператор assert
позволяет проверять действительность выражений арбитражного характера, в которых используются параметры, числа, оценочные функции, а также статусные состояния портов (используется порт или не используется).
Пример: ASSERT (WIDTH_ADDRESS > 0)
REPORT «Ширина шины адреса (%) должна быть
положительным целым» WIDTH_ADDRESS
SEVERITY ERROR
За ключевым словом ASSERT следует арифметическое выражение, в необязательном порядке заключенное в круглые скобки. Когда выражение принимает значение «ложь», строка сообщения, следующая за ключевым словом REPORT, выводится в текстовом процессоре. При отсутствии условного выражения строка сообщения выводится безусловно.
За ключевым словом REPORT следует строка сообщения и необязательные параметры, представленные переменными. Строка сообщения заключается в двойные кавычки и может содержать символы %, которые замещаются значениями соответствующих переменных. Если ключевое слово REPORT не используется и при этом значение выражения арбитражного характера принимает значение «ложь», то в текстовом процессоре выдается сообщение Assertion failed.
Необязательные переменные, включаемые в сообщение, состоят из одного или более параметров, оценочных функций или арифметических выражений. Переменные, включаемые в сообщение, отделяются друг от друга запятыми. Значения переменных подставляются в порядке появления в сообщении символов «%». Значение переменной заменяет символ «%» в строке сообщения.
За необязательным ключевым словом SEVERITY следует уровень строгости ERROR (остановка процесса компиляции), WARNING (предупреждение) или INFO (отображение сообщения). По умолчанию предполагается уровень строгости ERROR.
Оператор Assert может использоваться внутри раздела Logic или за пределами других разделов языка AHDL.
Раздел SUBDESIGN определяет входные, выходные и двунаправленные порты проекта.
Пример:
SUBDESIGN example
(
A, b, c[3..0] :INPUT; -- описывает входы проекта
D[2..6], e :OUTPUT; -- описывает выходы проекта
F, g[15..0] :BIDIR; -- описывает двунаправленные
сигналы и шины
)
Раздел variable используется для описания и/или генерации переменных, используемых в разделе Logic.
Пример:
VARIABLE
A[3..0], b :node; -- объявляет переменные (узлы) проекта
c[7..0], d, e :TRI_STATE_NODE;-- объявляет переменные
(узлы)проекта с z состоянием
dtrig[2..0] :DFF; -- объявляет примитивы как переменные
проекта
adder : lpm_add_sub WITH (LPM_WIDTH = 8); --
объявляет мега- и макрофункции, как перемен-
ные проекта
sm :MACHINE OF BITS (q1,q2,q3) WITH STATES (
s1 = B"000", s2 = B"010",s3 = B"111"); --
объявляет конечные автоматы