|
Учебник по языку ahdl оглавление Введение 2 Элементы языка ahdl 3 Структура описания проекта на языке ahdl 25
1.19.Определение параметров (оператор Parameters) Оператор Parameters позволяет определять один и более параметров, управляющих экземпляром (an instance) параметрической мега- или макрофункции. Следующий пример демонстрирует использование оператора Parameters: PARAMETERS
(
FILENAME = "myfile.mif", -- optional default value follows "=" sign
WIDTH,
AD_WIDTH = 8,
NUMWORDS = 2^AD_WIDTH
); При использовании оператора Parameters необходимо соблюдать следующие правила:
Оператор Parameters начинается с ключевого слова PARAMETERS, за которым следует список из одного или более параметров и необязательных значений по умолчанию. Весь список заключается в круглые скобки.
Параметры в списке отделяются друг от друга запятыми; имена параметров отделяются от необязательных значений по умолчанию символом (=). В примере, показанном выше, только параметр WIDTH не имеет предопределенного значения.
Имена параметров могут представлять собой либо имена, определенные пользователем, либо имена, предопределенные фирмой Altera .
Значения параметров могут представлять собой текстовые строки, заключенные в двойные кавычки. В том случае, если значения параметров не заключены в двойные кавычки, компилятор пытается интерпретировать их как арифметические выражения; если это не удается, они интерпретируются как строки.
Оператор Parameters заканчивается символом (;).
После того, как параметр был определен, он может использоваться во всем текстовом файле проекта.
Параметр может быть использован лишь после того, как он был определен.
Имена параметров должны быть уникальными.
Имя параметра не должно содержать пробелов. Для разделения слов и лучшего восприятия необходимо пользоваться символом подчеркивания.
Оператор Parameters может использоваться произвольное количество раз в рамках одного текстового файла проекта.
Oператор Parameters должен быть расположен за пределами других разделов языка AHDL.
Параметры, используемые для определения других параметров, должны быть определены ранее.
Использование круговых ссылок недопустимо. Следующий пример демонстрирует использование недопустимой круговой ссылки:
PARAMETERS
(
FOO = BAR;
BAR = FOO;
); На этапе компиляции текстового файла проекта, компилятор осуществляет поиск значений параметров в следующей последовательности:
Производится анализ экземпляра (an instance) логической функции. Например, в текстовом файле проекта, в объекте (an instance), созданном путем объявления объекта (Instance Declaration) или подставляемой ссылкой (in-line reference), можно определить те параметры, которые будут использоваться, а также в необязательном порядке определить их значения. В графическом файле проекта (GDF - Graphic Design File) можно выбрать символ и, используя команду Edit Ports/Parameters из меню Symbol, присвоить значения параметров для этого объекта.
Производится анализ экземпляра логической функции более высокого уровня иерархии. Значения параметров экземпляра логической функции более высокого уровня иерархии распространяются на подфункции данной логической функции, если экземпляры этих логических подфункций не имеют своих значений для данных параметров.
Производится анализ глобальных значений параметров проекта по умолчанию, определенных командой Global Project Parameters из меню Assign. Эти значения хранятся в файле установок и конфигурации (Assignment&Configuration file - .acf) проекта.
Просматриваются необязательные значения по умолчанию, указываемые в разделе Parameters текстового файла проекта (TDF), или с помощью примитива PARAM в графическом файле проекта, описывающем логическую функцию. Эти значения по умолчанию используются только в том файле, в котором они приводятся и не распространяются на подпроекты, входящие в данный проект.
1.20.Определение прототипов логических функций (оператор Function Prototype). Операторы 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.
В параметризируемой функции за списком параметров следует ключевое слово WIDTH и список имен параметров. Список заключен в круглые скобки; имена отделены друг от друга запятыми.
За списком выходных и двунаправленных портов функции следует ключевое слово RETURNS.В первом примере, показанном выше, выходными портами являются result[LPM_WIDTH-1..0], count и overflow ;во втором примере - less, equal и greater.
Список входных и выходных портов заключается в круглые скобки. Имена отделяются друг от друга запятыми.
При импортировании и экспортировании конечных автоматов, используемый файлом оператор Function Prototype должен использовать автоматный порт (определяемый ключевым словом MACHINE) для указания того, какие входы и выходы являются конечными автоматами. Пример:
FUNCTION ss_def (clock, reset, count)
RETURNS (MACHINE ss_out);
Оператор Function Prototype заканчивается символом (;).
Oператор Function Prototype должен быть расположен за пределами других разделов языка AHDL и кроме того он должен располагаться до экземпляра логической функции созданной путем объявления объекта или подставляемой ссылки (in-line reference).
Для экземпляра примитива также следует использовать механизм объявления объекта (Instance Declaration) или подставляемую ссылку (in-line reference). Однако, в отличие от мега- и макрофункций логика функционирования примитива предопределена, таким образом нет необходимости определять логику функционирования примитива в отдельном файле проекта. Кроме того нет необходимости использовать оператор Function Prototype, за исключением тех случаев, когда нужно изменить порядок следования портов примитива.
Следующий пример демонстрирует прототип функции, существующий по умолчанию для примитива JKFF: FUNCTION JKFF (j, k, clk, clrn, prn)
RETURNS (q); Данный пример показывает модифицированный прототип функции для примитива JKFF: FUNCTION JKFF (k, j, clk, clrn, prn)
RETURNS (q);
Альтернативой использования оператора Function Prototype в файле проекта является применение оператора Include для подключения файлов с расширением .inc, содержащих прототипы используемых функций. Кроме того MAX+PLUSII имеет в своем составе команду Create Default Include File в меню File, которая автоматически создает файл с расширением .inc, содержащий прототип функции для текущего файла проекта.
Прототипы функций для всех мега- и макрофункций хранятся в файлах с расширением .inc в директориях \maxplus2\max2lib\mega_lpm и \maxplus2\max2inc соответственно. Контекстно-зависимая подсказка для всех поставляемых фирмой Altera мега-, макрофункций и примитивов, выводит содержимое соответствующих им прототипов функций.
|
|
|