Смекни!
smekni.com

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

Визначення “з крізним переносом” і “асинхронний” говорять про те, що запуск тригерів відбувається не в один і той же час. Назва “лічильник за модулем 16” віддзеркалює число різних станів, що “проходяться” лічильником за один повний цикл лічби. Визначення “4-розрядний” вказує на число двійкових розрядів на виході лічильника.

7.3.2 Асинхронний лічильник з модулем 10

Лічильник за модулем 10 рахує від 0000 до 1001 (від 0 до 9 в десятковій системі), тобто перші 10 комбінацій в табл. 7.3.1. Ми бачимо, що для цього потрібно чотири двійкових розряди: розряд одиниць, розряд двійок, розряд четвірок і розряд вісімок.

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


Такий лічильник можливо реалізувати на чотирьох тригерах, з’єднаних по схемі описаного вище асинхронного лічильника. В схему потрібно додатково ввести логічний елемент І-НЕ (рис. 7.3.3) для встановлення всіх тригерів в нульовий стан, очищення лічильника, з приходом десятого імпульсу (тобто з приходом першого імпульсу після того, як лічильник нарахував до 1001 – 9 в десятковій системі).

Принцип використання такого логічного елемента стає зрозумілим якщо розглянути яке двійкове число настає за 1001. З табл. 7.3.1 видно, що цим числом є 1010 (10 в десятковій системі). При поданні логічної 1 , що міститься в розрядах двійок і вісімок двійкового числа 1010, на входи логічного елемента І-НЕ (як показано на рис. 7.3.3), цей елемент встановить всі тригери в стан 0. Лічильник почне рахувати від 0000 до 1001. Таким чином, логічний елемент І-НЕ забезпечує встановлення лічильника в стан 0000. Подібне використання логічного елемента І-НЕ дозволяє створити лічильники з деякими іншими значеннями модуля. На рис. 7.3.3 показано функціональну схему асинхронного лічильника за модулем 10. Цей лічильник можливо також назвати декадним (десятковим) лічильником.

7.3.3 Лічильник віднімання

Вище було описано лічильники, що рахують в прямому напрямку (0, 1, 2,...). Однак в деяких цифрових системах з’являється необхідність рахування в зворотному напрямку (9, 8, 7, 6,...). Лічильники, які рахують від більших чисел до менших називають лічильниками віднімання, або лічильниками зворотної дії.

Схема асинхронного лічильника віднімання за модулем 8 показано на рис. 7.3.4, відповідна відлікова послідовність чисел наведена в табл. 7.3.2.


Рис. 7.3.4. Логічна схема асинхронного 3-розрядного лічильника віднімання

Табл. 7.3.2. Відлікова послідовність для 3-розрядного лічильника віднімання

Номер тактового імпульсу Двійкова відлікова послідовність Десяткові числа
Т3 Т2 Т1
0 1 1 1 7
1 1 1 0 6
2 1 0 1 5
3 1 0 0 4
4 0 1 1 3
5 0 1 0 2
6 0 0 1 1
7 0 0 0 0
8 1 1 1 7
9 1 1 0 6

Треба звернути увагу на те, що схема лічильника віднімання нагадує схему лічильника прямої дії на рис. 7.3.1. Єдиною відмінністю є спосіб переносу від тригера Т1 до тригера Т2 і від тригера Т2 до тригера Т3. В лічильнику прямої дії синхронізуючий вхід кожного тригера пов’язаний з інверсним виходом Q попереднього тригера. Зауважимо, що в лічильнику відліку перед початком відліку в зворотному напрямку передбачене його попереднє встановлення в стан 111 (деcяткове число 7) за допомогою входу предвстановлення (PRN). Тригер Т3 – двійковий лічильник розряду одиниць (стовпець T1). Тригер Т2 – лічильник розряду двійок (стовпець T2). Тригер Т3 – лічильник розряду четвірок (стовпець T3).


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

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

title "counter1";

parameters

(WIDTH = 4); - встановлення розрядності лічильника

assert (WIDTH > 0) - перевірка розрядності лічильника

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

severity error;

subdesign counter1

(

CLK : input; - імпульси синхронізації (CLK) лічильника

RESET : input; - імпульси зкидання (CLRN) тригерів лічильника

SET : input; - імпульси предвстановлеення (PRN) тригерів лічильника

O [WIDTH..1] : output; - вихід лічильника

)

variable

TRIGGER [WIDTH..1] : JKFF;

begin

TRIGGER [WIDTH..1].j = vcc;

TRIGGER [WIDTH..1].k = vcc;

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

TRIGGER [WIDTH..1].prn = !SET;

TRIGGER [WIDTH].clk = !CLK;

TRIGGER [WIDTH-1..1].clk = !TRIGGER [WIDTH..2].q;

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

end;

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

title "counter2";

parameters

