Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра «Електронні обчислювальні машини»
Лабораторна робота №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-опису декодера:
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)
subtype TOutput is STD_LOGIC_VECTOR(6 downto 0);
constant ZERO: TOutput := "1110111";
constant ONE: TOutput := "0100100";
constant TWO: TOutput := "1011101";
constant THREE: TOutput := "1101101";
constant FOUR: TOutput := "0101110";
constant FIVE: TOutput := "1101011";
constant SIX: TOutput := "1111011";
constant SEVEN: TOutput := "0100101";
constant EIGHT: TOutput := "1111111";
constant NINE: TOutput := "1101111";
constant GT_NINE:TOutput := "0000000";
begin
if X'event then
c1: case Conv_Integer(X) is
when 0 => Y <= ZERO;
when 1 => Y <= ONE;
when 2 => Y <= TWO;
when 3 => Y <= THREE;
when 4 => Y <= FOUR;
when 5 => Y <= FIVE;
when 6 => Y <= SIX;
when 7 => Y <= SEVEN;
when 8 => Y <= EIGHT;
when 9 => Y <= NINE;
when others => Y <= GT_NINE;
end case c1;
end if;
end process;
end decoder;
Часові діаграми роботи декодера:
Висновки: У мові VHDL присутні оператори процедурних мов програмування. Такі як case, if і тд. Також є можливість оголошувати константи та нові типи даних.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!