Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 2
з курсу „ Мови опису апаратних засобів ”
Тема:
Розробка та моделювання декодерадля семисегментного індикатора
Львів – 2005
Мета роботи: вивчити методи опису поведінки об'єктів за допомогою архітектур та процесів, шляхи застосування оператора вибору 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 використати можливість вибору алтернативи для всіх можливих значень змінної або сигналу.
Порядок виконання роботи:
Створив новий проект в Active-HDL.
Створив об'єкт декодера та описав на VHDL його поведінку.
Скомпілював створений об'єкт (меню Design \ Compile, або клавіша <F11>).
У вікні Design Browser для встановлення верхнього рівня моделювання (Top Level) вибрав об'єкт-декодер.
Ініціалізував моделювання об'єкту (меню Simulation \ Initialize Simulation).
Створив в проекті новий файл Waveform Viewer (меню File \ New \ Waveform).
Вставив в вікно Waveform Viewer вхідний та вихідний сигнали декодера (меню Waveform \ Add Signals).
Призначив вхідному сигналу декодера стимулятори (меню Waveform \ Stimulators).
Запустив процес симуляції декодера (меню Simulation \ Run).
Дослідив та перевірив отримані часові діаграми роботи декодера.
Змінюючи стимулятори на вхідних портах декодера, перевірив коректність його роботи для всіх можливих значень на вході.
Текст VHDL-опису декодера.
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 Dec of Decoder is
begin
process(X)
variable n:integer;
begin
n:=Conv_Integer(X);
case n is
when 0 => Y <= "1110111";
when 1 => Y <= "0100100";
when 2 => Y <= "1011101";
when 3 => Y <= "1101101";
when 4 => Y <= "0101110";
when 5 => Y <= "1101011";
when 6 => Y <= "1101111";
when 7 => Y <= "1010010";
when 8 => Y <= "1111111";
when 9 => Y <= "1101111";
when others => Y <= "0000000";
end case;
end process;
end Dec;
Часові діаграми роботи декодера.
Висновки: виконуючи дану лабораторну роботу, я вивчив методи опису поведінки об'єктів за допомогою архітектур та процесів, шляхи застосування оператора вибору case, навчився моделювати поведінку об'єктів в САПР Active-HDL на прикладі моделювання декодера.