Частина тексту файла (без зображень, графіків і формул):
Міністерство Освіти і Науки
Національний Університет «Львівська політехніка»
кафедра ЕОМ
Звіт про виконання лабораторної роботи №4
з предмету «Моделювання комп’ютерних систем»
на тему : «Моделювання режиму очікування в цифрових пристроях за допомогою оператора wait»
Мета роботи: отримати практичні навички застосування оператора wait при моделюванні різних режимів очікування у Active-HDL. Навчитися виконувати порівняння часових діаграм.
Основні види застосування оператора wait.
Тип оператора wait
Опис
Приклади
wait for tyme_expression
Припиняє процес на визначений час; Час може бути заданий безпосередньо, або як вираз, результатом якого є значення часу. Використовуються в основному для моделювання на випробувальних стендах.
wait for 10 ns;wait for ClkPeriod / 2;
wait until condition
Припиняє процес доти, доки задана умова не стане істинною завдяки зміні будь-якого сигналу, що містяться в умові. При цьому, якщо сигнал не змінюється, wait until не поновить процес, навіть якщо сигнал задовільняє умову.
wait until CLK='1'; wait until CE and (not RST); wait until IntData > 16;
wait on sensitivity_list
Припиняє процес доти, доки не відбудеться подія з будь-яким з сигналів, вказаних в списку чутливості. Іншими словами, процес поновлюється тільки тоді, коли зміниться значення хоча б одного сигналу з списку чутливості.
wait on CLK; wait on Enable, Data;
складний wait
Містить комбінацію двох або трьох різних форм оператора wait.
wait on Data until CLK='1'; wait until Clk='1' for 10 ns;
Варіант базового коду :
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity lab4Int is
port(
CLK : in STD_LOGIC;
AinOut : inout STD_LOGIC;
Bout : out STD_LOGIC
);
end lab4Int;
architecture lab4Arch of lab4Int is
signal CLK : std_logic :='0';
begin
Pr_CLK :process
begin
-- формування сигналу CLK
end process Pr_CLK;
Pr_A: process(CLK)
begin
if CLK'event and CLK ='1' then Ainout<='1' after 5 ns;
elsif CLK'event and CLK='0' then Ainout<='0' after 5 ns;
end if;
end process Pr_A;
Pr_B: process (AinOut)
begin
if Ainout'event then Bout<= not Ainout;
end if;
end process Pr_B;
end lab4Arch;
Результат моделювання для базового коду на рис.№1
/
Рис.№1
Варіант коду із застосуванням оператора wait :
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity lab4Int is
port(
--CLK : in STD_LOGIC;
AinOut : inout STD_LOGIC;
Bout : out STD_LOGIC
);
end lab4Int;
--}} End of automatically maintained section
architecture lab4Arch of lab4Int is
signal CLK : std_logic :='0';
begin
Pr_CLK :process
begin
CLK <= Not (CLK);
wait for 10ns;
-- формування сигналу CLK
end process Pr_CLK;
Pr_A: process
begin
wait on CLK ;
if CLK'event and CLK ='1' then Ainout<='1' after 5 ns;
elsif CLK'event and CLK='0' then Ainout<='0' after 5 ns;
end if;
end process Pr_A;
Pr_B: process
begin
wait until CLK = '1' ;
if Ainout'event then Bout<= not Ainout;
end if;
end process Pr_B;
end lab4Arch;
На рис.№2 результат виконання коду із застосування оператора wait:
/
Рис.№2
Результат порівняння зображений на рис.№3
/
Рис.№3
В цьому випадку сигнали є інверсія один одного. Якщо змінити в рядку signal CLK : std_logic :='0' , початкове значення сигналу CLK на ‘1’ тоді сигнали будуть ідентичні.
Після виконання змін (додавання в коді рядка wait for 30ns)у нас часова діаграма виглядає так, як на рис. №5
/
рис.№5
Після зміни затримки на 20нс, і порівнянь з попередньою діаграму, середовище видає повідомлення, що нема ніяких відмін.
Висновок : ми ознайомились з оператором wait, і використали його для різних режимів очікування.