- •Мова опису апаратури 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.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.
ЛІТЕРАТУРА
Осадчий Ю.Ф. Язык описания аппаратуры AHDL. Метод. указания.
