
- •Мова опису апаратури 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.3. Іменовані оператори
Логічним операторам і операторам порівняння в текстовому описі можуть бути привласнені символічні імена. Їхнє застосування дозволяє спростити як інтерпретацію синтезованих компілятором логічних рівнянь, так і ручне перерозміщення внутрішніх ресурсів НВІС.
Ім'я, що присвоюється операторові, відділяється від нього двокрапкою (:). Наведений нижче текстовий опис, логічно еквівалентний текстовому опису модуля Boole_1, ілюструє використання іменованих операторів.
SUBDESIGN boole_3
(
А0, А1, В : INPUT;
ОUT1, ОUT2 : OUTPUT;
)
BEGIN
OUT1=A1 tiger:&!АТ; -- tiger - ім'я оператора &
ОUT2=ОUT1 panther:#B; -- panther - ім'я оператора #
END;
Нижче представлені логічні рівняння, синтезовані пакетом при компіляції модуля Воо1е_3 (рівняння взяті з розділу Equations файлу звіту):
** EQUATIONS **
А0 : INPUT;
А1 : INPUT;
В: INPUT;
-- Node name is 'OUT1' from file "boole_3.tdf" line 7, column 1
-- Equation name is 'ОUT1', type is output
OUT1 = tiger~0;
-- Node name is 'OUT2' from file "boole_3. tdf" line 8, column 1
-- Equation name is 'ОUT2' type is output
0UT2 = panther~0;
-- Node name is 'panther ~0' from file "boole_3.tdf" line 8, column 19
Equation name is 'panther~0', location is LC1_A1, type is buried.
panther~0 = LCELL( _EQ001);
_EQ001 = tiger~0 # B;
-- Node name is 'tiger~0' from file "boole_3.tdf" line 7, column 21
Equation name is 'tiger~0' location is LC3_A1. type is buried.
tiger~0 = LCELL( _EQ002);
_EQ002 = !A0 & A1;
Зупинимося на них більш докладно.
На вихід OUT1 передається значення логічного виразу tigher~0: OUT1 = tiger~0, реалізованого на окремому логічному елементі:
tiger~0 = LCELL(_EQ002), де _EQ002 = !А0 & А1.
На вихід OUT2 передається значення логічного виразу panther~0: 0UT2 = panthe~0, реалізованого на окремому логічному елементі:
Panther~0 = LCELL(_EQ001), де _EQ001 = tiger~0#B.
Відзначимо, що в розділі Equation файлу звіту утримується інформація і про розміщення використаних логічних осередків у НВІС програмувальної логіки. Так panther~0 розміщена в першому логічному елементі (LC1), що перебуває в першій колонці рядка А НВІС, a tiger~0 — у третьому логічному елементі (LC3), що також знаходиться у першій колонці рядка А.
3.4. Групи
Однотипні змінні або виводи можуть бути об'єднані в одновимірну, двовимірну або часову групу.
3.4.1. Одновимірні й часові групи
Нижче наведене текстовий опис, що ілюструє використання одновимірних і часових груп:
SUBDESIGN GROUP_1
(
А[3..0] : INPUT; -- одновимірна група із чотирма членами
В[4..1] : INPUT; -- одновимірна група із чотирма членами
c,d,e,f : INPUT; -- однорозрядні входи
ОUT[5..2] : OUTPUT; -- одновимірна група зі чотирма членами
)
BEGIN
OUT[]=(A[] # В[1..4]) & !(c,d,e,f);
END;
Комбінаційна схема, що відповідає модулю GROUP_1, наведена на рис. 9.
Рис. 9.
Групи А[] і В[] мають однакове число членів, тому можливе порозрядне застосування оператора #: А[] # В[1..4].
При посиланні на групу В[4..1] її індекси перераховані у зворотному порядку В[1..4]. Тому при компіляції проекту процесор повідомлень сформує наступне попередження:
"Warning: Line 9, File c:\max_work\boole_1\group_1.tdf:
Group range B[1..4] differs from declaration B[4..1]"
Якщо в логічному рівнянні використовуються всі члени групи, причому в тім же порядку, у якому вони були задані, то для посилання на таку групу можна скористатися скороченою формою запису: A[] замість А[3. .0].
(c,d,f,g) - часова група із чотирма членами. Вираз !(c,d,f,g) задає порозрядне виконання інвертування.
У виразі (А[] # В[1..4]) & !(c,d,e,f) операндами оператора & є дві чотирирозрядні групи: A[3] # B[1], A[2] # B[2], A[1] # B[3], A[0] # B[4], і !c, !d, !e, !f. Тому можливо його порозрядне застосування.
Значення однієї групи може бути присвоєно іншій групі (тобто між ними можна поставити знак рівності) тільки в тому випадку, коли вони мають однакове число розрядів. Тому група OUT[] так само є чотирирозрядною.