Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ  Лабораторна робота №7 Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL Мета роботи: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL. Теоретична частина Клавіатура більшості обчислювальних пристроїв змонтована у вигляді прямокутної матриці, у точках перетину рядків і стовбців якої розташовуються кнопочні контакти. Скануючий пристрій, що розробляється, повинен визначати номер елемента матриці, який відповідає натисненій клавіші, і видавати відповідний йому двійковий код.  Сканер працює у двох головних режимах: Режим очікування: На всі рядки матриці клавіатури, які позначені Scan(0), Scan(1), Scan(2), Scan(3) подається логічна одиниця. Всі стовбці матриці клавіатури, позначені Ret(0), Ret(1), Ret(2), Ret(3) мають низький рівень сигналу. Рівень сигналів Ret перевіряється з кожним синхронізуючим імпульсом ClLK, і, якщо один з них змінить своє значення з '0' на '1', це сигналізує про натиснення однієї з клавіш. При цьому сканер переходить в наступний режим. Режим сканування: На рядок Scan(0) подається сигнал високого рівня, а на всі інші рядки - низького рівня. Перевіряється рівень сигналів Ret. Якщо рівень одного з Ret (наприклад, Ret(1)) зміниться з "низького" на "високий", це означає, що було замкнено контакт, який розташований на перетині рядка Scan(0) та стовбця Ret(1). Тобто номер елемента матриці клавіатури, якому відповідає натиснена клавіша, знайдено. Сканер передає цю інформацію у кодер для формування відповідного коду обраної цифри або операції та знову переходить до режиму очікування. Якщо рівень всіх рядків Ret залишається низьким, то проводиться перевірка наступного рядка матриці, і т.д. Приклад роботи сканера у випадку натиснення клавіши '3': № Дії Результати Висновки  1. Scan = "1111" Ret = "0000" Сканер знаходиться в стані очікування.  2. Scan = "1111" Ret = "0010" Одержано інформацію про натиснення клавіши. Сканер переходить в режим сканування.  3. Scan = "0001" Ret = "0000" Натиснена клавіша не знаходиться в першому рядку матриці.  4. Scan = "0010" Ret = "0000" Натиснена клавіша не знаходиться в другому рядку матриці.  5. Scan = "0100" Ret = "0010" Натиснена клавіша знаходиться на перетині третього рядка і другого стовбця матриці.  6. KeyCode = Scan & Ret KeyCode = "01000010" Strobe = '1' Сканер переходить в режим очікування.   Тексти VHDL-кодів: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity Keyboard is port ( CLK: in STD_LOGIC; ret: in STD_LOGIC_VECTOR (3 downto 0); KeyCode: out STD_LOGIC_VECTOR (7 downto 0); Strobe: out STD_LOGIC; Scan: inout STD_LOGIC_VECTOR (3 downto 0)); end Keyboard; architecture Keyboard of Keyboard is -- diagram signals declarations signal Cond: STD_LOGIC; -- SYMBOLIC ENCODED state machine: Sreg0 type Sreg0_type is ( S1, S2, S3, S4, S5, S0 ); -- attribute enum_encoding of Sreg0_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding signal Sreg0: Sreg0_type; begin ---------------------------------------------------------------------- -- Machine: Sreg0 ---------------------------------------------------------------------- Sreg0_machine: process (CLK) begin if CLK'event and CLK = '1' then -- Set default values for outputs, signals and variables -- ... --Cond <= ret(0) or ret(1) or ret(2) or ret(3); case Sreg0 is when S1 => Scan <= "0001"; if Cond = '0' then Sreg0 <= S2; elsif Cond = '1' then Sreg0 <= S5 end if; when S2 => Scan <= "0010"; if Cond = '0' then Sreg0 <= S3; elsif Cond = '1' then Sreg0 <= S5; end if; when S3 => Scan <= "0100"; if Cond = '0' then Sreg0 <= S4; elsif Cond = '1' then Sreg0 <= S5; end if; when S4 => Scan <= "1000"; if Cond = '1' then Sreg0 <= S5; elsif Cond = '0' then Sreg0 <= S0; end if; when S5 => Strobe <= '1'; if Cond = '0' then Sreg0 <= S0; elsif Cond = '1' then Sreg0 <= S5; end if; when S0 => Scan <= "1111"; Strobe <= '0'; if Cond='0' then Sreg0 <= S0; elsif Cond = '1' then Sreg0 <= S1; end if; --vhdl_cover_off when others => null; --vhdl_cover_on end case; end if; end process; -- signal assignment statements for combinatorial outputs KeyCode_assignment: KeyCode <= Ret&Scan when (Sreg0 = S5) else "00000000" when (Sreg0 = S0) else "00000000"; end Keyboard; Макет діаграми скінчених автоматів:  Часові діаграми роботи ПЗП:  Висновки: я вивчив принцип роботи сканера клавіатури. Отримав навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
Антиботан аватар за замовчуванням

12.09.2013 18:09-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!