- •Мова опису апаратури ahdl
- •1. Опис комбінаційних схем
- •1.1. Шифратор
- •1.2. Дешифратор
- •1.3. Мультиплексор
- •1.4. Демультиплексор
- •1.5. Перетворювач коду
- •1.6. Компаратор
- •1.7. Суматор
- •1.8. Шинні приймачі-передавачі
- •1.9. Схеми монтажного «і» і «або»
- •2.1. Регістри
- •2.1.1. Паралельний регістр
- •2.1.2. Регістр зсуву
- •2.1.3. Регістр зсуву з паралельним завантаженням даних
- •2.1.4. Універсальний регістр
- •2.1.5. Циклічний регістр зсуву
- •Часть 2. Практическое использование языка ahdl. М. 2005.- 34 с.
- •1. Опис комбінаційних схем……………………………… 3
- •1.1. Шифратор ………………………………………………………………. 3
1.2. Дешифратор
Дешифратор — комбінаційний пристрій, що перетворює двійковий код у код «1 із N». Повний дешифратор має n входів і 2n виходів, Неповний — менше ніж 2n виходів.
Варіант текстового опису повного трирозрядного дешифратора з інверсними виходами:
SUBDESIGN DC
(
IN[3..0] : INPUT;
OUT[7..0] : OUTPUT;
)
BEGIN
DEFAULTS
OUT[] = VCC;
END DEFAULTS;
CASE IN [] IS
WHEN 0 => OUT[] = B"11111110";
WHEN 1 => OUT[] = B"11111101";
WHEN 2 => OUT[] = B"11111011";
WHEN 3 => OUT[] = B"11110111";
WHEN 4 => OUT[] = B"11101111";
WHEN 5 => OUT[] = B"11011111";
WHEN 6 => OUT[] = B"10111111";
WHEN 7 => OUT[] = B"01111111";
END CASE;
END;
У наведеній програмі так само явно задане значення вихідного коду (OUT[] = VCC) для незаданих таблицею істинності вхідних кодів.
На рис. 3. наведено часові діаграми, отримані в результаті моделювання наведеної програми.
Рис. 3.
Відмітимо, що якщо вхідний сигнал задати не чотирирозрядним, а трирозрядним вхідним кодом, то наведена в програмі таблиця істинності повністю визначає вихідну функцію алгебри логіки й спеціальне її довизначення не потрібно.
1.3. Мультиплексор
Мультиплексор — комбінаційний пристрій, що дозволяє послідовно опитувати велику кількість входів і передавати їхній стан на один вихід. Число інформаційних входів мультиплексора зазвичай дорівнює 2n, де n — число адресних входів.
Варіант опису мультиплексора, що має 4 інформаційних входи (INF[7..0]), 3 адресних входи (ADR[2..0]) і вхід дозволу роботи (CS) має вигляд:
SUBDESIGN MUX_3
(
INF[7..0], ADR[2..0], CS : INPUT;
OUT : OUTPUT;
)
BEGIN
IF CS THEN
CASE ADR[] IS
WHEN 0 => OUT =INF[0];
WHEN 1 => OUT =INF[1];
WHEN 2 => OUT =INF[2];
WHEN 3 => OUT =INF[3];
WHEN 4 => OUT =INF[4];
WHEN 5 => OUT =INF[5];
WHEN 6 => OUT =INF[6];
WHEN 7 => OUT =INF[7];
END CASE;
END IF;
END;
При CS = 0 на виході мультиплексора буде формуватися сигнал логічного нуля незалежно від стану інших входів (оскільки в даному текстовому описі логічна функція OUT не була визначена на таких наборах аргументів).
Якщо ENABLE = 1, то сигнал на виході визначається адресним кодом ADR[] і рівнем сигналу на відповідному інформаційному вході.
На рис. 4 наведено результати моделювання створеного мультиплексора.
Рис. 4
Розглянемо приклад параметризованого опису шинного мультиплексора з однорозрядним адресним входом, до інформаційних входів якого підключені дві WIDTH-розрядні шини A[WIDTH..1] і В[WIDTH..1].
PARAMETERS (WIDTH = 8);
ASSERT (WIDTH != 1)
REPORT "Value of parameter WIDTH = %" WIDTH
SEVERITY INFO;
ASSERT (WIDTH > 0)
REPORT "Value of parameter WIDTH must be greater then %" WIDTH
SEVERITY ERROR;
SUBDESIGN BUS_MUX_3
(
A[WIDTH..1], B[WIDTH..1], ADR : INPUT;
OUT[WIDTH..1] : OUTPUT;
)
BEGIN
IF ADR
THEN OUT[] = A[];
ELSE OUT[] = B[];
END IF;
END;
Рис. 5.
Оператори ASSERT використовуються для перевірки значення параметра WIDTH. Так, якщо, наприклад, за допомогою команди Global Project Parameters меню Assign (рис. 5.) параметру WIDTH присвоїти значення одиниці, то при компіляції модуля буде сформоване наступне повідомлення (рис. 6.)
Рис. 6.
«Рівень строгості» даного повідомлення INFO, тому компілятор продовжить роботу до кінця.
Якщо ж параметру WIDTH присвоїти нульове значення, то при компіляції модуля буде сформоване повідомлення, показане на рис. 7. Оскільки «Рівень строгості» даного повідомлення ERROR компілятор перерве свою роботу.
Рис. 7.
На рис. 8. наведено часові діаграми, що пояснюють роботу шинного мультиплексора.
Рис. 8.
