Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основи мови AHDL_частина1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
669.7 Кб
Скачать

3.11. Параметри

Мова AHDL дозволяє створити параметризований опис модуля - опис, що адаптується до конкретних умов застосування модуля, тобто до конкретних значень параметра.

Значення параметра, на відміну від значення константи, може бути задане поза тим текстовим описом, у якому цей параметр визначений і використовується.

Нижче наведено поведінковий (алгоритмічний) опис суматора, розрядність якого визначається параметром ADD_WIDTH.

PARAMETERS (ADD_WIDTH = 8);

SUBDESIGN Parameter_

(

A[ADD_WIDTH..1], B[ADD_WIDTH..1] : INPUT;

SUM[ADD_WIDTH..1], Cout : OUTPUT;

)

BEGIN

(Cout, SUM[ADD_WIDTH..1]) = (GND,A[ADD_WIDTH..1]) + (GND,B[ADD_WIDTH..1]);

END;

Описаний суматор забезпечує додавання двох ADD_ WIDTH-розрядних операндів і формування АDD_WIDТН-разрядного результату (SUM[]) і переносу в наступний розряд.

При оголошенні параметру ADD_WIDTH присвоюється вихідне значення - вісім. Тому, якщо поза даним текстовим описом йому не буде задане інше значення, то компілятор синтезує восьмирозрядний суматор.

У мові AHDL визначений параметр Device_Family, значення якого - назва сімейства НВІС, обраного для реалізації модуля (команда Device, меню Assign).

Відзначимо, що максимальний ефект від використання параметрів досягається при створенні бібліотек параметризованих модулів, призначених для повторного використання.

3.12. Оператор if generate

Оператор IF GENERATE дозволяє оцінити значення арифметичного виразу і за результатами оцінки сформувати той або інший опис проектованого модуля.

Оператор може використовуватися в повній або спрощеній формі.

Повна форма: Спрощена форма:

IF __expression GENERATE IF _expression GENERATE

__statement; __statement;

__statement; __statement;

ELSE GENERATE END GENERATE;

__statement;

__statement;

END GENERATE;

Оператор задається в такий спосіб:

  • За ключовим словом IF вказується оцінюваний арифметичний вираз.

  • За ключовим словом GENERATE слідують оператори мови AHDL, які будуть використані в текстовому описі при істинності оцінюваного арифметичного виразу.

  • При наявності ключових слів ELSE GENERATE за ними вказуються оператори, які будуть використані в текстовому описі в тому випадку, якщо оцінюваний арифметичний вираз хибний.

  • Оператор закінчується ключовими словами END GENERATE, за якими слідує крапка з комою (;).

Застосування оператора проілюструємо на прикладі текстового опису, що залежно від значення параметра Module_Type буде задавати або суматор, або віднімальщик розрядністю WIDTH.

PARAMETERS

(

WIDTH = 8,

MODULE_TYPE = "ADD"

);

SUBDESIGN IF_GEN

(

A[WIDTH..1], B[WIDTH..1] : INPUT;

RESULT[WIDTH..1], Cout : OUTPUT;

)

BEGIN

IF Module_Type == "ADD" GENERATE

(Cout,Result[]) = (GND,A[]) + (GND,B[]);

ELSE GENERATE

(Cout,Result[]) = (GND,A[]) - (GND,B[]);

END GENERATE;

END;

При вихідних значеннях параметрів компілятор синтезує восьмирозрядний суматор, результати моделювання якого наведені на рис. 16

Рис. 16.

Якщо поза текстовим описом (наприклад, командою Global Project Parameters меню Assign) параметру Module_Type присвоїти відмінне від ADD значення, то компілятор синтезує віднімальщик, результати моделювання якого наведені на рис. 17.

Рис. 17.

Нагадаємо, що підстановка значень параметрів і формування відповідного текстового опису здійснюється компілятором на етапі перевірки синтаксису. Тому застосування оператора IF GENERATE не приводить до використання додаткових логічних ресурсів НВІС ПЛ.