1.17.Определение констант (оператор Constant) Оператор Constant позволяет ввести в применение информативное символическое имя для числа или арифметического выражения. Следующие примеры демонстрируют использование оператора Constant: CONSTANT UPPER_LIMIT = 130;
CONSTANT BAR = 1 + 2 DIV 3 + LOG2(256);
CONSTANT FOO = 1;
CONSTANT FOO_PLUS_ONE = FOO + 1; Оператор Constant имеет следующие характеристики:
Оператор Constant начинается с ключевого слова CONSTANT, за которым следует символическое имя, затем символ (=) и далее число (при необходимости, включая его основание) или арифметическое выражение.
Оператор Constant заканчивается символом (;).
После того, как константа была определена, она может быть использована в пределах всего текстового файла проекта (TDF). В примере, приведенном выше, в разделе Logic можно использовать константу UPPER_LIMIT для представления десятичного числа 130.
Константы могут быть определены посредством арифметических выражений. В эти арифметические выражения могут входить константы определенные ранее.
Компилятор вычисляет арифметические выражения, используемые в операторе Constant и упрощает их до числовых значений. При этом не производится генерация логических схем.
При использовании оператора Constant необходимо соблюдать следующие правила:
Константа может быть использована лишь после того, как она определена.
Имена констант должны быть уникальными.
Имя константы не должно содержать пробелов. Для разделения слов в имени константы и улучшения восприятия имен констант следует пользоваться символом подчеркивания.
Оператор Constant может использоваться произвольное количество раз в рамках одного текстового файла проекта.
Oператор Constant должен быть расположен за пределами других разделов языка AHDL.
Константы, используемые для определения других констант, должны быть определены ранее.
Использование циклических ссылок недопустимо. Следующий пример демонстрирует использование недопустимой циклической ссылки:
CONSTANT FOO = BAR;
CONSTANT BAR = FOO;
1.18.Обозначение арифметических выражений (оператор 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.
|