(WIDTH = 4); - встановлення розрядності лічильника

assert (WIDTH > 0) - перевірка розрядності лічильника

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

severity error;

subdesign counter2

(

CLK : input; - імпульси синхронізації (CLK) лічильника

SET : input; - імпульси предвстановлення (PRN) тригерів лічильника

O [WIDTH..1] : output; - вихід лічильника

)

variable

TRIGGER [WIDTH..1] : JKFF;

begin

TRIGGER [WIDTH..1].j = vcc;

TRIGGER [WIDTH..1].k = vcc;

TRIGGER [WIDTH..1].prn = !SET;

TRIGGER [WIDTH].clk = !CLK;

TRIGGER [WIDTH-1..1].clk = !TRIGGER [WIDTH..2].q;

TRIGGER [WIDTH..1].clrn = (TRIGGER [3].q !& TRIGGER [1].q);

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

end;

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

title "counter3";

parameters

(WIDTH = 3); - встановлення розрядності лічильника

assert (WIDTH > 0) - перевірка розрядності лічильника

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

severity Error;

subdesign counter3

(

CLK : input; - імпульси синхронізації (CLK) лічильника

RESET : input; - імпульси зкидання (CLRN) тригерів лічильника

SET : input; - імпульси предвстановлення (PRN) тригерів лічильника

O[WIDTH..1] : output; - вихід лічильника

)

variable

TRIGGER[WIDTH..1] : JKFF;

begin

TRIGGER [WIDTH..1].j = vcc;

TRIGGER [WIDTH..1].k = vcc;

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

TRIGGER [WIDTH..1].prn = !SET;

TRIGGER [WIDTH..1].clk = (CLK, !TRIGGER [WIDTH..2].q);

O [WIDTH..1] = !TRIGGER [1..WIDTH].q;

end;

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

title "counter4";

parameters

(WIDTH = 3); - встановлення розрядності лічильника

assert (WIDTH > 0) - перевірка розрядності лічильника

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

severity Error;

subdesign counter4

(

CLK : input; - імпульси синхронізації (CLK) лічильника

SET : input; - імпульси предвстановлення (PRN) тригерів лічильника

RESET : input; - імпульси зкидання (CLRN) тригерів лічильника

FWC : input;

BWC : input;

O[WIDTH..1] : output; - вихід лічильника

)

variable

TRIGGER[WIDTH..1] : JKFF;

begin

TRIGGER[].j = vcc;

TRIGGER[].k = vcc;

TRIGGER[].prn = !SET;

TRIGGER[].clrn = !RESET;

TRIGGER[WIDTH].clk = !CLK;

TRIGGER[WIDTH-1..1].clk = !((TRIGGER[WIDTH..2].q & !FWC) & !(!TRIGGER[WIDTH..2].q & !BWC));

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

end;

- Примітка:

- Значення входів, що відповідают вставленню відліку лічильника в

- зростаючому напрямку:

- FWC = 1;

- BWC = 0.

- Значення входів, що відповідают вставленню відліку лічильника в

- спадаючому напрямку:

- FWC = 0;

- BWC = 1.

7.3.5 Результати програмної реалізації лічильників

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

Рис 7.3.5. Результати тестування 4-розрядного асинхронного лічильника з крізним переносом за модулем 16

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

Рис 7.3.6. Результати тестування асинхронного лічильника за модулем 10

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


Рис 7.3.7. Результати тестування 3-розрядного синхронного лічильника

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

Рис 7.3.8. Результати тестування 3-розрядного універсального лічильника

7.4 Теоретичні відомості про мультиплексори, демультиплексори, шифратори, дешифратори

7.4.1 Мультиплексор

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

Типове використання мультиплексорів – передача даних від кількох рознесених в просторі джерел інформації на вхід приймача. Припустимо, вимірюється температура навколишнього середовища в кількох приміщеннях й результати цих вимірів повинні бути виведені на ЕОМ. При цьому, так як температура змінюється повільно, для отримання достатньої точності зовсім не обов’язково виміряти її постійно. А достатньо мати виміри, проведені через деякі фіксовані проміжки часу. Головне, щоб проміжки між двома вимірами були суттєво менші за сталу часу, що характеризує зміну температури в приміщенні, яке контролюється. Саме цю функцію, тобто підключення різних джерел інформації до одного приймача, за заданою командою, і виконує мультиплексор. Інформацію, рознесену в просторі, він перетворює до вигляду з розділом в часі.

Відповідно до визначення, мультиплексор повинен мати один вихід і дві групи входів: інформаційні і адресні. Код, що подається на адресні входи, визначає, який з інформаційних входів в даний момент підключений до вихідного виводу. Оскільки n-розрядний двійковий код може приймати 2n значень, то, якщо число адресних входів мультиплексора дорівнює n, то число його інформаційних входів повинно дорівнювати 2n.