Смекни!
smekni.com

Розробка цифрових засобів ПЛІС в інтегрованому середовищі проектування MAX+PLUS II (стр. 8 из 14)

Входи паралельного завантаження A, B, C, D пов’язані з входами попереднього встановлення тригерів PRN, що дозволяє встановлювати рівень логічної одиниці на будь-якому виході (A, B, C, D). Якщо на один з цих входів подати логічний 0, то на відповідному виході буде логічна 1. Подача тактових імпульсів на входи CLK всіх JK-тригерів призводить до зсуву інформації в регістрі вправо. З тригеру TD дані передаються в тригер ТА (кільцеве переміщення інформації).

Табл. 7.2.2. Робота 4-розрядного паралельного кільцевого регістру зсуву

Входи Виходи
Номер рядка Очищення Паралельне завантаження даних Номер тактового імпульсу TB TC TD
A B C D А B C D
1 1 1 1 1 1 0 1 1 1 0
2 0 1 1 1 1 0 0 0 0 0
3 1 1 0 1 1 0 0 1 0 0
4 1 1 1 1 1 1 0 0 1 0
5 1 1 1 1 1 2 0 0 0 1
6 1 1 1 1 1 3 1 0 0 0
7 1 1 1 1 1 4 0 1 0 0
8 1 1 1 1 1 5 0 0 1 0
9 0 1 1 1 1 0 0 0 0
10 1 1 0 0 1 0 1 1 0
11 1 1 1 1 1 6 0 0 1 1
12 1 1 1 1 1 7 1 0 0 1
13 1 1 1 1 1 8 1 1 0 0
14 1 1 1 1 1 9 0 1 1 0
15 1 1 1 1 1 10 0 0 1 1

Табл. 7.2.2 допомагає зрозуміти принцип роботи паралельного регістру зсуву. При включенні живлення на виходах регістру встановлюється будь-яка двійкова комбінація, така, наприклад як в рядку 1 таблиці 7.2.2. Подача логічного 0 на входи CLR тригерів ініціює очищення регістру (рядок 2). Далі (рядок 3) відбувається завантаження в регістр двійкової комбінації 0100. Послідовні тактові імпульси викликають зсув введеної інформації вправо (рядки 4-8). Треба звернути увагу на рядки 5 і 6: одиниця з крайнього правого тригеру TD переноситься в крайній лівий тригер ТА. В даному випадку можливо говорити про кільцеве переміщення одиниці в регістрі.

Далі (рядок 9) заново ініціюється очищення регістру за допомогою входу CLR. Завантажується нова двійкова комбінація 0110 (рядок 10). Подача 5 тактових імпульсів (рядки 11-15) призводить до кільцевого зсуву інформації на 5 позицій вправо. Треба звернути увагу, що для повернення даних в початковий стан потрібно 4 тактових імпульси. Якщо в регістрі зсуву на рис. 2.2 розірвати ланцюг зворотного зв’язку, то ми отримаємо звичайний паралельний регістр зсуву; можливість кільцевого переміщення даних буде виключена.


7.2.3 Програма реалізації регістрів в інтегрованому середовищі MAX+PLUS II

Програма для реалізації 4-розрядного послідовного регістру зсуву за допомогою мови AHDL в інтегрованому середовищі MAX+PLUS II має наступний вигляд:

Title "register1";

Parameters

(WIDTH = 4); - встановлення розрядності регістру

Assert (WIDTH > 0) - перевірка розрядності регістру на відмінність від 0

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

Severity Error;

Subdesign register1

(

D_INPUT, SET, RESET : input = GND; - вхідні сигнали

CLK : input; - вхід синхронізації

ENABLE : input = VCC; - вхід дозволу роботи

Q_OUTPUT : output; - вихідні сигнали

)

Variable

FF[WIDTH..1] : DFFE; - об'ява змінної FF, що належить до класу DFFE

Begin

FF[].clk = CLK;

FF[].prn = !SET;

FF[].clrn = !RESET;

FF[].ena = ENABLE;

FF[].d = (FF[WIDTH-1..1].q, D_INPUT);

Q_OUTPUT = FF[WIDTH].q;

End;

- Примітка: на часовій діаграммі:

- FF - двійкове число на виході регістру

Програма для реалізації 4-розрядного паралельного кільцевого регістру зсуву за допомогою мови AHDL в інтегрованому середовищі MAX+PLUS II має наступний вигляд:

Subdesign register2

