Оператор Define
Оператор Define позволяет определить оценочную функцию (evaluated function), представляющую собой математическую функцию, возращающую значение, вычисленное на основе необязательных входных аргументов.
В следующем примере описывается оценочная функция MAX, предопределяющая существование по меньшей мере одного порта в разделе Subdesign:
DEFINE MAX(a,b) = (a > b) ? a : b;
SUBDESIGN
(
dataa[MAX(WIDTH,0)..0]: INPUT;
datab[MAX(WIDTH,0)..0]: OUTPUT;
)
BEGIN
datab[] = dataa[];
END;
Оператор Define имеет следующие характеристики:
¨ Оператор Define начинается с ключевого слова DEFINE, за которым следует символическое имя и список из одного или более аргументов, заключенных в круглые скобки.
¨ Аргументы отделяются друг от друга запятыми. Символ (=) отделяет список аргументов от арифметического выражения
Þ При отсутствии аргументов оценочная функция эквивалентна константе.
Þ Компилятор производит вычисления арифметических выражений приведенных в операторе Define и упрощает их до числовых значений. Генерации логических схем при этом не производится.
¨ Оператор заканчивается символом (;).
¨ Один раз определенная оценочная функция может использоваться затем в пределах всего текстового файла проекта (TDF).
¨ Для определения оценочных функций могут использоваться ранее определенные оценочные функции. Например, приведенная ниже оценочная функция MIN_ARRAY_BOUND вычисляется на основе значения оценочной функции MAX:
DEFINE MAX(a,b) = (a > b) ? a : b;
DEFINE MIN_ARRAY_BOUND(x) = MAX(0, x) + 1;
При использовании оператора Define необходимо соблюдать следующие правила:
¨ Оценочная функция может быть использована только после того как она была определена.
¨ Имена оценочных функций должны быть уникальными.
¨ Имена оценочных функций не должны содержать пробелов. Для разделения слов в имени оценочной функции и улучшения ее восприятия следует пользоваться символом подчеркивания.
¨ Оператор Define может использоваться произвольное количество раз в рамках одного текстового файла проекта.
¨ Oператор Define должен быть расположен за пределами других разделов языка AHDL.