- •Мова опису апаратури 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
2.1.2. Регістр зсуву
Нижче наведено параметризований опис N-розрядного регістра зсуву, що має входи: асинхронної установки (Set), асинхронного скидання (Reset) і дозволу зсуву (Enable).
PARAMETERS (WIDTH = 7);
ASSERT (WIDTH >0)
REPORT "Value of WIDTH parameter must be greater then % "WIDTH
SEVERITY ERROR;
SUBDESIGN RG_SHIFT
(
DIN : INPUT = GND;
SET, RESET, ENABLE : INPUT = VCC;
CLK : INPUT;
Q[WIDTH..0], Q_n : OUTPUT;
)
VARIABLE
FF[WIDTH..0] : DFFE;
BEGIN
ASSERT USED(CLK)
REPORT "Input CKL must be used"
SEVERITY EROR;
FF[].(CLK, CLRN, PRN) = (CLK, RESET, SET);
FF[].D = (FF[WIDTH-1..0].Q, DIN);
Q[] = FF[].Q;
FF[].ENA = ENABLE;
Q_n = FF[WIDTH].Q;
END;
Вираз FF[].d = (FF[WIDTH-1.. i].q, Din) задає операцію зсуву даних у регістрі. При WIDTH=4 воно еквівалентно наступним виразам:
FF[4].d=FF[3].q;
FF[3].d=FF[2].q;
FF[2].d=FF[1].q;
FF[1].d=Din;
Результати моделювання регістра при WIDTH=8 наведено на рис. 27.
Рис. 27.
2.1.3. Регістр зсуву з паралельним завантаженням даних
Нижче наведене параметризований опис WIDTH-розрядного регістра, що має входи: асинхронної установки (Set), асинхронного скидання (Reset), дозволу паралельного завантаження (Load) і дозволу роботи (Enable).
PARAMETERS (WIDTH = 7);
ASSERT (WIDTH >0)
REPORT "Value of WIDTH parameter must be greater then % "WIDTH
SEVERITY ERROR;
SUBDESIGN RG_UNIVERSAL
(
Data[WIDTH..0], Vin : INPUT = GND;
SET, RESET, ENABLE : INPUT = VCC;
CLK, Load : INPUT = GND;
Q[WIDTH..0] : OUTPUT;
)
VARIABLE
FF[WIDTH..0] : DFFE;
BEGIN
ASSERT USED(CLK)
REPORT "Input CKL must be used"
SEVERITY EROR;
FF[].ENA = ENABLE;
FF[].(CLK, CLRN, PRN) = (CLK, RESET, SET);
IF Load == 0
THEN
FF[].D = (FF[WIDTH-1..0].Q, Vin);
ELSE
FF[].D = Data[];
END IF;
Q[] = FF[].Q;
END;
Регістр здійснює зсув даних в сторону старших розрядів із заповненням молодшого розряду, що звільнився, логічним сигналом, що є присутнім на вході послідовного запису інформації Vin.
Відзначимо, що входи асинхронної установки (Set) і скидання (Reset) мають більш високий пріоритет у порівнянні із входом дозволу роботи (Enable), а він, у свою чергу, має більш високий пріоритет щодо входу дозволу паралельного завантаження (Load). Так, якщо на вході Enable логічний нуль, то незалежно від значення сигналу на вході Load, регістр буде здійснювати зберігання даних. Аналогічно, при Reset=0 кожний розряд регістра буде асинхронно скинутий у нуль незалежно від значення сигналу на вході Enable.
Результати моделювання регістра при WIDTH=8 наведено на рис. 28
Рис. 28.
2.1.4. Універсальний регістр
Нижче наведено параметризований опис WIDTH-розрядного універсального регістра, що забезпечує як паралельне завантаження інформації, так і зсув інформації як вліво (з молодших розрядів у старші), так і вправо (зі старших розрядів у молодші). Регістр оснащений входом послідовного введення інформації, причому інформація із цього входу завжди записується у вивільнюваний при зсуву розряд, тобто при зсуві вправо - у старший розряд, а при зсуві вліво - у молодший розряд. Регістр оснащений наступними керуючими входами: асинхронної установки (Set), асинхронного скидання (Reset), дозволом паралельного завантаження (Load), напрямком зсуву й дозволу роботи (Enable).
PARAMETERS (WIDTH = 7);
ASSERT (WIDTH >0)
REPORT "Value of WIDTH parameter must be greater then % "WIDTH
SEVERITY ERROR;
SUBDESIGN RG_UNIVERSAL_RL
(
Data[WIDTH..0], Vin : INPUT = GND;
SET, RESET, ENABLE : INPUT = VCC;
CLK, Load, RIGHT/LEFT : INPUT = GND;
Q[WIDTH..0] : OUTPUT;
)
VARIABLE
FF[WIDTH..0] : DFFE;
BEGIN
ASSERT USED(CLK)
REPORT "Input CKL must be used"
SEVERITY EROR;
FF[].ENA = ENABLE;
FF[].(CLK, CLRN, PRN) = (CLK, RESET, SET);
IF Load == 0 -- Паралельне синхронне завантаження
THEN
FF[].D = Data[];
ELSIF -- Режим зсуву інформації
RIGHT/LEFT==0 -- Зрушення вправо (Зі старших розрядів у молодші)
THEN
FF[].D = (Vin, FF[WIDTH..1].Q);
ELSE -- Зсув вліво (З молодших розрядів у старші)
FF[].D = (FF[WIDTH-1..0].Q, Vin);
END IF;
Q[] = FF[].Q;
END;
Опис алгоритму роботи пристрою (розділ опису логіки) починається з перевірки використання тактового сигналу. Ступінь строгості цієї перевірки - ERROR. Тому, якщо при використанні цієї програми сигнал CLK не заданий, компілятор видасть повідомлення про помилку й припинить роботу.
Результати моделювання універсального регістра наведено на рис. 29.
Рис. 29.
