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

2.5. Logic Section

Logic Section (розділ опису логіки) дозволяє задати алгоритм роботи проектованого модуля.

Правила використання розділу:

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

  1. У розділі можуть бути використані:

    • 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;