Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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

Групи

Однотипні змінні або виводи можуть бути об'єднані в одновимірну, двовимірну або часову групу.

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[] так само є чотирирозрядною.

3.4.2. Двовимірні групи

Текстовий опис, що ілюструє застосування двовимірних груп наведено нижче:

SUBDESIGN GROUP 2

(

A[2..1]: INPUT;

R[1..2][2..1]: OUTPUT;

)

BEGIN

R[][] = (A[1..2], A[]);

END;

Відзначимо, що групи ліворуч і праворуч від знака рівності (=) мають однакове число розрядів. На рис. 10 представлена схема, що відповідає модулю GR0UP_2.

Рис. 10.

3.5. Таблиця істинності

Таблиця істинності логічної функції задається в такий спосіб

TABLE

_ _node_name, __node_name => __node_name, __node_name;

_ _input_value, __ input_value => __output_ value __output_ value;

_ input_value, input_value => __output_ value __output_ value;

_ input_value, input_value => __output_ value __output_ value;

END TABLE;

Відкриває таблицю ключове слово TABLE, а закривають ключові слова END TABLE, за яких слідує крапка з комою (;).

Перший після слова TABLE рядок визначає форму таблиці. У ньому, через кому, перераховуються аргументи (внутрішні змінні, входи або виходи модуля) та імена формованих логічних функцій (внутрішні змінні або виходи модуля). Аргументи й функції розділяє символ стрільця (=>). Наприкінці рядка ставиться крапка з комою.

У наступних рядках відповідно до заданої форми, вказуються набори аргументів і значення логічних функцій.

Розглянемо використання таблиці істинності на прикладі опису пріоритетного шифратора.

SUBDESIGN TRUTH_TABLE

(

high, middle, low:INPUT;

highest_level[1..0]:OUTPUT;

)

BEGIN

TABLE

high, middle, low => highest_level[];

1,x,x=>3;

0,1,x=>2;

0,0,1=>1;

0,0,0=>0;

END TABLE;

END;

Наведена таблиця істинності задає дві логічні функції від трьох аргументів. Якщо аргумент high=1, то при будь-яких значеннях аргументів middle і low (дані аргументи задані в таблиці символом "х" - don't care) групі виходів highest_level буде присвоєне значення В"11" і так далі. При рівності всіх аргументів логічному нулю групі виходів highest_level[] буде присвоєне значення В"00".

Примітка: У наведеному тексті програми функція двох змінних highest_level[] задана її десятковим еквівалентом (3 = В”11”, і так далі), що ілюструє можливість використання при описі алгоритму різних форм задання числа.





Дата публикования: 2014-11-29; Прочитано: 199 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...