
- •Мова опису апаратури 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 с.
1.6.2. Логічні вирази
Логічні вирази (Boolean expressions) містять операнди, об’єднані:
логічними операторами;
арифметичними операторами;
операторами порівняння.
Логічні вирази використовуються:
у логічних рівняннях (Boolean Equations);
у логічних рівняннях, що задають керуючі сигнали (Boolean Control Equations);
в операторі CASE;
в операторі IF THEN.
1.7. Оператори
1.7.1. Логічні оператори
У таблиці. 2 перераховано логічні оператори, використовувані в логічних виразах.
Таблиця 6
Оператор |
Приклад |
Опис |
! NOT |
! tob NOT tob |
Інверсія |
& AND |
bread & butter bread AND butter |
І |
!& NAND |
a[3..1] !& b[5..3] a[3..1] NAND b[5..3] |
І-НІ |
# OR |
trick # treat trick OR treat |
АБО |
!# NOR |
c[8..5] !# d[7..4] c[8..5] NOR d[7..4] |
АБО-НІ |
$ XOR |
foo $ bar foo XOR bar |
Виключаюче АБО |
!$ XNOR |
x2 !$ x4 x2 XNOR x4 |
Виключаюче АБО-НІ |
Оператор інверсія (NOT) може застосовуватися до одного із трьох типів операндів:
■ Однорозрядної змінної (іменованої лінії зв'язку), однорозрядного виводу модуля, а також до константної логічної одиниці й константного логічного нуля. При цьому здійснюється інвертування аргументу операнда,
■ Групі змінних (групі іменованих ліній зв'язку), групі виводів модуля. У цьому випадку інвертується кожний член групи.
Приклад:
!(а, b[2..1]) відповідає !а, ! b2, !b1.
■ Числу. У цьому випадку інвертується кожний розряд двійкового еквівалента даного числа.
Приклад:
!9 = (!В"1001”=В"0110") = 6.
Оператори AND, NAND, OR, NOR, XOR, NXOR допускають використання наступних комбінацій операндів:
Обидва операнди однорозрядні: однорозрядна змінна, однорозрядний вивід модуля, логічний нуль або логічна одиниця.
Обидва операнди групи: група змінних або група виводів модуля. У цьому випадку логічний оператор застосовується порозрядно а, отже, операнди повинні мати однакове число розрядів, що збігається із числом розрядів результату.
Приклад:
R[4..1]=(A,B,C,D)#OP[3..0]; при цьому: R4=A#ОP3; R3=B#ОP2; R2=C#ОP1; R1=D#OP0;
Один операнд група (група змінних, група виводів модуля), а інший операнд однорозрядний (однорозрядна змінна, однорозрядний вивід модуля, логічний нуль, логічна одиниця). У цьому випадку однорозрядний операнд тиражується й формується група, число розрядів у якій дорівнює числу розрядів в іншому операнді. Потім до двох груп порозрядно застосовується логічний оператор.
Приклад:
R[3. . 1]=(а, b[2.. 1])&D; при цьому: R3=a&D; R2=b2&D; R1=b1&D.
Обидва операнди числа. Оскільки природною формою подання чисел для виконання процедури синтезу комбінаційної схеми є двійкова форма, то в цьому випадку обидва операнди розглядаються компілятором як двійкові числа (групи двійкових розрядів). Якщо для двійкового подання операндів потрібне різне число розрядів, то автоматично здійснюється нарощування числа розрядів двійкового подання меншого операнда. Логічний оператор застосовується до сформованих груп порозрядно.
Приклад:
3$14 = В"0011 $ В"1110"=В”1101”=13.
Один операнд число, а інший операнд або однорозрядний, або група. У цьому випадку число перетвориться у двійкове число (групу двійкових розрядів). Логічний оператор застосовується до цих груп порозрядно. Якщо число розрядів у цій групі менше числа розрядів в іншому операнді, то вона автоматично розширюється. Якщо ж більше, то процесор повідомлень (Message Processor) пакету MAX+plus II видає повідомлення про помилку.
Приклади:
R[3..1] = (a,b,c) & 3;
-- при цьому R3 = (a & B”0”) = 0; R[2] = (b&B"1")=b; R[1] = с&В”1" ) = с.
R[3. .1]=(a,b, с) & 9. -- при цьому буде сформоване повідомлення про помилку.