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

Автор работы: Пользователь скрыл имя, 04 Апреля 2012 в 17:15, лабораторная работа

Описание работы

Мета: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.

Файлы: 1 файл

Моделювання комп систем звіт №7.doc

— 185.00 Кб (Скачать файл)


національний університет

«Львівська політехніка»

 

Кафедра ЕОМ

 

 

Звіт

лабораторної роботи №7

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

 

з дисципліни:

«Моделювання комп'ютерних систем »

 

 

 

Виконав:

ст. гр. КІ-24

Дутка  В.Я

 

Прийняв:

Ногаль М.В.

 

 

Львів-2012

Мета: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL. 

Теоретичні відомості:

Клавіатура більшості обчислювальних пристроїв змонтована у вигляді прямокутної матриці, у точках перетину рядків і стовбців якої розташовуються кнопочні контакти. Скануючий пристрій, що розробляється, повинен визначати номер елемента матриці, який відповідає натисненій клавіші, і видавати відповідний йому двійковий код.

Сканер працює у двох головних режимах:

1.                  Режим очікування:

1.                                           На всі рядки матриці клавіатури, які позначені Scan(0), Scan(1), Scan(2), Scan(3) подається логічна одиниця.

2.                                           Всі стовбці матриці клавіатури, позначені Ret(0), Ret(1), Ret(2), Ret(3) мають низький рівень сигналу.

3.                                           Рівень сигналів Ret перевіряється з кожним синхронізуючим імпульсом ClLK, і, якщо один з них змінить своє значення з '0' на '1', це сигналізує про натиснення однієї з клавіш. При цьому сканер переходить в наступний режим.

2.                  Режим сканування:

1.                                           На рядок Scan(0) подається сигнал високого рівня, а на всі інші рядки - низького рівня.

2.                                           Перевіряється рівень сигналів Ret.

3.                                           Якщо рівень одного з Ret (наприклад, Ret(1)) зміниться з "низького" на "високий", це означає, що було замкнено контакт, який розташований на перетині рядка Scan(0) та стовбця Ret(1). Тобто номер елемента матриці клавіатури, якому відповідає натиснена клавіша, знайдено.

4.                                           Сканер передає цю інформацію у кодер для формування відповідного коду обраної цифри або операції та знову переходить до режиму очікування.

5.                                           Якщо рівень всіх рядків 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'

Сканер переходить в режим очікування.

              Результат роботи:

Рис.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. 



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