Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
ЗВІТ
до лабораторної роботи № 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;
Результат виконання програми:
Висновок: На даній лабораторній роботі розробила та змоделювала декодер для семисегментного індикатора. Внаслідок коректної роботи отримала та продемонструвала роботу програми.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!