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

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.