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;

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), що також знаходиться у першій колонці рядка А.