Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
ЛАБОРАТОРНА РОБОТА № 5
З ПРЕДМЕТУ ”Мова опису програмних засобів”
НА ТЕМУ:
“ Розробка та моделювання паралельного регістру та регістру зсуву.”
Підготував:ст.гр.КІ-42
Трофімов О.С.
Прийняла: Колодчак О.М.
ЛЬВІВ 2005
Лабораторна робота №5
Розробка та моделювання паралельного регістру та регістру зсуву
Мета роботи: Засвоїти принципи роботи паралельного та зсувного регістрів. Навчитися описувати синхронізовані процеси та використовувати циклічні оператори при описі поведінки об'єктів за допомогою VHDL.
Теоретичні відомості
Паралельний 8-розрядний регістр має:
8-розрядний вхід DATA_IN (7 downto 0) типу std_logic_vector для передачі даних,
вхід синхронізації CLK, типу std_logic,
вхід дозволу на запис WE типу std_logic,
вхід дозволу зчитування RE типу std_logic.
8-розрядний вихід DATA_OUT (7 downto 0) типу std_logic_vector для виводу даних.
Робота регістра має здійснюватися наступним чином:
у стані збереження байта на виході регістра постійно утримується високий імпеданс ("ZZZZZZZZ"), що дозволить організувати роботу декількох регістрів через одну шину, оскільки сигнал високого імпедансу має найнижчий пріоритет;
якщо WE = '1' і RE = '0', то здійснюється запис інформації в регістр;
якщо WE = '0' і RE = '1', то на вихід регістра подається значення байта, що зберігається в цьому регістрі;
всі інші комбінації WE та RE розглядаються як стан збереження байта;
робота регістра має бути синхронізована по сигналу CLK.
Зсувний 8-розрядний регістр має:
один вхід DATA_IN типу std_logic для вводу інформації,
вхід синхронізації CLK типу std_logic,
вхід дозволу на запис WE типу std_logic,
вхід дозволу зчитування RE типу std_logic,
8-розрядний вихід DATA_OUT (7 downto 0) типу std_logic_vector для паралельного виводу даних
Робота регістра має здійснюватися наступним чином: у стані збереження байта на виході регістра постійно утримується високий імпеданс ("ZZZZZZZZ"); якщо WE = '1' і RE = '0', то здійснюється запис інформації в регістр, при цьому сигнал DATA_IN надходить в DATA_OUT(0), значення DATA_OUT(0) переміщується в DATA_OUT(1) і т.д.;
якщо WE = '0' і RE = '1', то на вихід регістра подається значення байта, що зберігається в цьому регістрі;
всі інші комбінації WE та RE розглядаються як стан збереження байта;
робота регістра має бути синхронізована по сигналу CLK.
Хід роботи
Створити новий проект в Active-HDL.
Розробити VHDL-модель паралельного 8-розрядного регістру.
Промоделювати роботу розробленого паралельного регістра в режимах запису інформації, збереження байта та зчитування інформації.
Проаналізувати на основі отриманих часових діаграм відповідність роботи паралельного регістра заданому алгоритму.
Розробити VHDL-модель зсувного 8-розрядного регістру.
Помоделювати роботу розробленого зсувного регістра в режимах запису інформації, збереження байта та зчитування інформації.
Проаналізувати на основі отриманих часових діаграм відповідність роботи зсувного регістра заданому алгоритму.
Програмна реалізація
library IEEE;
use IEEE.std_logic_1164.all;
entity Registers is
generic(Bit_n: integer:=7);
port(
DATA_IN: in std_logic_vector(7 downto 0);
DATA_IN_Z, CLK, WE, RE :in std_logic;
DATA_OUT : out std_logic_vector(7 downto 0);
DATA_OUT_Z : out std_logic_vector(7 downto 0)
);
end entity;
architecture Registers of Registers is
begin
--Паралельний регістр
Paral_Reg: process(CLK, WE, RE)
variable Parallel: std_logic_vector(7 downto 0):="00000000";
begin
if CLK'event and CLK='1' then
--Запис
if WE = '1' and RE = '0' then
Parallel := DATA_IN; --Запис
end if;
--Читання
if WE = '0' and RE = '1' then
DATA_OUT <= Parallel;--Вивід інформації
end if;
--Зберігання
if WE = RE then --Зберігання
DATA_OUT <= "ZZZZZZZZ";--Високий імпеданс
end if;
end if;
end process;
-- Регістр зсуву
Shift_Reg: process(CLK, WE, RE)
variable k: integer;
variable Shift: std_logic_vector(7 downto 0):="00000000";
begin
if CLK'event and CLK='1' then
--Зсув
if WE = '1' and RE = '0' then
for k in 7 downto 1 loop
Shift(k) := Shift(k-1);
end loop;
Shift(0):= DATA_IN_Z;
end if;
--Читання
if WE = '0' and RE = '1' then
DATA_OUT_Z <= Shift;
end if;
--Зберігання
if WE = RE then
DATA_OUT_Z <= "ZZZZZZZZ";
end if;
end if;
end process;
end architecture Registers;
Часова діаграма
Висновок: в ході лабораторної роботи я засвоїв принципи роботи паралельного та зсувного регістрів. Навчився описувати синхронізовані процеси та використовувати циклічні оператори при описі поведінки об'єктів за допомогою VHDL.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!