Частина тексту файла (без зображень, графіків і формул):
Міністерство Освіти і Науки
Національний Університет «Львівська політехніка»
кафедра ЕОМ
Звіт про виконання лабораторної роботи №8
з предмету «Моделювання комп’ютерних систем»
на тему : «Використання блок-діаграм для декомпозиції складних пристроїв
в САПР Active-HDL»
Мета роботи: Навчитися використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримати навички застосування констант generic для проектування структурних елементів. Розробити модель 8-розрядного 7-сегментного індикатора.
На рисю№1 схема блоку, створена за допомогою блок-діаграм САПР Active-HDL після виконання запису в регістр і далі зчитування з нього.
/
Рис.№1
Коди у VHDL сгенерованих в проекті :
Файл decod.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity DecoderInt is
port(
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end DecoderInt;
architecture DecoderArch of DecoderInt is
begin
process (X)
begin
case(x) is
when x"0" => Y <= "1111111";
when x"1" => Y <= "0100100";
when x"2" => Y <= "1101011";
when x"3" => Y <= "1101101";
when x"4" => Y <= "0111100";
when x"5" => Y <= "1011101";
when x"6" => Y <= "1011111";
when x"7" => Y <= "1100100";
when x"8" => Y <= "1111111";
when x"9" => Y <= "1111101";
when others => Y <="0000000";
end case;
end process;
end DecoderArch;
Файл demux.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DemuxInt is
port(
CLK : in STD_LOGIC;
Seg : in STD_LOGIC_VECTOR(31 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y0 : out STD_LOGIC_VECTOR(3 downto 0)
);
end DemuxInt;
architecture DemuxArch of DemuxInt is
begin
process (Seg)
begin
Y0 <= Seg(3 downto 0);
Y1 <= Seg(7 downto 4);
Y2 <= Seg(11 downto 8);
Y3 <= Seg(15 downto 12);
Y4 <= Seg(19 downto 16);
Y5 <= Seg(23 downto 20);
Y6 <= Seg(27 downto 24);
Y7 <= Seg(31 downto 28);
end process ;
end DemuxArch;
Файл Register.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity ParalRg is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
RE : in STD_LOGIC;
Data_In : in STD_LOGIC_Vector (31 downto 0) :="01101000001101000101011100100010";
--Data_In : in STD_LOGIC_Vector (7 downto 0) :="00000000";
Data_Out : out STD_LOGIC_VECTOR(31 downto 0)
);
end ParalRg;
architecture ParalRGAch of ParalRg is
signal temp : std_logic_vector (31 downto 0) ; -- Використовується для зберігання всередині регістра
begin
Proc : process (CLK)
begin
if RE = '0' and WE = '1' then temp<=Data_In ;
elsif RE = '1' and WE = '0' then Data_Out <= temp;
else Data_Out <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
end if;
end process Proc;
end ParalRGAch;
Файл diagr.vhd
library IEEE;
use IEEE.std_logic_1164.all;
-- other libraries declarations
library LAB8;
entity diagr is
generic(X : in STD_LOGIC_VECTOR(31 downto 0):="00000001001000110100010101100111");
port(
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
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 diagr;
architecture diagr of diagr is
---- Component declarations -----
component DecoderInt
port (
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DemuxInt
port (
CLK : in STD_LOGIC;
Seg : in STD_LOGIC_VECTOR(31 downto 0);
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 ParalRg
port (
CLK : in STD_LOGIC;
Data_In : in STD_LOGIC_VECTOR(31 downto 0) := "01101000001101000101011100100010";
RE : in STD_LOGIC;
WE : in STD_LOGIC;
Data_Out : out STD_LOGIC_VECTOR(31 downto 0)
);
end component;
---- Signal declarations used on the diagram ----
signal BUS1609 : STD_LOGIC_VECTOR (31 downto 0);
signal BUS409 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS783 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS811 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS819 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS827 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS835 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS843 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS851 : STD_LOGIC_VECTOR (3 downto 0);
---- Configuration specifications for declared components
for U2 : ParalRg use entity work.ParalRg(ParalRGAch);
begin
---- Component instantiations ----
U1 : DecoderInt
port map(
X => BUS851,
Y => LCD0
);
U10 : DecoderInt
port map(
X => BUS843,
Y => LCD1
);
U2 : ParalRg
port map(
CLK => CLK,
Data_In => X,
Data_Out => BUS1609,
RE => RE,
WE => WE
);
U3 : DemuxInt
port map(
CLK => CLK,
Seg => BUS1609,
Y0 => BUS409,
Y1 => BUS783,
Y2 => BUS811,
Y3 => BUS819,
Y4 => BUS827,
Y5 => BUS835,
Y6 => BUS843,
Y7 => BUS851
);
U4 : DecoderInt
port map(
X => BUS409,
Y => LCD7
);
U5 : DecoderInt
port map(
X => BUS783,
Y => LCD6
);
U6 : DecoderInt
port map(
X => BUS811,
Y => LCD5
);
U7 : DecoderInt
port map(
X => BUS819,
Y => LCD4
);
U8 : DecoderInt
port map(
X => BUS827,
Y => LCD3
);
U9 : DecoderInt
port map(
X => BUS835,
Y => LCD2
);
end diagr;
Висновок :виконуючи цю лабораторну роботу ми навчилися використовувати блок-діаграми (Block Diagrams) для декомпозиції складних об'єктів на структурні складові. Отримали навички застосування констант generic для проектування структурних елементів. Розробили модель 8-розрядного 7-сегментного індикатора.