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

2.1.5. Циклічний регістр зсуву

Циклічний регістр зсуву, забезпечує можливість паралельного завантаження регістра, а також дозволяє за один такт циклічно зсунути всі дані, що зберігаються в ньому, на задане число розрядів.

Нижче наведений опис циклічного регістра зсуву, що має:

Data[WIDTH..0] — інформаційні входи паралельного завантаження;

CLK — тактовий вхід;

ENABLE — вхід дозволу роботи;

Load - вхід керування (1 - паралельне завантаження, 0 - зсув);

Right/Left - вхід вибору напрямку зсуву (1 - вправо, 0 - вліво);

Reset - вхід асинхронного скидання регістра;

Set - вхід асинхронної установки регістра;

S[2..0] - код, що вказує число розрядів, на яке здійснюється зсув;

Q[8..1] - виходи.

PARAMETERS (WIDTH = 7);

ASSERT (WIDTH >4)

REPORT "Value of WIDTH parameter must be greater then % "WIDTH

SEVERITY ERROR;

SUBDESIGN RG_UN_RL_STEP

(

Data[WIDTH..0], Vin : INPUT = GND;

SET, RESET, ENABLE : INPUT = VCC;

CLK, Load, RIGHT/LEFT : INPUT = GND;

S[1..0] : INPUT = GND;

Q[WIDTH..0] : OUTPUT;

)

VARIABLE

FF[WIDTH..0] : DFFE;

BEGIN

ASSERT USED(CLK)

REPORT "Input CKL must be used"

SEVERITY EROR;

ASSERT USED (Load) !$ USED (DATA)

REPORT "Inputs ""Load"" and ""DATA"" must be used together"

SEVERITY ERROR;

FF[].ENA = ENABLE;

FF[].(CLK, CLRN, PRN) = (CLK, RESET, SET);

IF Load == 1 -- Паралельне синхронне завантаження

THEN

FF[].D = Data[];

ELSIF -- Режим зсуву інформації

RIGHT/LEFT==1 -- Зсув вправо (Зі старших розрядів

-- у молодші)

THEN

CASE S[] is

WHEN B"00"=>FF[].D = (Vin, FF[WIDTH..1].Q);

-- Зсув вправо на один

-- розряд із записом сигналу Vin.

WHEN B"01"=>FF[].D = (FF[0].Q, FF[WIDTH..1].Q);

-- Циклічний зсув вправо на один розряд.

WHEN B"10"=>FF[].D = (FF[1..0].Q, FF[WIDTH..2].Q);

-- Циклічний зсув вправо на два розряди.

WHEN B"11"=>FF[].D = (FF[2..0].Q, FF[WIDTH..3].Q);

--Циклічний зсув вправо на три розряди.

END CASE;

ELSE -- Зсув вліво (З молодших розрядів у старші)

CASE S[] IS

WHEN B"00"=>FF[].D = (FF[WIDTH-1..0].Q, Vin);

-- Зсув вліво із записом

-- значення Vin у молодший розряд.

WHEN B"01"=>FF[].D = (FF[WIDTH-1..0].Q, FF[WIDTH].Q);

-- Циклічний зсув вправо на один розряд.

WHEN B"10"=>FF[].D = (FF[WIDTH-2..0].Q, FF[WIDTH..WIDTH-1].Q); -- Циклічний

-- зсув вправо на два розряди.

WHEN B"11"=>FF[].D = (FF[WIDTH-3..0].Q, FF[WIDTH..WIDTH-2].Q); -- Циклічний

--зсув вправо на три розряди.

END CASE;

END IF;

Q[] = FF[].Q;

END;

У програмі виконується три перевірки:

  • Перевірка числа розрядів (ASSERT (WIDTH >4)). Число розрядів повинно бути не менше 4 інакше неможливо виконання операції зсуву інформації на три розряди вправо або вліво.

  • Перевірка використання сигналу синхронізації (ASSERT USED(CLK)).

  • Перевірка спільного використання керуючого входу паралельного завантаження (Load) і інформаційних входів, призначеної для введення інформації в паралельному вигляді (Data[]) (ASSERT USED (Load) !$ USED (DATA)).

Ступінь строгості виконуваних перевірок - ERROR.

Відзначимо, що рівняння FF[].D = (FF[4..1].Q, FF[8. .5].Q) і FF[].D = (Q[4..1],Q[8..5]) є еквівалентними, оскільки Q[] = FF[].Q.

Результати моделювання циклічного регістра зсуву, наведено на рис. 30

Рис. 30.

ЛІТЕРАТУРА

  1. Осадчий Ю.Ф. Язык описания аппаратуры AHDL. Метод. указания.