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

1.6. Компаратор

Компаратор - це комбінаційний пристрій, призначений для порівняння двох чисел А і В за ознаками: дорівнює (А_Е_В), не дорівнює (А_NE_B), більше (А_М_В), менше (A_L_B), більше або дорівнює (А_МЕ_В), менше або дорівнює(А_LЕ_В).

Розглянемо параметризований опис компаратора, що забезпечує порівняння двох WIDTH-розрядних чисел за всіма можливими ознаками.

PARAMETERS (WIDTH = 7);

SUBDESIGN LPM_CP

(

A[WIDTH..0],B[WIDTH..0]:INPUT;--вхідні порівнювані коди.

A_M_B : OUTPUT; --А більше В.

A_L_B : OUTPUT; --А менше В.

A_E_B : OUTPUT; --А дорівнює В.

A_NE_B : OUTPUT; --А не дорівнює В.

A_ME_B : OUTPUT; --А більше або дорівнює В.

A_LE_B : OUTPUT; --А менше або дорівнює В.

)

BEGIN

IF USED (A_M_B) GENERATE -- Якщо використається вивід

-- А_М_B, то йому

A_M_B =(A[] > B[]); -- присвоюється значення одиниці

-- у випадку, якщо код А[]більший за код В[].

END GENERATE;

IF USED (A_L_B) GENERATE -- якщо використовується

-- вивід А_L_B, то йому

A_L_B = (A[] < B[]); -- присвоюється значення

-- одиниці у випадку

END GENERATE; -- якщо код А[]менший за код В[].

IF USED (A_NE_B) GENERATE -- Якщо використовуються

-- виводи А_NE_B і А_Е_B, то

--виводу А_NE_B присвоюється інверсне

IF USED (A_E_B) GENERATE -- значення виводу А_Е_В.

A_NE_B = !A_E_B;

ELSE GENERATE -- В протилежному випадку (тобто,

-- якщо вивід А_Е_В

A_NE_B = (A[] != B[]); -- не використовується)

-- виводу А_NE_В присвоюється значення

END GENERATE; -- одиниці, якщо коди не рівні.

END GENERATE;

IF USED (A_E_B) GENERATE -- Якщо використається вивід

-- А_E_B, то йому

A_E_B = (A[] == B[]); -- присвоюється значення

-- одиниці у випадку

END GENERATE; -- логічної рівності кодів А[] і В[].

IF USED (A_ME_B) GENERATE -- Якщо використаються

-- виводи А_ME_В, А_M_B і А_Е_B

-- то виводу А_МE_B присвоюється

IF USED (A_M_B) GENERATE -- значення одиниці

IF USED (A_E_B) GENERATE -- у випадку якщо одиниця

-- присутня або на виводі А_Е_В

A_ME_B = A_E_B # A_M_B; -- або на виводі А_M_В.

ELSE GENERATE -- В протилежному випадку

--(використовується А_М_B і не

-- використовується А_Е_В)

A_ME_B = (A[] == B[]) OR A_M_B; виводу А_ME_В

END GENERATE; -- присвоюється значення

-- одиниці або у випадку логічної рівності -- кодів А[] і В[], або значення виводу A_M_B.

ELSE GENERATE -- Якщо використовуються виводи і A_E_B

IF USED (A_E_B) GENERATE -- але не використовується -- вивід А_M_В, то виводу А_ME_В

A_ME_B = A_E_B OR(A[] > B[]); -- присвоюється

-- значення одиниці або у випадку,

-- якщо A[] > B[]або значення А_E_В.

ELSE GENERATE -- Якщо виводи A_M_B і А_Е_B не

-- використовуються, то виводу

A_ME_B = (A[] >= B[]); -- А_ME_B присвоюється одиниця,

-- якщо код А[] більший

END GENERATE; -- або дорівнює коду В[].

END GENERATE;

END GENERATE;

IF USED (A_LE_B) GENERATE -- якщо використовуються

-- виводи А_LE_В, А_L_B і А_Е_В

IF USED (A_L_B) GENERATE -- то виводу А_LE_В

-- присвоюється значення одиниці

IF USED (A_E_B)GENERATE -- у випадку, якщо одиниця

-- присутня або на виводі А_Е_В

A_LE_B = A_E_B # A_L_B; -- або на виводі А_L_В.

ELSE GENERATE -- В протилежному випадку

--(використовується А_L_В

-- і не використовується А_Е_В)

A_LE_B = (A[] == B[]) OR A_L_B; -- виводу А_LE_В

END GENERATE; -- присвоюється значення одиниці

-- або у випадку логічної рівності кодів

-- А[] і В[], або значення виводу A_L_B.

ELSE GENERATE -- Якщо використовується вивід

-- A_E_B, але не використається

IF USED (A_E_B) GENERATE -- вивід А_L_В,

-- то виводу А_LE_В

A_LE_B = A_E_B OR (A[] < B[]); -- присвоюється

-- значення одиниці або в -- випадку, якщо A[] < B[],

-- або значення А_E_В.

ELSE GENERATE -- Якщо виводи A_L_B і А_Е_B не

-- використовуються, то виводу

A_LE_B = (A[] <= B[]); -- А_LE_B присвоюється

-- одиниця, якщо код А[] менший

-- або дорівнює коду В[].

END GENERATE;

END GENERATE;

END GENERATE;

END;

Примітка: Представлений текст програми наведений з коментарями, що пояснюють виконання заданого алгоритму роботи.

Використовуючи даний параметризований модуль як компонент, користувач має можливість вибирати:

  • розрядність компаратора (визначається значенням параметра WIDTH);

  • необхідні ознаки порівняння.

Оператори IF GENERATE і вбудована в пакет MAX+plus II функція USED дають можливість створювати параметризовані модулі, архітектура яких визначається не тільки значеннями параметрів, але й набором використовуваних виводів.

Результати моделювання компаратора при WIDTH=8 показаний на рис.14.

Рис. 14.