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

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

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

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

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Мови опису апаратних засобів

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт до лабораторної роботи №7 з дисципліни „Мови опису апаратних засобів” „Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL” Львів – 2010 Мета роботи: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами 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 Scan_key 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; architecture Scan_key of Scan_key is -- diagram signals declarations signal Cond: STD_LOGIC; -- SYMBOLIC ENCODED state machine: Sreg0 type Sreg0_type is (S0, S1, S2, S3, S4, S5); -- attribute enum_encoding of Sreg0_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding signal Sreg0: Sreg0_type; begin -- concurrent signals assignments Cond <= (Ret(0) or Ret(1) or Ret(2) or Ret(3)); ---------------------------------------------------------------------- -- Machine: Sreg0 ---------------------------------------------------------------------- Sreg0_machine: process (CLK) begin if CLK'event and CLK = '1' then -- Set default values for registered outputs/signals and for variables -- ... case Sreg0 is when S0 => Strobe <= '0'; if Cond = '0' then Sreg0 <= S0; elsif Cond = '1' then Sreg0 <= S1; end if; when S1 => if Cond = '0' then Sreg0 <= S2; elsif Cond = '1' then Sreg0 <= S5; end if; when S2 => if Cond = '0' then Sreg0 <= S3; elsif Cond = '1' then Sreg0 <= S5; end if; when S3 => if Cond = '0' then Sreg0 <= S4; elsif Cond = '1' then Sreg0 <= S5; end if; when S4 => if Cond = '0' then Sreg0 <= S0; elsif Cond = '1' then Sreg0 <= S5; end if; when S5 => Strobe <= '1'; if Cond = '1' then Sreg0 <= S5; elsif Cond = '0' then Sreg0 <= S0; end if; when others => null; end case; end if; end process; -- signal assignment statements for combinatorial outputs Scan_assignment: Scan <= "1111" when (Sreg0 = S0) else "0001" when (Sreg0 = S1) else "0010" when (Sreg0 = S2) else "0100" when (Sreg0 = S3) else "1000" when (Sreg0 = S4) else "1111"; KeyCode_assignment: KeyCode <= "00000000" when (Sreg0 = S0) else Scan & Ret when (Sreg0 = S5) else "00000000"; end Scan_key; Діаграма роботи:  Висновок: на даній лабораторній роботі я отримав навики проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL
Антиботан аватар за замовчуванням

05.01.2013 17:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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