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

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;