Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Кафедра ЕОМ
/
ЗВІТ
до лабораторної роботи №8
з дисципліни «Моделювання комп’ютерних систем»
на тему : Використання блок-діаграм для декомпозиції складних пристроїв в САПР Active-HDL
Мета роботи: Навчитися використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримати навички застосування констант generic для проектування структурних елементів. Розробити модель 8-розрядного 7-сегментного індикатора.
Теоретична частина
Постановка задачі
Створити блок - генератор сигналів для 8-розрядного 7-сегментного індикатора. Декодер розряду індикатора та паралельний регістр (моделі яких було розроблено в лабораторних роботах №2 і №5) мають входити до проекту як структурні складові.
Інтерфейс генератора сигналів містить:
вхідний 32-розрядний порт Х типу std_logic_vector (31 downto 0), на який у двійково-десятковій формі подається 8-розрядне десяткове число (на кожний десятковий розряд по 4 двійкові розряди);
вхідний порт WE типу std_logic, подання '1' на який дозволяє запис у проміжний регістр блоку;
сигнал синхронізації CLK типу std_logic,
вісім 7-розрядних вихідних портів LCD7 … LCD0 типу std_logic_vector (6 downto 0), що підключаються безпосередньо до відповідних розрядів 7-сегментного індикатора.
VHDL код схеми генератора :
library IEEE;
use IEEE.std_logic_1164.all;
entity generator is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0);
LCD0 : out STD_LOGIC_VECTOR(6 downto 0);
LCD1 : out STD_LOGIC_VECTOR(6 downto 0);
LCD2 : out STD_LOGIC_VECTOR(6 downto 0);
LCD3 : out STD_LOGIC_VECTOR(6 downto 0);
LCD4 : out STD_LOGIC_VECTOR(6 downto 0);
LCD5 : out STD_LOGIC_VECTOR(6 downto 0);
LCD6 : out STD_LOGIC_VECTOR(6 downto 0);
LCD7 : out STD_LOGIC_VECTOR(6 downto 0)
);
end generator;
architecture generator of generator is
component DC0
port (
Y0 : in STD_LOGIC_VECTOR(3 downto 0);
LCD0 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC1
port (
Y1 : in STD_LOGIC_VECTOR(3 downto 0);
LCD1 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC2
port (
Y2 : in STD_LOGIC_VECTOR(3 downto 0);
LCD2 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC3
port (
Y3 : in STD_LOGIC_VECTOR(3 downto 0);
LCD3 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC4
port (
Y4 : in STD_LOGIC_VECTOR(3 downto 0);
LCD4 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC5
port (
Y5 : in STD_LOGIC_VECTOR(3 downto 0);
LCD5 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC6
port (
Y6 : in STD_LOGIC_VECTOR(3 downto 0);
LCD6 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DC7
port (
Y7 : in STD_LOGIC_VECTOR(3 downto 0);
LCD7 : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DM
port (
C : in STD_LOGIC_VECTOR(31 downto 0);
CLK : in STD_LOGIC;
Y0 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0)
);
end component;
component parvreg
port (
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0);
C : out STD_LOGIC_VECTOR(31 downto 0)
);
end component;
signal RE : STD_LOGIC;
signal C : STD_LOGIC_VECTOR (31 downto 0);
signal Y0 : STD_LOGIC_VECTOR (3 downto 0);
signal Y1 : STD_LOGIC_VECTOR (3 downto 0);
signal Y2 : STD_LOGIC_VECTOR (3 downto 0);
signal Y3 : STD_LOGIC_VECTOR (3 downto 0);
signal Y4 : STD_LOGIC_VECTOR (3 downto 0);
signal Y5 : STD_LOGIC_VECTOR (3 downto 0);
signal Y6 : STD_LOGIC_VECTOR (3 downto 0);
signal Y7 : STD_LOGIC_VECTOR (3 downto 0);
begin
U1 : parvreg
port map(
C => C,
CLK => CLK,
RE => RE,
WE => WE,
X => X
);
U10 : DC0
port map(
LCD0 => LCD0,
Y0 => Y0
);
RE <= not(WE);
U2 : DM
port map(
C => C,
CLK => CLK,
Y0 => Y0,
Y1 => Y1,
Y2 => Y2,
Y3 => Y3,
Y4 => Y4,
Y5 => Y5,
Y6 => Y6,
Y7 => Y7
);
U3 : DC7
port map(
LCD7 => LCD7,
Y7 => Y7
);
U4 : DC5
port map(
LCD5 => LCD5,
Y5 => Y5
);
U5 : DC3
port map(
LCD3 => LCD3,
Y3 => Y3
);
U6 : DC1
port map(
LCD1 => LCD1,
Y1 => Y1
);
U7 : DC6
port map(
LCD6 => LCD6,
Y6 => Y6
);
U8 : DC4
port map(
LCD4 => LCD4,
Y4 => Y4
);
U9 : DC2
port map(
LCD2 => LCD2,
Y2 => Y2
);
end generator;
VHDL код регістра:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity parvreg is
generic(N:integer:=32);
port(
X : in STD_LOGIC_VECTOR(31 downto 0);
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
C : out STD_LOGIC_VECTOR(31 downto 0)
);
end parvreg;
architecture parvreg of parvreg is
begin
process(CLK)
variable reg: std_logic_vector(N-1 downto 0);
begin
if (CLK = '1' and WE = '1' and RE = '0') then reg := X;
elsif (CLK = '1' and WE = '0' and RE = '1') then C <= reg;
end if;
end process;
end parvreg;
VHDL код демультиплексора:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DM is
port(
C : in STD_LOGIC_VECTOR(31 downto 0);
CLK : in STD_LOGIC;
Y0 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0)
);
end DM;
architecture DM of DM is
begin
process(CLK)
begin
if (CLK='1') then
Y7<=C(31 downto 28);
Y6<=C(27 downto 24);
Y5<=C(23 downto 20);
Y4<=C(19 downto 16);
Y3<=C(15 downto 12);
Y2<=C(11 downto 8);
Y1<=C(7 downto 4);
Y0<=C(3 downto 0);
end if;
end process;
end DM;
VHDL код семисегментного індикатора:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity DC0 is
port(
Y0 : in STD_LOGIC_VECTOR(3 downto 0);
LCD0 : out STD_LOGIC_VECTOR(6 downto 0)
);
end DC0;
architecture DC0 of DC0 is
begin
process(Y0)
begin
case Conv_Integer(Y0) is
when 0 =>LCD0<= "1110111";
when 1 =>LCD0<= "0010010";
when 2 =>LCD0<= "1011101";
when 3 =>LCD0<= "1101101";
when 4 =>LCD0<= "0111010";
when 5 =>LCD0<= "1101011";
when 6 =>LCD0<= "1101111";
when 7 =>LCD0<= "1010010";
when 8 =>LCD0<= "1111111";
when 9 =>LCD0<= "1111011";
when others =>LCD0<= "1110111";
end case;
end process;
end DC0;
Рис.1 Діаграма роботи генератора сигналів.
Висновок. На даній лабораторній роботі я навчився використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримав навички застосування констант generic для проектування структурних елементів. Розробив модель 8-розрядного 7-сегментного індикатора.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!