Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №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;
Варіант базового коду та відповідні результати моделювання (п. 4):
--Pr_CLK: process(CLK)
--begin
--wait for 10 ns;
--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;
--wait for 20 ns;
--wait on CLK;
end process Pr_A;
Pr_B: process(Ainout)
begin
if Ainout'event then Bout<= not Ainout;
end if;
--wait until Ainout'event;
--Bout<= not Ainout;
end process Pr_B;
end object;
Варіанти коду із застосуванням оператора wait (пп. 6, 7, 8):
Pr_CLK: process
begin
wait for 10 ns;
end process Pr_CLK;
Pr_A: process
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;
--wait for 20 ns;
wait on CLK;
end process Pr_A;
Pr_B: process(Ainout)
begin
if Ainout'event then Bout<= not Ainout;
end if;
wait until Ainout'event;
Bout<= not Ainout;
end process Pr_B;
end object;
Результати порівняння (п. 9):
Варіанти коду із застосуванням оператора wait (п. 12):
Pr_CLK: process
begin
wait for 10 ns;
end process Pr_CLK;
Pr_A: process
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;
wait for 30 ns;
wait on CLK;
end process Pr_A;
Pr_B: process(Ainout)
begin
if Ainout'event then Bout<= not Ainout;
end if;
wait until Ainout'event;
Bout<= not Ainout;
end process Pr_B;
end object;
Результати моделювання (п. 12):
Результати моделювання (п. 14):
Результати моделювання (п. 15):
Висновки: Для синхронізації процесів у мові VHDL використовується оператор wait. Так як буває багато різних причин зупинки – мова VHDL підтримує 4 форми оператору затримки. Також оператор затримки можна використовувати для заміни списку чутливості в процесах.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!