Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
ЛАБОРАТОРНА РОБОТА № 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.