You are on page 1of 7

Лабораторна робота №4

Тема: Моделювання режиму очікування в цифрових пристроях за


допомогою оператора wait
Мета роботи: отримати практичні навички застосування оператора
wait при моделюванні різних режимів очікування у Active-HDL. Навчитися
виконувати порівняння часових діаграм.
Порядок виконання роботи:
1. Створюємо новий проект в Active-HDL (рис.1).

Рисунок 1 – Створення нового проекту

2. Створюємо об'єкт з наступним інтерфейсом (рис. 2):


- вхідний порт CLK типу std_logic,
- вхідний-вихідний порт Ainout типу std_logic:
- вихідний порт Bout типу std_logic.

Рисунок 2 – Інтерфейс об'єкта


3. В тіло архітектури включаємо даний нам код (рис. 3).

Рисунок 3 – Код

4. Скомпілюємо створений об'єкт (рис. 3) і промоделюємо його роботу.


Отримаємо часові діаграми для сигналів CLK (задається як джерело
з синхронізуючим імпульсом частотою 50 МГц),Ainout, Bout.

5. Зберегти результати моделювання як файл з ім'ям Wform1.awf у


біжучій директорії
6. За допомогою оператора wait for сформувати синхронізуючий
сигнал CLK самостійно (попередньо виключивши його з інтерфейсу
пристрою) в тілі процесу Pr_CLK. Рівень цього сигналу повинен
змінюватись кожні 10 ns.

7. Вивчити роботу процесу Pr_А та переписати його з використанням


оператора wait on.

8. Вивчити роботу процесу Pr_В та переписати його з використанням


оператора wait until.

9. Промоделювати роботу створених за допомогою оператору wait


процесів, отримати часову діаграму.

10. Порівняти поточну часову діаграму та базову Wform1, для чого


ввійти до меню Waveform \ Compare Waveforms - на екрані з'явиться
вікно "Open"; то вибрати файл Wform1.awf та натиснути кнопку
"Open" - в результаті до поточної часової діаграми будуть додані
часові залежності, які зберігаються у Wform1.awf, темно-синім
кольором позначені поточні часові залежності, червоним - додані,
розбіжності між порівнюваними сигналами позначаються грубою
блакитною лінією.

11. Вийти з режиму порівняння. Для цього необхідно вибрати у вікні


часових діаграм будь-яку лінію розбіжності сигналів (грубу блакитну
лінію), та натиснути праву кнопку миші, і у меню, що з'явилося,
вибрати пункт "Remove Difference Marks".

12. Додати до послідовності операцій процесу Pr_А вираз wait for 30 ns.

13. Промоделювати роботу процесу, записати отриману часову діаграму,


як файл Wform2.awf
14. У виразі, який був доданий у п.12, змінити час затримки на 20 ns

15. Промоделювати роботу процесу. Отриману часову діаграму


порівняти з Wform2.awf

Висновок: Під час виконання лабораторної роботи №4 ми набули


практичних навичок використання оператора wait для моделювання режимів
очікування в цифрових пристроях у середовищі Active-HDL. Ми вивчили різні
типи оператора wait, включаючи "wait for", "wait until" та "wait on", і дослідили
їх застосування для створення режимів очікування в симуляції. Отримані
результати та порівняння часових діаграм допомогли нам краще зрозуміти
принципи роботи цих операторів
Код 1:
library IEEE;
use IEEE.std_logic_1164.all;

entity comp is
port(
CLK : in STD_LOGIC;
Ainout : out STD_LOGIC;
Bout : out STD_LOGIC
);
end comp;

architecture Behavioral of comp is


signal internal_A: STD_LOGIC := '0';
begin
Pr_CLK: process(CLK)
begin
-- формування сигналу CLK
end process Pr_CLK;

Pr_A: process(CLK)
begin
if CLK'event and CLK = '1' then
internal_A <= '1' after 5 ns;
Ainout <= internal_A;
elsif CLK'event and CLK = '0' then
internal_A <= '0' after 5 ns;
Ainout <= internal_A;
end if;
end process Pr_A;

Pr_B: process(internal_A)
begin
if internal_A'event then
Bout <= not internal_A;
end if;
end process Pr_B;
end architecture Behavioral;
Код 2:
library IEEE;
use IEEE.std_logic_1164.all;

entity comp is
port(
Ainout : out STD_LOGIC;
Bout : out STD_LOGIC
);
end comp;

architecture Behavioral of comp is


signal CLK: STD_LOGIC := '0';
signal internal_A: STD_LOGIC := '0';
begin
Pr_CLK: process
begin
CLK <= not CLK after 10 ns;
wait for 10 ns;
end process Pr_CLK;

Pr_A: process
begin
wait on CLK;
internal_A <= not CLK after 5 ns;
Ainout <= internal_A;
end process Pr_A;

Pr_B: process
begin
wait until internal_A'event;
Bout <= not internal_A;
end process Pr_B;
end architecture Behavioral;

You might also like