Операторы Function Prototype имеют ту же функцию, что и символы в графических файлах проектов. И те и другие представляют собой краткое описание функции, описывая ее имя, а также входные, выходные и двунаправленные порты. Для функций, импортирующих и экспортирующих конечные автоматы, могут использоваться порты автомата.
Входные порты мега- и макрофункций не имеют значений по умолчанию, как это имеет место в файлах графического редактора MAX+PLUSII. Поэтому входные значения неиспользуемых портов должны быть указаны явно. Кроме того в секции Subdesign могут быть указаны значения по умолчанию для двунаправленных портов. Заметим, что для выходных портов нельзя определить значения по умолчанию.
Перед созданием объекта (an instance) мега- или макрофункции необходимо убедиться в существовании соответствующего ей файла проекта, описывающего ее логическое функционирование. Затем с помощью оператора Function Prototype описываются порты функции и создается экземпляр (an instance) логической функции путем объявления объекта (Instance Declaration) или подставляемой ссылки (in-line reference),
Следующие примеры демонстрируют использование операторов Function Prototype. Первый пример демонстрирует описание параметризируемой функции, а второй - не параметризируемой функции:
FUNCTION lpm_add_sub (cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0], add_sub)
WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE,
ONE_INPUT_IS_CONSTANT)
RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
FUNCTION compare (a[3..0], b[3..0])
RETURNS (less, equal, greater);
Оператор Function Prototype имеет следующие характеристики:
¨ За ключевым словом FUNCTION следует имя функции. В примерах показанных выше использованы имена функций lpm_add_sub и compare.
¨ За именем функции следует список входных портов. В первом примере, показанном выше, входными портами являются cin, dataa[LPM_WIDTH-1..0] и datab[LPM_WIDTH-1..0]; во втором примере входными портами являются a3,a2,a1,a0,b3,b2,b1 и b0.