Parameters

(WIDTH = 4); - встановлення розрядності регістру

Assert (WIDTH > 0) - перевірка розрядності тригера (більша від нуля)

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

Severity Error;

(

I[WIDTH..1] : input = VCC; - вхідні сигнали (дані)

CLK : input;

RESET : input;

O[WIDTH..1] : output; - вихідні сигнали (дані)

)

Variable

FF[WIDTH..1] : JKFF; - об'ява змінної FF, що належить до класу JKFF

Begin

FF[WIDTH..1].j = (FF[WIDTH-1..1].q, FF[WIDTH].q);

FF[WIDTH..1].k = (!FF[WIDTH-1..1].q, !FF[WIDTH].q);

FF[WIDTH..1].clk = CLK;

FF[WIDTH..1].clrn = !RESET;

FF[WIDTH..1].prn = I[WIDTH..1];

O[WIDTH..1] = FF[WIDTH..1].q;

End;


7.2.4 Результати програмної реалізації регістрів

На рис. 7.2.3 зображено вікно сигнального редактору проекту “register1”.

Рис. 7.2.3. Результати тестування 4-розрядного послідовного регістру зсуву

На рис. 7.2.4 зображено вікно сигнального редактору проекту “register2”.

Рис. 7.2.3. Результати тестування 4-розрядного паралельного кільцевого регістру зсуву

7.3 Теоретичні відомості про лічильники

7.3.1 Лічильник з крізним переносом

Процедури двійкової і десяткової лічби ілюстровано в табл. 7.3.1. Використовуючи лише чотири двійкових розряди (T4, T3, T2, T1), ми можемо рахувати від 0000 до 1111 (від 0 до 15 в десятеричній системі відліку). Стовпчик T1 таблиці відповідає двійковому розряду одиниці або самій молодшій значимій цифрі. Зазвичай використовується термін “самий молодший розряд”. Стовпець T4 відповідає двійковому розряду вісімок або старшій значимій цифрі. Зазвичай використовується термін “самий старший розряд”. Зверніть увагу, що в стовпці одиниць цифри змінюються найчастіше. Якщо вам потрібний лічильник, що рахує від 0000 до 1111 в двійковій системі, у нього повинно бути 16 різних вихідних станів. Такий лічильник має назву лічильник за модулем 16. Модуль лічильника – це число різних станів, через які проходить лічильник в процесі одного повного циклу відліку.

Табл. 7.3.1. Відлікова послідовність для лічильника за модулем 16

Двійкова лічба Десяткова лічба
T4 T3 T2 T1
8 4 2 1
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9
1 0 1 0 10
1 0 1 1 11
1 1 0 0 12
1 1 0 1 13
1 1 1 0 14
1 1 1 1 15

Функціональна схема лічильника за модулем 16, зібраного з чотирьох JK-тригерів, показана на рис 7.3.1. Кожний JK-тригер працює в режимі переключення (J = K = 1). Нехай в початковий момент часу стан виходів лічильника відповідає двійковому числу 0000 - лічильник очищений. При надходженні тактового імпульсу 1 на синхронізуючий вхід CLK тригера Т1 цей тригер переключається, при проходженні зрізу імпульсу, і на індикаторі з’являється число 0001. Лічба продовжується: зріз сигналу на виході кожного тригеру запускає наступний тригер. Повертаючись до табл. 7.3.1. ми бачимо, що цифри (1 або 0) в стовпці T1 (одиниць) змінюються на кожному етапі лічби. Іншими словами тригер Т1 переключається з приходом кожного нового тактового імпульсу. Як бачимо з стовпця T2, тригер Т2 переключається в два рази рідше від тригера Т1. Взагалі кожний старший розряд в табл. 7.3.1 переключається в два рази рідше попереднього.

Рис. 7.3.1. Логічна схема лічильника за модулем 16

Роботу лічильника за модулем 16 ілюструють часові діаграми на рис. 7.3.2. Синхронізуючому входу відповідає верхня діаграма. Діаграми для виходів Q регістрів Т4, Т3, Т2, Т1 наведено нижче.

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

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


Рис. 7.3.2. Часова діаграма лічильника за модулем 16

Лічильник, функціональна схема якого показана на рис. 7.3.1, можливо назвати не тільки лічильником з крізним переносом, але й лічильником за модулем 16, 4-розрядним лічильником або асинхронним лічильником. Кожна з назв характеризує розглядувану схему з якогось одного боку.