Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра «Електронні обчислювальні машини»
/
Лабораторна робота №7
“ Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL ”
з дисципліни:
“ Моделювання комп'ютерних систем ”
Львів – 2014
Порядок виконання роботи:
1. Створити новий порожній проект в Active-HDL.
2. Виходячи з основного принципу роботи сканера клавіатури, визначити основні стани
пристрою і умови переходу від одного стану до іншого.
3. Визначити інтерфейс системи.
4. За допомогою Add New File і State Diagram Wizard створити макет діаграми скінчених
автоматів.
5. Скласти діаграму скінчених автоматів.
1. Використовуючи кнопку робочої панелі FSM State Editor, створити в робочій
області необхідну кількість кружків відповідно до кількості можливих станів
сканера (S0, S1, ...), які були визначені в п.2.
2. Використовуючи кнопку робочої панелі FSM State Editor, відобразити за
допомогою стрілок зв'язки між станами.
3. Оскільки як в режимі очікування, так і в режимі сканування потрібно перевіряти, чи
має хоча б один з сигналів Ret значення '1', то буде зручно ввести локальний сигнал
Cond = (Ret(0) or Ret(1) or Ret(2) or Ret(3)) за допомогою кнопки робочої панелі
FSM State Editor.
4. Використовуючи кнопку робочої панелі FSM State Editor, визначити умови
переходів між станами.
5. Використовуючи кнопку робочої панелі FSM State Editor, визначити дії, що
виконуються в кожному стані скінченого автомата.
6. Використовуючи кнопку робочої панелі FSM State Editor, додати джерело
діаграми, встановивши його на стан S0.
7. Ознайомитись з властивостями кожного об'єкту (параметрами, діями, умовами). Для
відкриття відповідного діалогового вікна слід навести курсор на об'єкт, клацнути
правою кнопкою миші і вибрати пункт "Properties" з локального меню.
6. Послідовним натисненням кнопок і сформувати і відобразити VHDL-код, що
відповідає створеній діаграмі скінчених автоматів.
7. Вивчити відповідність графічних об'єктів діаграми і VHDL-коду.
8. Скомпілювати пристрій та промоделювати його роботу.
9. Підготувати звіт до захисту.
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 залишається низьким, то проводиться перевірка
наступного рядка матриці, і т.д.
Мета роботи
Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
Функціональна схема сканера клавіатури
/
Основні стани сканеру клавіатури і умови переходу
від одного стану до іншого
Основні стани: S0, S1, S2, S3, S4, S5
S0 – початковий стан, режим очікування, якщо не відбувається зміна сигналу Ret(0) .. Ret(3) стан зберігається, якщо сигнал Ret(0) .. Ret(3) змінюється змінна Cond набуває значення ‘1’ і відбувається перехід в стан S1, змінній KeyCode присвоюється значення “00000000”
S1 – в цьому стані змінній Scan присвоюється значення “0001” і якщо не відбувається зміна сигналу Ret(0) .. Ret(3) відбувається перехід в стан S2, якщо сигнал Ret(0) .. Ret(3) змінюється змінна Cond набуває значення ‘1’ і відбувається перехід в стан S5
S2 - в цьому стані змінній Scan присвоюється значення “0010” і якщо не відбувається зміна сигналу Ret(0) .. Ret(3) відбувається перехід в стан S3, якщо сигнал Ret(0) .. Ret(3) змінюється змінна Cond набуває значення ‘1’ і відбувається перехід в стан S5
S3 - в цьому стані змінній Scan присвоюється значення “0100” і якщо не відбувається зміна сигналу Ret(0) .. Ret(3) відбувається перехід в стан S4, якщо сигнал Ret(0) .. Ret(3) змінюється змінна Cond набуває значення ‘1’ і відбувається перехід в стан S5
S4 - в цьому стані змінній Scan присвоюється значення “1000” і якщо не відбувається зміна сигналу Ret(0) .. Ret(3) відбувається перехід в стан S0, якщо сигнал Ret(0) .. Ret(3) змінюється змінна Cond набуває значення ‘1’ і відбувається перехід в стан S5
S5 - в цьому стані змінній KeyCode присвоюється значення змінних Ret&Scan та змінній Storbe значення ‘1’, якщо не відбувається зміна сигналу Ret(0) .. Ret(3) відбувається перехід в стан S0, якщо сигнал Ret(0) .. Ret(3) змінюється змінна Cond набуває значення ‘1’ і відбувається перехід в стан S5
/
Опис інтерфейсу системи
entity scanner is
port (
CLK: in STD_LOGIC;
Ret: in STD_LOGIC_VECTOR (3 downto 0);
KeyCode: out STD_LOGIC_VECTOR (7 downto 0);
Storbe: out STD_LOGIC;
Scan: inout STD_LOGIC_VECTOR (3 downto 0));
end scanner;
Розроблена діаграма скінчених автоматів
/
Відповідний VHDL-код для розробленої
діаграми скінчених автоматів
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity scanner is
port (
CLK: in STD_LOGIC;
Ret: in STD_LOGIC_VECTOR (3 downto 0);
KeyCode: out STD_LOGIC_VECTOR (7 downto 0);
Storbe: out STD_LOGIC;
Scan: inout STD_LOGIC_VECTOR (3 downto 0));
end scanner;
architecture scan_arch of scanner is
signal Cond: STD_LOGIC;
type Sreg0_type is (
S1, S3, S5, S2, S0, S4
);
signal Sreg0: Sreg0_type;
begin
Sreg0_machine: process (CLK)
begin
if CLK'event and CLK = '1' then
case Sreg0 is
when S1 =>
Scan <= "0001";
if Cond='0' then
Sreg0 <= S2;
elsif Cond='1' then
Sreg0 <= S5;
end if;
when S3 =>
Scan <= "0100";
if Cond='0' then
Sreg0 <= S4;
elsif Cond='1' then
Sreg0 <= S5;
end if;
when S5 =>
KeyCode <= Ret&Scan;
Storbe <= '1';
if Cond='1' then
Sreg0 <= S5;
elsif Cond='0' then
Sreg0 <= S0;
end if;
when S2 =>
Scan <= "0010";
if Cond='0' then
Sreg0 <= S3;
elsif Cond='1' then
Sreg0 <= S5;
end if;
when S0 =>
Scan <= "1111";
Storbe <= '0';
KeyCode <= "00000000";
if Cond='1' then
Sreg0 <= S1;
elsif Cond='0' then
Sreg0 <= S0;
end if;
when S4 =>
Scan <= "1000";
if Cond='0' then
Sreg0 <= S0;
elsif Cond='1' then
Sreg0 <= S5;
end if;
when others =>null;
end case;
end if;
end process;
end scan_arch;
Результати моделювання в графічному та
табличному вигляді та їх аналіз
Результати у графічному вигляді:
/
Результати у табличному вигляді:
//
Висновки
На цій лабораторній роботі я вивчив принципи роботи принцип роботи сканера клавіатури. Та отримав навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.