Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №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 форми оператору затримки. Також оператор затримки можна використовувати для заміни списку чутливості в процесах.