
- •Мова опису апаратури ahdl
- •1. Елементи мови
- •1.1. Ключові слова й ідентифікатори
- •1.2. Символи
- •1.3. Імена
- •1.4. Групи
- •1.5. Числа
- •1.6. Вирази
- •1.6.1. Арифметичні вирази
- •1.6.2. Логічні вирази
- •1.7. Оператори
- •1.7.1. Логічні оператори
- •1.7.2. Арифметичні оператори
- •1.7.3. Оператори порівняння
- •1.8. Пріоритет виконання операцій
- •1.9. Примітиви
- •1.9.1. Примітиви буферів
- •1.9.2. Буфер ланцюгового переносу (carry)
- •1.9.3. Буфер каскадного нарощування логічної функції (cascade)
- •1.9.4. Буфер логічного розширювача (ехр)
- •1.9.5. Буфер глобального ланцюга поширення управляючого
- •1.9.6. Буфер розміщення логічного осередку (lcell),
- •1.9.7. Буфер виходу з відкритим колектором (opndrn)
- •1.9.8. Буфер розміщення логічного осередку (soft),
- •1.9.9. Буфер виходу з z станом (tri)
- •1.10. Примітиви тригерів
- •2. Структура текстового опису
- •2.1. Загальна структура
- •Include Statement.
- •2.2. Розділ оголошення операторів
- •2.2.1. Title Statement
- •2.2.2. Parameters Statement
- •2.2.3. Include Statement
- •2.2.4. Constant Statement
- •2.2.5. Define Statement
- •2.2.6. Function Prototype Statement
- •2.2.7. Options Statement
- •2.2.8. Assert Statement
- •2.3. Subdesign Section
- •2.4. Variable Section
- •2.5. Logic Section
- •3. Застосування конструкцій мови
- •3.1. Логічні рівняння
- •3.2. Змінні типу node
- •3.3. Іменовані оператори
- •3.4. Групи
- •3.4.1. Одновимірні й часові групи
- •3.4.2. Двовимірні групи
- •3.5. Таблиця істинності
- •3.6. Оператор if then
- •3.7. Оператор case
- •3.8. Базові значення логічних функцій
- •3.9. Константи
- •3.10. Оператор for generate
- •3.11. Параметри
- •3.12. Оператор if generate
- •3.13. Оператор assert
- •3.14. Примітиви
- •3.15. Прототип модуля
- •Часть 1. Основы языка ahdl. М. 2005.- 50 с.
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 не приводить до використання додаткових логічних ресурсів НВІС ПЛ.