МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
ЛАБОРАТОРНА РОБОТА № 4
З ПРЕДМЕТУ ”Мова опису програмних засобів”
НА ТЕМУ:
“ Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL.”
Підготував:ст.гр.КІ-42
Трофімов О.С.
Прийняла: Колодчак О.М.
ЛЬВІВ 2005
Лабораторна робота №4
Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL
Мета роботи: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами 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 залишається низьким, то проводиться перевірка наступного рядка матриці, і т.д.
Порядок виконання роботи:
Створити новий порожній проект в Active-HDL.
Виходячи з основного принципу роботи сканера клавіатури, визначити основні стани пристрою і умови переходу від одного стану до іншого.
Визначити інтерфейс системи.
За допомогою Add New File і State Diagram Wizard створити макет діаграми скінчених автоматів.
Скласти діаграму скінчених автоматів.
Використовуючи кнопку робочої панелі FSM State Editor, створити в робочій області необхідну кількість кружків відповідно до кількості можливих станів сканера (S0, S1, ...), які були визначені в п.2.
Використовуючи кнопку робочої панелі FSM State Editor, відобразити за допомогою стрілок зв'язки між станами.
Оскільки як в режимі очікування, так і в режимі сканування потрібно перевіряти, чи має хоча б один з сигналів Ret значення '1', то буде зручно ввести локальний сигнал Cond = (Ret(0) or Ret(1) or Ret(2) or Ret(3)) за допомогою кнопки робочої панелі FSM State Editor.
Використовуючи кнопку робочої панелі FSM State Editor, визначити умови переходів між станами.
Використовуючи кнопку робочої панелі FSM State Editor, визначити дії, що виконуються в кожному стані скінченого автомата.
Використовуючи кнопку робочої панелі FSM State Editor, додати джерело діаграми, встановивши його на стан S0.
Ознайомитись з властивостями кожного об'єкту (параметрами, діями, умовами). Для відкриття відповідного діалогового вікна слід навести курсор на об'єкт, клацнути правою кнопкою миші і вибрати пункт "Properties" з локального меню.
Послідовним натисненням кнопок і сформувати і відобразити VHDL-код, що відповідає створеній діаграмі скінчених автоматів.
Вивчити відповідність графічних об'єктів діаграми і VHDL-коду.
Скомпілювати пристрій та промоделювати його роботу.
Виконання роботи
Діаграма скінчених автоматів
Текст програми
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity Laba4_Diagram 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 Laba4_Diagram_arch of Laba4_Diagram is
signal Cond: STD_LOGIC;
type Sreg0_type is (S0, S1, S3, S4, S5, S2);
signal Sreg0: Sreg0_type;
begin
Сond <= Ret(0) or Ret(1) or Ret(2) or Ret(3) ;
Sreg0_machine: process (CLK)
begin
if CLK'event and CLK = '1' then
case Sreg0 is
when S0 =>
Scan <= "1111";
Strobe <= '1';
KeyCode <= "00000000";
if Cond = '0' then
Sreg0 <= S0;
elsif Cond = '1' then
Sreg0 <= S1;
end if;
when S1 =>
Scan <= "0001";
if Cond = '0' then
Sreg0 <= S2;
elsif Cond = '1' then
Sreg0 <= S5;
end if;
when S3 =>
Scan <= "0100";
if Cond = '1' then
Sreg0 <= S5;
elsif Cond = '0' then
Sreg0 <= S4;
end if;
when S4 =>
Scan <= "1000";
if Cond = '0' then
Sreg0 <= S0;
elsif Cond = '1' then
Sreg0 <= S5;
end if;
when S5 =>
KeyCode <= Ret & Scan;
Strobe <= '1';
if Cond = '1' then
Sreg0 <= S5;
elsif Cond = '0' then
Sreg0 <= S0;
end if;
when S2 =>
Scan <= "0010";
if Cond = '1' then
Sreg0 <= S5;
elsif Cond = '0' then
Sreg0 <= S3;
end if;
when others =>
null;
end case;
end if;
end process;
end Laba4_Diagram_arch;
Висновок: в ході лабораторної роботи я вивчив принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL