
- •Мова опису апаратури 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 с.
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”, і так далі), що ілюструє можливість використання при описі алгоритму різних форм задання числа.
3.6. Оператор if then
Оператор IF THEN може використовуватися в одній з наступних форм:
IF __expression THEN __statement; __statement; ELSIF __expression __statement; __statement; ELSE __statement; __statement; END IF;
|
IF __expression THEN __statement; __statement; ELSE __statement; __statement; END IF;
|
IF __expression THEN __statement; __statement; END IF;
|
Даний оператор, у загальному випадку, дозволяє послідовно оцінити істинність декількох логічних виразів і відповідно до отриманих результатів виконати ті або інші дії.
Розглянемо використання оператора IF THEN на прикладі опису пріоритетного шифратора, заданого в модулі TRUTH_TABLE таблицею істинності.
SUBDESIGN IF_THEN
(
high, middle, low :INPUT;
highest_level[1..0] :OUTPUT;
)
BEGIN
IF high == 1
THEN
highest_level[]=3;
ELSIF middle == 1
THEN
highest_level[]=2;
ELSIF low == 1
THEN
highest_level[]=1;
ELSE
highest_level[]=0;
END IF;
END;
Відзначимо, що операторові IF THEN внутрішньо властива пріоритетність. Так, вхід high, який перевіряється першим, має вищий пріоритет: якщо high=1, то при будь-яких значеннях сигналів на входах middle і low (їхні значення навіть не перевіряються) групі виходів highest_level буде присвоєне двійкове число В" 11". Вхід middle має більше низький пріоритет, а вхід low - нижчий.
Складений оператор IF THEN - оператор, що включає вираз ELSIF, компілятор інтерпретує в такий спосіб:
Вихідний текст IF high == 1 THEN highest_level[]=3; ELSIF middle == 1 THEN highest_level[]=2; ELSIF low == 1 THEN highest_level[]=1; ELSE highest_level[]=0; END IF; END;
|
Інтерпретація компілятора IF high THEN highest_level[]=3; END IF; IF !high & middle THEN highest_level[]=2;
END IF; IF !high &!middle & low THEN highest_level[]=1; END IF; IF !high &!middle & !low THEN highest_level[]=0; END IF; |