Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
ЗВІТ
до лабораторної роботи № 2
з дисципліни: "Моделювання комп'ютерних систем"
Розробка та моделювання декодера для семисегментного індикатора.
Мета роботи: вивчити методи опису поведінки об'єктів за допомогою архітектур та процесів, шляхи застосування оператора вибору case, навчитись моделювати поведінку об'єктів в САПР Active-HDL.
Теоретична частина
Для візуалізації процесів, що протікають в складному цифровому пристрої, необхідно виводити значення сигналів на 7-сегментний індикатор. Необхідно розробити на VHDL пристрій "декодер", що перетворює вхідний 4-розрядний двійково-десятковий код у сигнал для одного розряду 7-сегментного індикатора. Кожний розряд індикатора являє собою 7 сегментів, подання логічної одиниці на які викликає їх свічення. Наприклад, подання на індикатор числа "1101101" приведе до висвічення цифри "3":
Інтерфейс декодера:
4-розрядний вхідний порт X типу std_logic_vector (3 downto 0),
вихідний 7-розрядний порт Y типу std_logic_vector (6 downto 0):
Якщо на вхід Х пристрою об'єкта поданий код від 0 до 9, декодер зформує на виході Y сигнал, який задає зображення цього числа. Для кодів 10..15 на виході формується сигнал "0000000" (жоден сегмент індикатора не світиться). Декодер повинен оновлювати сигнал Y кожний раз, коли змінюється значення вхідного порту Х.
Рекомендації до створення VHDL-опису:
Можливі значення вихідного сигналу задавати за допомогою констант.
Для перетворення вхідного сигналу з типу std_logic_vector в тип integer використовувати функцію Conv_Integer. Приклад її застосування:
n := Conv_Integer(S) , де n - змінна типу integer, S - змінна або сигнал типу std_logic_vector.
Для того, щоби використовувати цю функцію, необхідно підключити відповідний пакет підпрограм, додавши рядок
use IEEE.STD_LOGIC_UNSIGNED.all;
на початку файлу опису.
При застосуванні оператора case використати можливість вибору альтернативи для всіх можливих значень змінної або сигналу.
Порядок виконання роботи:
1. Створити новий проект в Active-HDL.
2. Створити об'єкт декодера та описати на VHDL його поведінку.
3. Скомпілювати створений об'єкт (меню Design \ Compile, або клавіша <F11>).
4. У вікні Design Browser для встановлення верхнього рівня моделювання (Top Level) вибрати об'єкт-декодер.
5. Ініціалізувати моделювання об'єкта (меню Simulation \ Initialize Simulation).
6. Створити в проекті новий файл Waveform Viewer (меню File \ New \ Waveform).
7. Вставити в вікно Waveform Viewer вхідний та вихідний сигнали декодера (меню Waveform \ Add Signals).
8. Призначити вхідному сигналу декодера стимулятори (меню Waveform \ Stimulators).
9. Запустити процес симуляції декодера (меню Simulation \ Run).
10. Вивчити отримані часові діаграми роботи декодера.
11. Змінюючи стимулятори на вхідних портах декодера, перевірити коректність його роботи для всіх можливих значень на вході.
12. Підготувати звіт до захисту.
Код програми:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Decoder is
port(
X : in STD_LOGIC_VECTOR(3 downto 0) ;
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end Decoder;
architecture Decoder of Decoder is
begin
process (X)
variable Z: integer;
begin
Z := Conv_Integer(X);
case Z is
when 0 =>Y<="1110111";
when 1 =>Y<="0100100";
when 2 =>Y<="1011101";
when 3 =>Y<="1101101";
when 4 =>Y<="0111010";
when 5 =>Y<="1101011";
when 6 =>Y<="1011111";
when 7 =>Y<="1010010";
when 8 =>Y<="1111111";
when 9 =>Y<="1111011";
when others=> Z:=0;
end case;
end process;
end Decoder;
Результат виконання програми:
Висновок: На даній лабораторній роботі розробила та змоделювала декодер для семисегментного індикатора. Внаслідок коректної роботи отримала та продемонструвала роботу програми.