Частина тексту файла (без зображень, графіків і формул):
Міністерство Освіти і Науки
Національний Університет «Львівська політехніка»
кафедра ЕОМ
Звіт про виконання лабораторної роботи №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.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!