Частина тексту файла (без зображень, графіків і формул):
Міністерство Освіти і Науки
Національний Університет «Львівська політехніка»
кафедра ЕОМ
Звіт про виконання лабораторної роботи №7
з предмету «Моделювання комп’ютерних систем»
на тему : «Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL»
Мета роботи: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
Код програми :
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity diagram is
port (
CLK: in STD_LOGIC;
Ret: in STD_LOGIC_VECTOR (15 downto 0);
KeyCode: out STD_LOGIC_VECTOR (7 downto 0);
Strobe: out STD_LOGIC;
Scan: inout STD_LOGIC_VECTOR (3 downto 0);
temp: inout STD_LOGIC_VECTOR (3 downto 0));
end diagram;
architecture diagram_arch of diagram is
-- diagram signals declarations
signal Cond: STD_LOGIC :='0';
-- SYMBOLIC ENCODED state machine: Diagram
type Diagram_type is (
S0, S2, S3, S4, S1, S5
);
-- attribute enum_encoding of Diagram_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding
signal Diagram: Diagram_type;
begin
----------------------------------------------------------------------
-- Machine: Diagram
----------------------------------------------------------------------
Diagram_machine: process (CLK)
begin
if CLK'event and CLK = '1' then
-- Set default values for outputs, signals and variables
-- ...
case Diagram is
when S0 =>
Scan <= "1111";
Strobe <= '0';
if Cond = '0' then
Diagram <= S0;
elsif Cond = '1' then
Diagram <= S1;
end if;
when S2 =>
Scan <= "0010";
temp <= Ret (7 downto 4);
if Cond = '0' then
Diagram <= S3;
elsif Cond = '1' then
Diagram <= S5;
end if;
when S3 =>
Scan <= "0100";
temp <= Ret (11 downto 8);
if Cond = '0' then
Diagram <= S4;
elsif Cond = '1' then
Diagram <= S5;
end if;
when S4 =>
Scan <= "1000";
temp <= Ret (15 downto 12);
if Cond = '1' then
Diagram <= S5;
elsif Cond = '0' then
Diagram <= S0;
end if;
when S1 =>
Scan <= "0001";
temp <= Ret (3 downto 0);
if Cond = '1' then
Diagram <= S5;
elsif Cond = '0' then
Diagram <= S2;
end if;
when S5 =>
Strobe <= '1';
Scan <= "1111";
if Cond = '0' then
Diagram <= S1;
elsif Cond = '1' then
Diagram <= S5;
end if;
--vhdl_cover_off
when others =>
null;
--vhdl_cover_on
end case;
end if;
end process;
-- signal assignment statements for combinatorial outputs
Cond_assignment:
Cond <= Ret(0) or Ret(1) or Ret(2) or Ret(3)or Ret(4)or Ret(5)or Ret(6)or Ret(7)or Ret(8)or Ret(9)or Ret(10)or Ret(11)or Ret(12)or Ret(13)or Ret(14)or Ret(15) when (Diagram = S0) else
Ret(4) or Ret (5) or Ret (6) or Ret (7) when (Diagram = S2) else
Ret(8) or Ret (9) or Ret (10) or Ret (11) when (Diagram = S3) else
Ret(12) or Ret (13) or Ret (14) or Ret (15) when (Diagram = S4) else
Ret(0) or Ret(1) or Ret(3) when (Diagram = S1) else
'0' when (Diagram = S5) else
Ret(0) or Ret(1) or Ret(2) or Ret(3)or Ret(4)or Ret(5)or Ret(6)or Ret(7)or Ret(8)or Ret(9)or Ret(10)or Ret(11)or Ret(12)or Ret(13)or Ret(14)or Ret(15);
KeyCode_7_assignment:
KeyCode(7) <= '0' when (Diagram = S0) else
Scan(3) when (Diagram = S5) else
'0';
KeyCode_6_assignment:
KeyCode(6) <= '0' when (Diagram = S0) else
Scan(2) when (Diagram = S5) else
'0';
KeyCode_5_assignment:
KeyCode(5) <= '0' when (Diagram = S0) else
Scan(1) when (Diagram = S5) else
'0';
KeyCode_4_assignment:
KeyCode(4) <= '0' when (Diagram = S0) else
Scan(0) when (Diagram = S5) else
'0';
KeyCode_3_assignment:
KeyCode(3) <= '0' when (Diagram = S0) else
temp(3) when (Diagram = S5) else
'0';
KeyCode_2_assignment:
KeyCode(2) <= '0' when (Diagram = S0) else
temp(2) when (Diagram = S5) else
'0';
KeyCode_1_assignment:
KeyCode(1) <= '0' when (Diagram = S0) else
temp(1) when (Diagram = S5) else
'0';
KeyCode_0_assignment:
KeyCode(0) <= '0' when (Diagram = S0) else
temp(0) when (Diagram = S5) else
'0';
end diagram_arch;
На рис.№1 діаграма скінченних автоматів :
/
Рис.№1
На рис.№2 результат виконання програми
/
Рис.№2
Висновок виконуючи цю роботу ми вивчили принцип роботи сканера клавіатури. Отримали навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.