DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерної техніки, автоматики та метрології
Факультет:
Не вказано
Кафедра:
Не вказано

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

Рік:
2012
Тип роботи:
Звіт
Предмет:
Моделювання
Група:
КІ

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІНСТИТУТ КОМП’ЮТЕРНОЇ ТЕХНІКИ АВТОМАТИКИ ТА МЕТРОЛОГІЇ ЗВІТ ЛАБОРАТОРНОЇ РОБОТИ №7 З ПРЕДМЕТУ: «Моделювання комп'ютерних систем» ТЕМА: «Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL» Підготувала: студентка групи КІ-21 Петруняк Марта Перевірив: Колодчак О.М. Львів – 2012 Мета: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL. Теоретичні відомості Функціональна схема сканера клавіатури. Клавіатура більшості обчислювальних пристроїв змонтована у вигляді прямокутної матриці, у точках перетину рядків і стовбців якої розташовуються кнопочні контакти. Скануючий пристрій, що розробляється, повинен визначати номер елемента матриці, який відповідає натисненій клавіші, і видавати відповідний йому двійковий код.  Основні стани сканеру клавіатури і умови переходу від одного стану до іншого. Сканер працює у двох головних режимах: 1. Режим очікування: - На всі рядки матриці клавіатури, які позначені Scan(0), Scan(1), Scan(2), Scan(3) подається логічна одиниця. - Всі стовбці матриці клавіатури, позначені Ret(0), Ret(1), Ret(2), Ret(3) мають низький рівень сигналу. - Рівень сигналів Ret перевіряється з кожним синхронізуючим імпульсом ClLK, і, якщо один з них змінить своє значення з '0' на '1', це сигналізує про натиснення однієї з клавіш. При цьому сканер переходить в наступний режим. 2. Режим сканування: - На рядок 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' Сканер переходить в режим очікування.   Опис інтерфейсу системи. 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; Діаграма скінчених автоматів  Лістинг програми: ------------------------------------------------------------------------------- -- -- Title : No Title -- Design : lr_7 -- Author : Ада -- Company : BlackShine -- ------------------------------------------------------------------------------- -- -- File : c:\My_Designs\lr_7\compile\skaner.vhd -- Generated : 02/13/12 11:44:08 -- From : c:\My_Designs\lr_7\src\skaner.asf -- By : FSM2VHDL ver. 5.0.3.4 -- ------------------------------------------------------------------------------- -- -- Description : -- ------------------------------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity skaner 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 skaner; architecture skaner_arch of skaner is -- diagram signals declarations signal Cond: STD_LOGIC; -- SYMBOLIC ENCODED state machine: Sreg0 type Sreg0_type is ( S1, S2, S3, S4, S5, S6 ); -- 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 <= "1111"; STROBE <= '0'; if Cond='0' then Sreg0 <= S1; elsif Cond='1' then Sreg0 <= S2; end if; when S2 => SCAN <= "0001"; if Cond='1' then Sreg0 <= S6; elsif Cond='0' then Sreg0 <= S3; end if; when S3 => SCAN <= "0010"; if Cond='1' then Sreg0 <= S6; elsif Cond='0' then Sreg0 <= S4; end if; when S4 => SCAN <= "0100"; if Cond='1' then Sreg0 <= S6; elsif Cond='0' then Sreg0 <= S5; end if; when S5 => SCAN <= "1000"; if Cond='1' then Sreg0 <= S6; elsif Cond='0' then Sreg0 <= S1; end if; when S6 => STROBE <= '1'; if Cond='0' then Sreg0 <= S1; elsif Cond='1' then Sreg0 <= S6; end if; when others => null; end case; end if; end process; -- signal assignment statements for combinatorial outputs KEYCODE_assignment: KEYCODE <= "00000000" when (Sreg0 = S1) else RET&SCAN when (Sreg0 = S6) else "00000000"; end skaner_arch;  Висновки: виконавши дану лабораторну роботу, я вивчила принцип роботи сканера клавіатури та отримала навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
Антиботан аватар за замовчуванням

25.11.2012 18:48

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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