МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІНСТИТУТ КОМП’ЮТЕРНОЇ ТЕХНІКИ АВТОМАТИКИ ТА МЕТРОЛОГІЇ
ЗВІТ ЛАБОРАТОРНОЇ РОБОТИ №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.