
- •Мова опису апаратури 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 с.
2.5. Logic Section
Logic Section (розділ опису логіки) дозволяє задати алгоритм роботи проектованого модуля.
Правила використання розділу:
Розділ починається із ключового слова BEGIN і закінчується ключовим словом END, за яким слідує крапка з комою (;).
У розділі можуть бути використані:
Defaults Statement (Оператор задання вихідних значень);
Boolean Equations (Логічні рівняння);
Boolean Control Equations (Логічні рівняння для керуючих сигналів);
Case Statement (Оператор CASE);
If Then Statement (Оператор If Then);
If Generate Statement (Оператор IF Generate);
In-line Logic Function reference (безпосереднє звертання до модулів нижнього рівня в ієрархії описів і примітива;
For Generate Statement (Оператор For Generate);
Truth Table Statement (Таблиця істинності);
Assert Statement (Оператор контролю).
Якщо в розділі логіки використовується оператор задання вихідних значень (Defaults Statement), то він повинен стояти відразу після ключового слова BEGIN. Послідовність застосування інших операторів - довільна.
■ У файлі з текстовим описом даний розділ може використовуватися тільки один раз.
3. Застосування конструкцій мови
3.1. Логічні рівняння
Використання логічних рівнянь розглянемо на прикладі опису комбінаційної схеми, зображеної на рис. 6.
Рис 6.
Текстовий опис:
SUBDESIGN boole_1 -- розділ опису інтерфейсу модуля
(
А0, А1, В : INPUT; -- входи
OUT1, 0UT2 : OUTPUT; -- виходи
)
BEGIN -- розділ опису логіки роботи модуля
OUT1=A1&!A0;
OUT2=ОUT1#B;
END;
Представлений текстовий опис включає мінімально необхідний набір розділів:
Розділ інтерфейсу (SUBDESIGN SECTION).
Розділ опису логіки (LOGIC SECTION).
Ім'я модуля boole_l повинно збігатися з ім'ям файлу (boole_1.TDF), у якому зберігається наведений текстовий опис.
Відзначимо, що порядок використання логічних рівнянь OUT1=A1&!А0; і ОUT2=ОUT1#B; може бути довільним, оскільки на відміну від традиційних мов програмування компілятор здійснює паралельне їхнє виконання. Тому наступний опис комбінаційної схеми:
BEGIN
ОUT2=0UT1#B;
ОUT1=A1&!A0;
END;
логічно еквівалентний вихідному.
3.2. Змінні типу node
Для спрощення запису логічних рівнянь доцільно використовувати змінну типу NODE (іменовану лінію зв'язку). Комбінаційна схема з лінією зв'язку (INT_VAR) наведена на рис. 7.
Рис 7.
Текстовий опис:
SUBDESIGN boole_2
(
А0, А1, В : INPUT; -- входи
ОUT2 : OUTPUT; -- вихід
)
VARIABLE -- розділ змінних
INT_VAR : NODE;-- визначення змінної (лінії зв'язку) INT_VAR BEGIN
OUT=INT_VAR#B;
INT_VAR=A1&! А0;
END;
Відзначимо, що внутрішня лінія зв'язку INT_VAR виявиться недоступною для спостереження при реалізації часового моделювання роботи НВІС. Оскільки в процесі синтезу й розведення НВІС вона «розчиниться» або в чотиривходовій таблиці перекодувань (при розміщенні схеми в НВІС сімейства FLEX), або в програмувальній матриці «І» (при розміщенні схеми в НВІС сімейства МАХ).
Якщо, проте, нам необхідно спостерігати сигнал у точці INT_VAR при часовому моделюванні роботи НВІС, то доцільно використовувати буфер LCELL (рис. 8)
У цьому випадку комбінаційна схема буде реалізована на двох логічних елементах (макроосередках), і лінія INT_VAR, лінія зв'язку між логічними елементами, стане доступною для спостереження.
Рис. 8.
Текстовий опис, що відповідає рис. 8 має такий вигляд:
SUBDESIG boole_lc
(
А0, А1, В : INPUT;
OUT, INT_VAR : OUTPUT;
)
VARIABLЕ -- розділ змінних
INT_VAR : NODE; -- визначення змінної (лінії зв'язку)
BEGIN
OUT=INT_VAR#B;
INT_VAR=LCELL(A1&! А0);
END;