Автор работы: Пользователь скрыл имя, 04 Апреля 2012 в 17:15, лабораторная работа
Мета: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
національний університет
«Львівська політехніка»
Кафедра ЕОМ
Звіт
лабораторної роботи №7
з дисципліни:
«Моделювання комп'ютерних систем »
Виконав:
ст. гр. КІ-24
Дутка В.Я
Прийняв:
Ногаль М.В.
Львів-2012
Мета: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
Теоретичні відомості:
Клавіатура більшості обчислювальних пристроїв змонтована у вигляді прямокутної матриці, у точках перетину рядків і стовбців якої розташовуються кнопочні контакти. Скануючий пристрій, що розробляється, повинен визначати номер елемента матриці, який відповідає натисненій клавіші, і видавати відповідний йому двійковий код.
Сканер працює у двох головних режимах:
1. Режим очікування:
1.
2.
3.
2. Режим сканування:
1.
2.
3.
4.
5.
Приклад роботи сканера у випадку натиснення клавіши '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" | Сканер переходить в режим очікування. |
Результат роботи:
Рис.1- Вмістиме файлу .asp.
Вмістиме файлу KL.vhd, який описує принцип роботи схеми:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity op is
port (
CLK: in STD_LOGIC;
Ret: in STD_LOGIC_VECTOR (3 downto 0);
KeyKode: out STD_LOGIC_VECTOR (7 downto 0);
Strobe: out STD_LOGIC;
Scan: inout STD_LOGIC_VECTOR (3 downto 0));
end;
architecture op of op is
-- diagram signals declarations
signal Count: STD_LOGIC; -- Count<=Ret(0) or Ret(1) or Ret(2) or Ret(3);
-- 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
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 S1 =>
Scan <= "1111";
Strobe <= '0';
if Count = '1' then
Sreg0 <= S2;
elsif Count = '0' then
Sreg0 <= S1;
end if;
when S2 =>
Scan <= "0001";
if Count = '1' then
Sreg0 <= S6;
elsif Count = '0' then
Sreg0 <= S3;
end if;
when S3 =>
Scan <= "0010";
if Count = '0' then
Sreg0 <= S4;
elsif Count = '1' then
Sreg0 <= S6;
end if;
when S4 =>
Scan <= "0100";
if Count = '0' then
Sreg0 <= S5;
elsif Count = '1' then
Sreg0 <= S6;
end if;
when S5 =>
Scan <= "1000";
if Count = '0' then
Sreg0 <= S1;
elsif Count = '1' then
Sreg0 <= S6;
end if;
when S6 =>
Strobe <= '1';
if Count = '1' then
Sreg0 <= S6;
elsif Count = '0' then
Sreg0 <= S1;
end if;
when others =>
null;
end case;
end if;
end process;
KeyKode_assignment:
KeyKode <= "00000000" when (Sreg0 = S1) else
Ret & Scan when (Sreg0 = S6) else
"00000000";
end op;
Код натиснутої клавіші на часовій діаграмі:
Висновок: Під час лабораторної роботи я вивчив принцип роботи сканера клавіатури. Отримав навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.